Le jeu de la vie revisité

Description

Bonjour,

Beaucoup d'entre vous connaisse sans doute le "Jeu de la vie", cet automate cellulaire où l'on définit une population initiale qui obéira à de simples règles pour évoluer en conséquence.

En résumé, les règles sont les suivantes:
1) une cellule morte entourée d'exactement 3 voisines vivantes devient vivante.
2) une cellule avec exactement 2 ou 3 voisines vivantes conserve son état.
3) une cellule vivante qui n'a pas exactment 2 ou 3 voisines vivantes meurt (d'isolement ou d'étouffement!)

On peut passer des heures à suivre l'évolution de populations initiales plus ou moins complexes. Mais j'ai voulu pousser un peu plus loin en ajoutant 3 autres règles. Partons du fait que mes cellules vivantes sont bleues...

4) une cellule qui n'est pas bleu (incluant les cellules mortes) et qui a plus de 4 voisines vivantes devient jaune.

5) une cellule jaune ayant plus de 3 voisines vivantes devient verte.

6) une cellule jaune ou verte ayant plus de 5 voisines vivantes devient bleu.

Et voilà.... je pense qu'on peut dire que le reste relève de la théorie du chaos!
J'ai définis un "univers" de quelques 70 000 cellules dont j'ai réduis la taille au maximum.
Les images obtenues après une centaine d'itérations sont simplement magnifiques.
Et naturellement on peut s'amuser à modifier les règles à volonté!

Pour définir la population initiale, il suffit de cliquer sur les cellules (les pixels en fait! vous pouvez jouer avec le zoom d'excel si c'est trop petit).

Il y a un bouton pour démarrer la simulation, un autre pour vider l'univers. Pour arrêter la simulation, appuyez sur la barre d'espace.

J'ai aussi mis des compteurs, mais j'ai un problème avec les morts et les naissances qui, cumulativement, devraient donner la population restante... Je m'en fou un peu car l'idée était de montrer qu'il y avait de l'activité pendant le traitement, mais si vous trouvez la solution je suis preneur!

Amusez-vous!..

Source / Exemple :


L'essentiel est dans cette boucle...  Dépendamment du résultat d'une règle, je met un chiffre dans la cellule et j'utilise les formats conditionnels d'excel pour les couleurs (plus rapide).
Il y a 2 feuilles (avant et après), on fait tous les changements en appliquant les règles sur la première dans la deuxième puis on copie la deuxième dans la première... et on boucle!

Do While 1
  
    Q = GetAsyncKeyState(32)
      
    If Q <> 0 Then
      Range("IC174") = "PAUSE"
      Exit Sub
    End If
  
    Range("ID22") = Range("ID22") + 1
  
    For Each cell In Range("B3:IA228")
       
      If Voisin(cell) <> 0 Then
           
       '----------------- Règles standards ----------------
         
        If cell.Value = "" And Voisin(cell) = 3 Then
          Sheets(2).Range(cell.Address).Value = 1
          Range("ID48") = Range("ID48") + 1
        End If
        
        If cell.Value <> "" Then
          If Voisin(cell) = 2 Or Voisin(cell) = 3 Then
            Sheets(2).Range(cell.Address).Value = cell.Value
          Else
            Sheets(2).Range(cell.Address).Value = ""
            Range("ID73") = Range("ID73") + 1
          End If
        End If
        
        
       '--------------------- Ajouts ----------------------
       
        If cell.Value <> 1 And Voisin(cell) > 4 Then
          Sheets(2).Range(cell.Address).Value = 3
          If cell.Value = "" Then
            Range("ID48") = Range("ID48") + 1
          End If
        End If
           
        If Voisin(cell) > 3 And cell.Value = 3 Then
          Sheets(2).Range(cell.Address).Value = 4
        End If
           
        If Voisin(cell) > 5 And (cell.Value = 3 Or cell.Value = 4) Then
          Sheets(2).Range(cell.Address).Value = 1
        End If
           
      End If
         
    Next

Conclusion :


Des règles toutes simples qui génère une vraie complexité!..

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.