[resolut|C] Le jeu de la vie: cellules adjacentes

Le jeu de la vie: cellules adjacentes [resolut|C] - C - Programmation

Marsh Posté le 05-09-2011 à 14:20:58    

Bonjour everybody,
 
j' essaie de développer un jeu de la vie en c sous code block je crois que mon compilateur c'est mingw, pour l’ instant je doit trouver le nombre de cellules vivantes adjacentes pour ensuite définir le statu de la case( se qui n'est pas encore fait ^^" ).
 
Le problème c'est que quand je recherche le nombre de cellule vivante adjacente  la variable retourne des nombres cohérents et d'autre impossibles:  
 

Spoiler :

le mapping des cellules vivantes a gauche et a droite le nombre de cellules vivantes adjacentes
 
1 0 0 0 0 0 0 0 0 0     1971555541 1 0 0 0 0 0 0 0 1  
0 0 0 0 0 0 0 0 0 0     -772628758 1 0 0 0 0 0 0 0 9
0 0 0 0 0 0 0 0 0 0     -2 0 1 0 1 0 0 0 0 2  
0 0 0 1 0 0 0 0 0 0     1971882230 0 1 0 1 0 0 0 0 1972054368  
0 0 0 0 0 0 0 0 0 0     4200372 0 2 1 1 0 0 0 0 0  
0 0 0 0 0 0 0 0 0 0     10 0 0 0 0 0 0 0 0 2130567168
0 0 0 0 0 0 0 0 0 0     1972054368 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 2686824  
0 0 0 0 0 0 0 0 0 0   4201526 0 0 0 0 0 0 0 1 4198582
0 0 0 0 0 0 0 0 0 1    0 0 0 0 0 0 0 0 1 0  


 
Le code en entier:
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.     int cell[10][10];// initialisation de la carte de jeu
  6.     int x=0;
  7.     int y=0;
  8.     //initialisation des cellules
  9.     for (y = 0 ; y < 10 ; y++)
  10.     {
  11.         for (x = 0 ; x < 10 ; x++)
  12.         {
  13.             cell[x][y]=0;
  14.             printf("%d",cell[x][y]);
  15.         }
  16.         printf("\n" );
  17.     }
  18.     printf("\n" );
  19.     //chois des des cellules vivantes
  20.     cell[9][9] = 1;
  21.     cell[3][3] = 1;
  22.     cell[0][0] = 1;
  23.     //affichage des cellules
  24.     for (y = 0 ; y < 10 ; y++)
  25.     {
  26.         for (x = 0 ; x < 10 ; x++)
  27.         {
  28.             printf("%d ",cell[x][y]);
  29.         }
  30.         printf("\n" );
  31.     }
  32.     printf("\n" );
  33.     //calcule du nombre de cellule adjacente
  34.     int adj = 0 ;
  35.     for (y = 0 ; y < 10 ; y++)//boucle pour parcourir le tableau
  36.     {
  37.         for (x = 0 ; x < 10 ; x++)
  38.         {
  39.             adj = 0 ;// variable pour stocker les resultat
  40.             if(y-1>=0 && x-1>=0)// Ces conditions servent à ne pas sortir du tableau
  41.             {
  42.                 adj=adj+cell[x-1][y-1];
  43.             }
  44.             if(y-1>=0)
  45.             {
  46.                 adj=adj+cell[x][y-1];
  47.             }
  48.             if(x-1>=0)
  49.             {
  50.                 adj=adj+cell[x-1][y];
  51.             }
  52.             if(y-1>=0 && x+1<10)
  53.             {
  54.                 adj=adj+cell[x+1][y-1];
  55.             }
  56.             if( x+1<10)
  57.             {
  58.                 adj=adj+cell[x+1][y];
  59.             }
  60.             if( y+1<10 && x+1<10)
  61.             {
  62.                 adj=adj+cell[x+1][y+1];
  63.             }
  64.             if(y+1<10)
  65.             {
  66.                 adj=adj+cell[x-1][y+1];
  67.             }
  68.             if(x-1>=0 && y+1<10)
  69.             {
  70.                 adj=adj+cell[x+1][y-1];
  71.             }
  72.             printf("%d ",adj);
  73.         }
  74.         printf("\n" );
  75.     }
  76.     return 0;
  77. }


 
Je vois pas d'où sortent ces nombres, et comment résoudre se problème,
question auxiliaire  :whistle: je trouve que la partie sur le calcule de la cellule adjacente trop long mais je sais pas comment la raccourcir, si vous avez une idée.
 
Merci ;)


Message édité par jkiller19 le 05-09-2011 à 19:58:27
Reply

Marsh Posté le 05-09-2011 à 14:20:58   

Reply

Marsh Posté le 05-09-2011 à 14:52:34    

Tu n'as pas la bonne approche IMHO:
Tu fais un tableau 12x12 qui inclus les bords, qui auront toujours une valeur a 0. Tu calcules ton tableau adj pour un indice x et y variant de 1 à 10.
Tu as alors une seule formule unique à appliquer.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 05-09-2011 à 15:00:06    

d'où sortent ces nombres ? A tout hasard tu lis à un mauvais endroit dans la mémoire (hors de ton tableau) ?


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 05-09-2011 à 15:01:33    

Dans ton approche, les lignes 76 et 80 sont incorrectes au niveau des indices:
ligne 76 => cell[x][y+1] au lieu de cell[x-1][y+1]
ligne 80 => cell[x-1][y+1] au lieu de cell[x+1][y-1]
 
Les indices que tu mettais te faisaient sortir du tableau.


Message édité par shaoyin le 05-09-2011 à 15:01:52
Reply

Marsh Posté le 05-09-2011 à 19:55:41    

Merci tout le monde ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed