Project Genesis : Codez la Vie
Project Genesis
DEADLINE VENDREDI 06 MARS - 20H00
Barème /20

L'Algorithme du Vivant

Bienvenue dans Project Genesis. Votre mission est de recréer une vie artificielle à partir de zéro, en utilisant Python.

La Stack Technique
  • Python 3.x
  • Pygame (Graphismes)
  • Algo : Tableaux 2D
Organisation

Travail en équipe de 3 développeurs.

Vous êtes évalués sur le résultat ET sur la qualité de votre code.

1. L'Initialisation

Mise en place de l'environnement graphique.

Objectifs


  1. Installer la bibliothèque pygame via le terminal.
  2. Créer un script main.py.
  3. Ouvrir une fenêtre de dimensions 800x600.
  4. Mettre en place la boucle infinie (Game Loop) pour garder la fenêtre ouverte.
  5. Gérer la fermeture (bouton X) sans faire planter Python.

Astuces

Pour installer pygame : pip install pygame (ou pip3 sur Mac).

import pygame pygame.init() screen = pygame.display.set_mode((800, 600)) running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False pygame.quit()

2. La Grille (Visuel)

Objectifs

Dessiner le "quadrillage" qui recevra nos cellules.

  • Définir TAILLE_CASE = 20 (pixels).
  • Calculer mathématiquement le nombre de colonnes et de lignes.
  • Dessiner les lignes verticales et horizontales.
Maths

nb_cols = LARGEUR // TAILLE_CASE

Utilisez deux boucles range séparées : une pour les traits verticaux, une pour les traits horizontaux.

3. Les Données (Backend)

La Matrice

Le visuel est prêt, il faut maintenant la mémoire. La grille est représentée par une liste de listes.

grille[y][x] = 0 (Mort)
grille[y][x] = 1 (Vivant)
Objectifs :
  1. Générer une matrice remplie de 0 avec les bonnes dimensions.
  2. Créer une fonction d'affichage qui parcourt la matrice et dessine un carré (pygame.draw.rect) si la valeur est 1.
Piège Classique

Ne faites pas [[0]*10]*10 ! Cela crée des copies liées (modifier une ligne modifie les autres).

Utilisez une compréhension de liste :

grille = [[0 for x in range(cols)] for y in range(rows)]

4. Interaction Utilisateur

Donner la vie (Clic)

Avant d'automatiser, on doit pouvoir dessiner nous-mêmes.

  1. Dans la boucle d'événements, détecter pygame.MOUSEBUTTONDOWN.
  2. Récupérer les coordonnées pixels (ex: x=450, y=20).
  3. Convertir en indices de grille (ex: col=22, row=1).
  4. Inverser l'état de la cellule cliquée (0->1 ou 1->0).

5. Algorithme des Voisins

C'est l'étape la plus difficile du projet. Concentration !

Compter l'entourage

Pour chaque cellule, on doit savoir combien de voisins sont vivants (valeur 1) autour d'elle (8 cases adjacentes).

Problème : Si je suis sur le bord gauche, je n'ai pas de voisin à gauche ! Cela crée une erreur IndexError.

Solution : Le Modulo (%)

Pour rendre le monde "infini" (torique), on utilise le reste de la division entière.

# Voisin de gauche voisin_x = (x - 1) % nb_colonnes # Si x = 0, voisin_x devient la dernière colonne !

6. Le Moteur de Règles

L'essence du jeu. Appliquer les lois de Conway.

RÈGLES DE MORT

  • 1. L'Isolement
    Moins de 2 voisins Meurt ☠️
  • 2. La Surpopulation
    Plus de 3 voisins Meurt ☠️

RÈGLES DE VIE

  • 3. La Naissance
    Cellule vide + Exactement 3 voisins Naît ✨
  • 4. L'Équilibre (Survie)
    Cellule vivante + 2 ou 3 voisins Reste en vie 🛡️
Implémentation

Vous devez coder la fonction prochaine_etape(grille).

ATTENTION : Vous devez créer une nouvelle grille vide au début de la fonction, la remplir avec les nouveaux états, et retourner cette nouvelle grille. Ne modifiez jamais la grille actuelle pendant que vous comptez les voisins !

7. La Simulation

Mettre en mouvement

L'utilisateur ne veut pas cliquer 1000 fois. Ça doit bouger tout seul.

  1. Ajouter un booléen en_pause = True.
  2. Utiliser la barre ESPACE pour changer cet état.
  3. Dans la boucle principale : if not en_pause: grille = prochaine_etape(grille).
  4. Ralentir le temps : Utilisez pygame.time.Clock() et clock.tick(10) pour limiter à 10 images/seconde.

8. Bonus & UI (Optionnel)

Points Bonus

Pour viser le 20/20 et épater la classe.

  • R : Remettre tout à zéro (Reset).
  • A : Générer une grille aléatoire.
  • C : Colorer les cellules selon leur âge (jeune=vert, vieux=bleu).
  • Afficher "PAUSE" ou "LECTURE" en texte sur l'écran.

Rendu Final & Barème

Critère Points
Fonctionnalité (Ça marche)
La simulation tourne, les règles de Conway sont respectées, pas de crash.
5 pts
Qualité du Code (Propreté)
Noms de variables clairs (ex: nb_voisins), code aéré, fonctions courtes.
5 pts
Compréhension & Logique (Algorithmique)
Maîtrise des tableaux 2D et des boucles imbriquées. Capacité à expliquer sa logique.
5 pts
Dossier Technique
Qualité de la rédaction, orthographe et pertinence des explications.
5 pts
Bonus (Pour les experts)
Couleurs dynamiques, bouton Reset, grille aléatoire...
+2 pts

Livrables

A envoyer par mail à M. Salah :

Ou fichier .py/.zip

Deadline : Vendredi 06 Mars, 20h00