« Jeu de la vie » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| Ligne 8 : | Ligne 8 : | ||
A chaque génération, les règles suivantes s'appliquent simultanément à toutes les cellules : |
A chaque génération, les règles suivantes s'appliquent simultanément à toutes les cellules : |
||
(expliquer le principe de voisins : diagonale, haut, bas, gauche, droite) |
|||
- Une cellules vivante meurt si elle a moins de 2 ou plus de 3 voisins vivants (sous-population ou surpopulation) |
- Une cellules vivante meurt si elle a moins de 2 ou plus de 3 voisins vivants (sous-population ou surpopulation) |
||
| Ligne 35 : | Ligne 37 : | ||
<pre># Initialisation d'une grille de dimensions définies par l'utilisateur |
<pre># Initialisation d'une grille de dimensions définies par l'utilisateur |
||
cases = [[0 for _ in range(largeur)] for _ in range(hauteur)]</pre> |
cases = [[0 for _ in range(largeur)] for _ in range(hauteur)]</pre> |
||
L'affichage se fait via Tkinter, en dessinant des rectangles pour chaque cellule selon son état. |
|||
===Calcul des voisins et évolution des cellules=== |
|||
<pre> def voisins_vivants(x, y): |
|||
voisins = [(-1, -1), (-1, 0), (-1, 1), |
|||
(0, -1), (0, 1), |
|||
(1, -1), (1, 0), (1, 1)] |
|||
nb_vivants = 0 |
|||
for dx, dy in voisins: |
|||
nx, ny = x + dx, y + dy |
|||
if 0 <= nx < hauteur and 0 <= ny < largeur: |
|||
nb_vivants += cases[nx][ny] |
|||
return nb_vivants |
|||
</pre> |
|||
Version du 24 mars 2025 à 10:01
Introduction
Le jeu de la vie est un automate cellulaire inventé par John Conway en 1970. Il se base sur des règles très simples pour déterminer l'évolution d'un ensemble de cellules sur une grille. Cette simulation permet d'observer l'émergence de motifs complexes à partir d'états initialement simple.
Théorie et règles
Règles de base du jeu de la vie
A chaque génération, les règles suivantes s'appliquent simultanément à toutes les cellules :
(expliquer le principe de voisins : diagonale, haut, bas, gauche, droite)
- Une cellules vivante meurt si elle a moins de 2 ou plus de 3 voisins vivants (sous-population ou surpopulation)
- Une cellule vivante survit si elle a exactement 2 ou 3 voisins.
- Une cellule morte naît si elle a exactement 3 voisins vivants
Ces règles simples donnent naissance à une diversité de motifs et d'interactions.
Exemples de comportements
Mettre des gif pour illustre ça
- Les oscillateurs - Les vaisseaux - Les structures stationnaires
Implémentation sur une grille finie
Structure de données utilisée
La version naïve repose sur un tableau à deux dimensions, où chaque élément représente l'état de la cellule (0 pour morte, 1 pour vivante).
Initialisation et affichage de la grille
# Initialisation d'une grille de dimensions définies par l'utilisateur cases = [[0 for _ in range(largeur)] for _ in range(hauteur)]
L'affichage se fait via Tkinter, en dessinant des rectangles pour chaque cellule selon son état.
Calcul des voisins et évolution des cellules
def voisins_vivants(x, y):
voisins = [(-1, -1), (-1, 0), (-1, 1),
(0, -1), (0, 1),
(1, -1), (1, 0), (1, 1)]
nb_vivants = 0
for dx, dy in voisins:
nx, ny = x + dx, y + dy
if 0 <= nx < hauteur and 0 <= ny < largeur:
nb_vivants += cases[nx][ny]
return nb_vivants