Jeu de la vie en C

Fermé
kratos - 15 déc. 2008 à 21:16
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 16 déc. 2008 à 09:43
Bonjour, je suis en train de faire un tp en informatique sur le célèbre Jeu de la vie mais je comprend vraiment pas pourquoi elle ne veut pas marcher. En effet la génération de vie suivante ne se fait pas correctement du tout.
Si vous pouvez me donner un peu d'aide merci d'avance.

#include<stdio.h>
#include<string.h>
#include<stdbool.h>
#include<stdlib.h>

int** initialise (int x)
{int i,j,k;
int **grille = (int**) malloc(sizeof(int*) * x);
int rep;
int l,c;

for (i=0; i<x; i++)
{
grille[i]=(int*)malloc(x*sizeof(int));
}
for (i=0; i<x; i++)
{for (j=0; j<x; j++)
{
grille[i][j]=0;
}

}
printf("Definissez le nombre de cellules en vie: ");
scanf("%i",&rep);
for(k=0; k<rep; k++)
{printf("Saisir la ligne de la cellule entre 0 et %i: ",(x-1));
scanf("%i",&l);
printf("Saisir la colonne de la cellule entre 0 et %i: ",(x-1));
scanf("%i",&c);
grille[l][c]=1;
}
return grille;
}

void affichage (int** grille, int x)
{int l,c;

for(l=0; l<x; l++)
{for(c=0; c<x; c++)
{printf("%i",grille[l][c]);
}
printf("\n");
}
}

int nbvoisins(int **grille,int dim,int x, int y)
{int i,j,nb=0;

for(i=0;i<dim;i++)
{for(j=0;j<dim;j++)
{
if((i==0)&&(j==0))
{
nb=grille[i][j+1]+grille[i+1][j]+grille[i+1][j+1]+grille[i][dim-1]+grille[i+1][dim-1]+grille[dim-1][j]+grille[dim-1][j+1]+grille[dim-1][dim-1];
}

if((i!=0)&&(j!=0)&&(i!=(dim-1))&&(j!=(dim-1)))
{
nb=grille[i-1][j-1]+grille[i-1][j]+grille[i-1][j+1]+grille[i][j+1]+grille[i+1][j+1]+grille[i+1][j]+grille[i+1][j-1]+grille[i][j-1];
}

if((i==0)&&(j!=0)&&(j!=(dim-1)))
{
nb=grille[i][j-1]+grille[i+1][j-1]+grille[i+1][j]+grille[i+1][j+1]+grille[i][j+1]+grille[dim-1][j-1]+grille[dim-1][j]+grille[dim-1][j+1];
}

if((i==0)&&(j==(dim-1)))
{
nb=grille[i][j-1]+grille[i+1][j-1]+grille[i+1][j]+grille[i][0]+grille[i+1][0]+grille[dim-1][0]+grille[dim-1][j]+grille[dim-1][j-1];
}

if((i==(dim-1))&&(j==0))
{
nb=grille[i-1][j]+grille[i-1][j+1]+grille[i][j+1]+grille[i][dim-1]+grille[i-1][dim-1]+grille[0][j]+grille[0][j+1]+grille[0][dim-1];
}

if((i==(dim-1))&&(j!=0)&&(j!=(dim-1)))
{
nb=grille[i][j-1]+grille[i][j+1]+grille[i-1][j-1]+grille[i-1][j]+grille[i-1][j+1]+grille[0][j]+grille[0][j-1]+grille[0][j+1];
}

if((i==(dim-1))&&(j==(dim-1)))
{
nb=grille[i][j-1]+grille[i-1][j-1]+grille[i-1][j]+grille[0][j]+grille[0][j-1]+grille[i][0]+grille[i-1][0]+grille[0][0];
}

if((i!=0)&&(i!=(dim-1))&&(j==0))
{
nb=grille[i-1][j]+grille[i-1][j+1]+grille[i][j+1]+grille[i+1][j+1]+grille[i+1][j]+grille[i][dim-1]+grille[i-1][dim-1]+grille[i+1][dim-1];
}

if((i!=0)&&(i!=(dim-1))&&(j==(dim-1)))
{
nb=grille[i-1][j]+grille[i-1][j-1]+grille[i][j-1]+grille[i+1][j-1]+grille[i+1][j]+grille[i][0]+grille[i-1][0]+grille[i+1][0];
}
}
}
return nb;
}

int** gene_suiv (int** grille, int dim)
{ int** grille_suiv;
int i,j;
grille_suiv =(int **)malloc(dim*sizeof(int *));

for (i=0; i<dim; i++)
{grille_suiv[i]=(int *)malloc(dim*sizeof(int));
}
for (i=0; i<dim; i++)
{
for (j=0; j<dim; j++)
{
if (grille[i][j]==1)
{if (nbvoisins(grille,dim,i,j)==2 || nbvoisins(grille,dim,i,j)==3)
{
grille_suiv[i][j]=1;
}
else {}
}
else{
if (nbvoisins(grille,dim,i,j)==3)
{
grille_suiv[i][j]=1;
}
}
}
}
return grille_suiv;
}

void separer_damier (int dim)
{int i;
printf("-");
for (i=0 ;i<(dim*2); i++ )
{printf("-");
}
printf("\n");
}


void affichagetxt_damier (int** grille, int dim)
{int i,j,k;

separer_damier(dim);
for (i=0; i<dim; i++)
{
for (j=0; j<dim; j++)
{ printf("|");
if (grille[i][j]==1)
{printf("*");
}
else
{printf(" ");
}
}
printf("|\n");
separer_damier(dim);
}
}


int main()
{int dim; int nb; int cycle; int i;
int** gen_suiv;
int** damier;

printf(" TP7: LE JEU DE LA VIE\n\n");

printf("Saisissez la taille de la grille: ");
scanf("%i",&dim);
printf("Saisissez le nombre de cycle: ");
scanf("%i",&cycle);

damier=initialise(dim);
affichage(damier,dim);
printf("\n\n");

for(i=1; i<=cycle; i++)
{printf("Cycle n%i\n",i);
affichagetxt_damier(damier,dim);
gen_suiv=gene_suiv(damier,dim);
damier=gen_suiv;
printf("\n");
}
return 0;

2 réponses

up svp
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
16 déc. 2008 à 09:43
reformate ton message, tu aura peut être plus de réponse :
— utilise les baliase de code (juste au dessus de la fenêtre où tu tape le message, il y a des petits boutons, G I S <>... c'est le quatrième) afin de conserver les indentations et donc la lisibilité
— met des commentaires que l'on puisse mieux comprendre.
Je te conseil d'aller voir les nobreux site dédiés au sujet et pour tester ton programme de faire des fixes et des mobiles, des figues simples.
0