Jeu de la vie [dev-c++]

Description

Bon ça s'appelle jeu de la vie mais ce n'est pas un jeu, c'est unes simulation de vie
il y a une matrice avec plusieurs cases (ici 80*23 = 1840 !), avec des cellules un peu partout (les X) une case vide donne naissance a une nouvelle cellule si elle est entoure de exactement 3 autres cellules, et une cellule survit seulement si elle est entouree de 2 ou 3 cellules, sinon elle meurt
Pour pouvoir plus facilement changer la position de depat des cellules, toutes les position sont stockees dans un fichier texte.
Pour que le code suivant ne genere pas d'erreurs, vous devez creer un fichier vie.txt avec les positions des cellules, ou mieux, telecharger le zip, comme ça vous pourrez comprendre plus facilement comment faire le fichier .txt

Source / Exemple :


#include <stdio.h>
#include <conio.c>
#include <fcntl.h>

int main()
{
  int   increment;
  int   increment2;
  int   fichier;
  int   voisin;
  int   mode=1;
  int   etape=0;
  char  touche;
  char  cara[1863];
  char  cases[1840];
  char  provi[1840];

  fichier=open("vie.txt",O_RDONLY);
  if (fichier==-1)
  {
    printf("Impossible d'ouvrir le fichier vie.txt\n");
    printf("Verifiez qu'il est bien dans le meme\n");
    printf("repertoire que l'executable");
    getch();
    return 1;
  }
  read(fichier,cara,1863);
  for (increment=0,increment2=0 ; increment<1840 ; increment++,increment2++)
  {
    if (cara[increment2]=='1') provi[increment]='X';
    else
    {
      if (cara[increment2]=='0') provi[increment]=' ';
      else increment--;
    }
  }
  gotoxy(1,24);
  textcolor(12);
  for (increment=1 ; increment<=80 ; increment++) printf("\xC4");
  do
  {
    textcolor(14);
    for (increment=0 ; increment<1840 ; increment++) cases[increment]=provi[increment];
    gotoxy(1,1);
    for (increment=0 ; increment<1840 ; increment++) printf("%c",cases[increment]);
    for (increment=0 ; increment<1840 ; increment++)
    {
      voisin=0;
      if (cases[increment+1]=='X') voisin++;
      if (cases[increment-1]=='X') voisin++;
      if (cases[increment+80]=='X') voisin++;
      if (cases[increment-80]=='X') voisin++;
      if (cases[increment+81]=='X') voisin++;
      if (cases[increment-81]=='X') voisin++;
      if (cases[increment+79]=='X') voisin++;
      if (cases[increment-79]=='X') voisin++;
      if (voisin==3) provi[increment]='X';
      if ((voisin<2)||(voisin>3)) provi[increment]=' ';
    }
    textcolor(15);
    gotoxy(1,25);
    printf("etape %-6d",etape);
    etape++;
    if (mode==1)
    {
      gotoxy(20,25);
      printf("Faites espace pour mettre en evolution automatique");
      touche=getch();
      if (touche==32) mode=2;
      touche=0;
    }
    else
    {
      if (kbhit()) touche=getch();
      gotoxy(20,25);
      printf("Faites espace pour mettre en evolution manuelle   ");
      if (touche==32) mode=1;
      sleep(50);
    }

  } while (touche!=27);
  return 0;
}

Conclusion :


Voila, je vous conseille de telecharger le zip
j'ai mis a jour cette source quelques heures apres l'avoir mise sur le site, car j'avais oublie de compter les voisins en diagonele. sans ça, les cellules meurent tres vite

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.