Le jeu de la vie est un automate cellulaire qui repose sur le principe d'évolution. C'est une invention de John Horton Conway vers 1970.
Règles du jeu de la vie
Le jeu de la vie est un jeu sans joueur, il n'y a aucune intervention du joueur lors de l'exécution. Il s'agit d'un automate cellulaire, un modèle où chaque état conduit mécaniquement à l'état suivant à partir de règles pré-établies.
Le jeu se déroule sur une matrice 2D carrée. Une cellule évolue d'un tour à un autre. Une case a donc 8 voisins potentiels.
Par exemple, ici, la case 1 a un voisin dans la diagonale du haut. Les autres cases sont vides.
Une case a donc des voisins dans les 8 directions suivantes : Nord, Nord-Est, Est, Sud-Est, Sud, Sud-Ouest, Ouest, et Nord-Ouest.
L'évolution de la grille se fait au tour par tour en appliquant un ensemble de règles locales à chaque case. Ces règles prennent en compte l'état et le voisinage de la case et sont appliquées simultanément sur toutes les cases de la grille. Voici les règles que vous utiliserez :
Survie : Chaque cellule entourée de 2 ou 3 cellules continue de vivre.
Mort : Chaque cellule entourée de 4 cellules ou plus meurt de surpopulation. Chaque cellule entourée d'au plus 1 cellule meurt d'isolement. Si une cellule meurt, la case qui la contient devient vide.
Naissance Une cellule apparaît dans chaque case vide entourée d'exactement 3 cellule
Il existe 2 type d'évolution de grille dans le calcul des voisins :
La matrice Finie
La matrice Torique
La matrice finie
Ici on considére que la case n'a que 3 voisins possible
La matrice torique
Toutes les cases ont 8 voisins potentiels.
Il convient de transposer les voisins, Nord-Est, Est, Est, Sud-Est, et Nord-Ouest aux bords opposés de la grille
Implémentation
Le jeu de la vie se représente sur un tableau d'entiers dynamique 2D. La grille est une matrice (carée ou non). Les valeurs de la case possibles sont 0 ou 1.
Le programme doit être exécuté de la manière suivante :
Solution 1
cat planeur.txt |./exe
Solution 2
./exe< helloworld.txt
Implémenter la ou les fonction(s)/méthode(s) afin de recencer le nombre de voisins d'une case. Pour cela, il convient de parcourir le voisinage d'une case et de calculer le nombre de voisins d'une case donnée. Attention Vous devez réaliser 2 calculs de voisinage un pour une matrice torique et un pour une matrice finie
Implémenter la ou les fonction(s)/méthode(s) afin de calculer le nombre de voisins d'une case en matrice torique et en matrice finie.
Implémenter la ou les fonction(s)/méthode(s) afin de calculer la nouvelle valeur d'une case.
Implémenter la ou les fonction(s)/méthode(s) afin de calculer la nouvelle matrice.
Implémenter la méthode principale (main) afin de tester les différentes fonctions/méthodes précédements créées
Les patterns à réaliser
Le programme doit permettre d'utiliser l'ensemble des motifs suivant :
Les rendus se feront dans la classe TEAMs => rendu
Veuillez renseigner votre groupe dans le fichier votre groupe
Le canal sous teams dispo peut vous servir de foire aux questions lorsque vous rencontrez un problème, ou vous voulez partager une astuce => canal
Deadline : Dimanche 30 Mai 23h59min
Le rendu du progrramme :
Le rendu doit permettre l'exécution de l'ensemble des patterns demandés Implementation
Le programme doit être excecutable comme décrit dans la partie Implementation
Le programme doit contenir les différentes étapes de programmation présentée dans la partie Implementation
Le programme doit être codé en compilation séparée.
Si les spécifications ne sont pas respectées (même si le programme marche), vous vous exposez à des pénalités
Vous aurez les TPs encadrés, où vous pourrez solliciter l'enseignant. Afin de réaliser ce projet, du travail personnel est sans doute nécessaire.
Le rendu de ce TP est un travail de groupe. Si nous trouvons des similitudes, sur internet ou avec un autre groupe, en plus d'une pénalité au niveau de la note qui sera de 0, une procédure de gestion des fraudes à un examen pourra être envisagée.
Documents à rendre
Une archive contenant :
L'ensemble des fichiers .c et .h permettant d'exécuter le programme
Un readme avec les instructions pour exécuter le programme