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
- Installer la bibliothèque
pygamevia le terminal. - Créer un script
main.py. - Ouvrir une fenêtre de dimensions 800x600.
- Mettre en place la boucle infinie (Game Loop) pour garder la fenêtre ouverte.
- Gérer la fermeture (bouton X) sans faire planter Python.
Astuces
Pour installer pygame : pip install pygame (ou pip3 sur Mac).
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.
Doc Utile
pygame.draw.line3. 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] = 1 (Vivant)
- Générer une matrice remplie de 0 avec les bonnes dimensions.
- 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.
- Dans la boucle d'événements, détecter
pygame.MOUSEBUTTONDOWN. - Récupérer les coordonnées pixels (ex: x=450, y=20).
- Convertir en indices de grille (ex: col=22, row=1).
- Inverser l'état de la cellule cliquée (0->1 ou 1->0).
5. Algorithme des Voisins
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.
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.
- Ajouter un booléen
en_pause = True. - Utiliser la barre ESPACE pour changer cet état.
- Dans la boucle principale :
if not en_pause: grille = prochaine_etape(grille). - Ralentir le temps : Utilisez
pygame.time.Clock()etclock.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