Projet

Le jeu de la vie

Description du sujet

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.

  1. Implémenter les méthodes/fonctions suivantes :

    int** allouer(int lignes,int colonnes);
    void initialiser(int** ppint_matrice,int lignes,int colonnes);
    void afficher(int** ppint_matrice,int lignes,int colonnes);

La matrice doit être donnée en entrée via un fichier texte.

Le fichier .txt doit être construit comme suit :

  • le nombre de lignes et le nombre de colonnes
  • la matrice de 0 et 1 correspondant au jeu de la vie
  • le nombre de tour d'évolution
  • 0 => Matrice fermée ou 1=> Matrice torique

    5 5
    0 0 0 0 0
    1 0 0 0 1
    0 0 0 0 0
    1 1 1 0 0
    0 0 0 0 0
    400
    1
  • Exemple Helloworld
  1. Le programme doit être exécuté de la manière suivante :
  • Solution 1

    cat planeur.txt | ./exe
  • Solution 2

    ./exe < helloworld.txt
  1. 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
  2. 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.
  3. Implémenter la ou les fonction(s)/méthode(s) afin de calculer la nouvelle valeur d'une case.
  4. Implémenter la ou les fonction(s)/méthode(s) afin de calculer la nouvelle matrice.
  5. 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 :

Programme à réaliser

Comment raffraîchir le terminal ?

Afin de raffraichir le terminal toutes les 1 secondes (l'unité de usleep est en microsecondes), vous pouvez utiliser les fonctionnalités suivantes :

usleep(1000000);
system("clear");

Consignes

  • Les rendus par mails ne seront pas acceptés !
  • Le nom de votre archive doit suivre la convention de nommage suivante :
    • numerodegroupe_nomDefamille1_nomDefamille2_nomDefamille3_nomDefamille4.formatExtension
    • 3_Stark_Lannister_Greyjoy_Baratheon.zip
    • Extensions autorisées : .zip, .tar.xz et .7z
    • Extensions NON autorisées : .rar
  • 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
  • Un rapport contenant les parties suivantes :

  1. Histoire du Jeu de la vie
  2. Définition de Turing-complet
  3. Répartition des tâches au sein du groupe
  4. Choix de programmation divers
  5. Sitographie