Jeu de la vie

Le Jeu de la vie (ou Game of Life) est un automate cellulaire inventé par le mathématicien britannique John Horton Conway en 1970. C'est un modèle mathématique qui simule l'évolution de cellules sur une grille en fonction de règles simples. Chaque cellule peut être vivante ou morte, et son état évolue à chaque génération selon le nombre de voisins vivants. Pour plus de détails, vous pouvez consulter la page Wikipedia du Jeu de la vie.

Une cellule qui a 3 voisins peut naitre, ou rester en vie.

Une cellule qui a 2 voisins reste dans le même état (morte ou vivante).

Dans les autres acs, la cellule meurt.

Python
from random import randint

class Cellule:
    def __init__(self, vie):
        self.vie = vie
        self.voisins = []

    def vivre(self):
        self.vie = 1

    def mort(self):
        self.vie = 0

    def ajoutVoisin(self, voisin):
        self.voisins.append(voisin)

    def nbVoisinsEnVie(self):
        return sum(1 for v in self.voisins if v.vie) # parcours des voisins a qui on attribue 1 si en vie

class Jeu:
    def __init__(self, taille):
        self.taille = taille
        # grille contient une matrice d'objets Cellules de taille : self.taille * self.taille
        self.grille = [[Cellule(randint(0,1)) for i in range(self.taille)] for j in range(self.taille)]

        # ajout des voisins
        delta = [-1,0,1]
        for i in range(taille):
            for j in range(taille):
                for deltaI in delta:
                    for deltaJ in delta:
                        if (i + deltaI) in range(taille) and (j + deltaJ) in range(taille):
                            if deltaI != 0 or deltaJ != 0:
                                self.grille[i][j].ajoutVoisin(self.grille[i + deltaI][j + deltaJ])



    def __str__(self):
        '''
        retourne un chaine de  / * (espace: cellule morte, *: cellule vivante )
        exemple
        '     *   *  \n
         **** * *    \n
            *   *   *\n
        ...

        '''
        chaine = ''
        ligne = ''
        for l in self.grille:
            ligne = ''
            for c in l:
                ligne += '*' if c.vie else ' '
            ligne += '\n'
            chaine += ligne
        return chaine

    def evolue(self):
        for l in self.grille:
            for c in l:
                nbVoisins = c.nbVoisinsEnVie()
                if nbVoisins == 3:
                    c.vivre()
                elif nbVoisins < 2 or nbVoisins > 3:
                    c.mort()


# Exemple d'utilisation
taille = 10
jeu = Jeu(taille)
print(jeu)  # Affiche l'état initial
jeu.evolue()  # Fait évoluer le jeu
print(jeu)  # Affiche l'état après évolution

Cette implémentation crée un jeu de la vie avec une grille de cellules, où chaque cellule évolue selon les règles définies. La méthode __str__ permet d'afficher la grille de manière lisible, et la méthode evolue applique les règles de vie à chaque cellule.