Je vous propose aujourd'hui un petit article sur un projet sur lequel j'ai du travailler dans le cadre de mes études (actuellement en 2ème année de Licence Informatique) et que je trouve très intéressant : le « Jeu de la vie », plus connu en anglais sous le nom de « Game of life » ou encore « Conway's Game of life ».
Le « Jeu de la vie » : qu'est-ce que c'est ?
Le jeu de la vie est un jeu inventé par le mathématicien britannique John Horton Conway en 1970. Le terme « jeu » d'ailleurs utilisé pour décrire son invention est un peu mal approprié, puisqu'il ne s'agit pas à proprement parler d'un jeu avec lequel l'utilisateur aura de quelconques interactions mais d'un automate cellulaire dans lequel les seules interactions de l'utilisateur sont de fixer des conditions initiales et de faire évoluer les cellules qui sont au sein de cet automate.
Un automate cellulaire aussi simple que complexe
Toute la particularité de cet automate réside en fait dans sa simplicité dont découle une impressionante complexité (je sais, ça peut paraître très paradoxal dit comme ça, mais je vous explique de suite pourquoi). La simplicité est en fait établie par les deux règles de vie/mort des cellules qui sont élémentaires :
- Une cellule morte à un temps t devient vivante (naît) au temps t + 1 si et seulement si elle a exactement 3 cellules vivantes dans son voisinage.
- Une cellule vivante à un temps t reste vivante au temps t + 1 si et seulement si elle a exactement 2 ou 3 cellules vivantes dans son voisinage, sinon elle meurt.
Plus concrètement, chaque cellule sera représentée par un point ou bien un carré au sein d'une grille de cellule et c'est l'utilisateur qui déterminera quelle sera la taille de la grille et quelles seront les cellules initialement en vies : ce sont les conditions initiales.
Et la complexité dans tout ça ? Ça arrive ! En fait, en faisant évoluer sa grille de cellules et à force de modifier les conditions initiales de celle-ci, le mathématicien Conway s'est rendu compte que son automate était capable de produire des motifs (répétitifs ou non) très impressionnants en partant seulement de ses deux simples règles. En voici quelques exemples :
- L'oscillant : rien de très impressionant, mais on se rend déjà compte qu'il s'agit d'un motif qui se répète avec une oscillation de période 2
- Le planeur : déjà plus intéressant, il s'agit d'un motif littéralement capable de se déplacer sur la grille (d'où son nom)
- Le canon à planeurs : là, on arrive à quelque chose de très concret, puisque ce motif qui non seulement se répète est aussi capable de générer des planeurs qui à leur tour se déplaceront dans la grille de cellules, et cela de façon infinie !
Il ne s'agit bien sûr là que de quelques exemples. Je vous invite vivement à faire un tour sur le Wiki des motifs du Jeu de la vie pour en découvrir d'autres !
Je vous le rappelle, tous ces motifs et figures que vous voyez là sont générés à partir de conditions initiales fixées par l'utilisateur, mais évoluent ensuite de façon totalement libre et non supervisée. C'est d'ailleurs là que l'on se rend compte de l'impact qu'ont les deux règles initiales - qui peuvent sembler relativement anodines à première vue - lorsqu'elles sont appliquées à une certaine population de cellules.
En savoir plus sur le Jeu de la vie
Si le sujet vous intéresse et que cette petite introduction vous a donné envie d'en savoir plus (ce qui ne m'étonnerait pas 😅), je vous invite vivement à consulter le site ConwayLife.com (en anglais) qui recense un certain nombre d'informations concernant cet automate cellulaire.
La vidéo de Science Etonnante à ce sujet (et en français cette fois-ci) est également extrêmement bien réalisée et contient de nombreuses informations sur le Jeu de la vie :
Mon Jeu de la vie en C
Comme je l'ai indiqué en introduction, j'ai découvert re-découvert cet automate cellulaire en cours puisque l'un de nos projets de fin de semestre en deuxième année de Licence Informatique a été de coder en C le Jeu de la vie.
Nous sommes donc partis d'une base de code intégrant quelques fonctionnalités de base ainsi qu'un certain nombre de bugs (on nous a dit que c'était fait exprès, pour s'habituer à reprendre du code de quelqu'un d'autre, mais je n'y crois toujours pas) et avons ensuite mis en place les fonctionnalités requises petit à petit : évolution des cellules dans la grille, documentation, chargement dynamique d'une nouvelle grille, activation/désactivation du vieillissement des cellules, test de grille oscillante, etc. en terminant par la mise en place de l'interface graphique en utilisant X et Cairo.
Je vous laisse donc en libre accès tout le code sur le dépôt GitHub « PrimFX - Game of Life » : libre à vous de tester, expérimenter, modifier, etc. si vous le souhaitez 😉 En voici d'ailleurs un petit aperçu :
Sachez également qu'il existe un certain nombre de programmes bien plus performants et "normés" destinés à faire tourner l'automate cellulaire de Conway. Je pense notamment à Golly que vous pourrez même retrouver sur Google Play ou bien l'App Store.
C'est tout pour cet article ! J'espère que vous aurez autant apprécié de le lire que j'ai apprécié de l'écrire 😉 N'hésitez pas à me donner vos retours en commentaire et à me dire quels sont vos motifs préférés que vous aurez pu expérimenté dans le Jeu de la vie !
Votre commentaire