Ciao a tutti, dovrei compilare un programma che simuli il gioco "Conway - Game of life"
Per chi non lo conoscesse ecco le sue caratteristiche:
Conway - Game of Life. Creare un programma che, inizializzi una matrice
Mat con valori zero e uno in maniera pseudo casuale. Il numero di celle pari
a uno sia uguale al numero di celle della matrice fratto 13.
Per ogni elemento della matrice si implementi una transizione da zero a uno
o da uno a zero secondo le seguenti regole:
a. Se una cella ha valore uno e ha meno di 2 celle attive vicine la cella
assuma valore zero
b. Se una cella ha valore uno e ha più di tre celle vicine attive, la cella
assuma valore zero
c. Se la cella ha valore zero e ha vicino 3 celle attive, la cella assuma
valore uno.
Si visualizzi lo stato della matrice associando il simbolo * alle celle attive e
lo spazio per le celle non attive.
Questo è il codice che ho scritto però il risultato ottenuto non è quello desiderato ma non riesco a capire dove sta l'errore.
Se qualcuno potesse darci un'occhiata mi farebbe un grande favore
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define R 40
#define C 40
void azzera_matrice(int mat[R][C]);
void inizializza_matrice(int mat[R][C]);
void stampa_matrice(int mat[R][C]);
void aggiorna_matrice(int mat[R][C]);
int cerca_vicini(int mat[R][C], int i, int j);
int main () {
srand(time(NULL));
int mat[R][C], c=0;
inizializza_matrice(mat);
stampa_matrice(mat);
while((c=getchar()!=EOF)) {
printf("\n\n\n\n");
aggiorna_matrice(mat);
stampa_matrice(mat);
}
}
void azzera_matrice(int mat[R][C]) {
int i,j;
for(i=0;i<R;i++) {
for(j=0;j<C;j++)
mat[i][j]=0;
}
}
void inizializza_matrice(int mat[R][C]) {
int i,j, check,temp;
do {
check=0;
azzera_matrice(mat);
for(i=0;i<R;i++) {
for(j=0;j<C;j++) {
temp= (rand()<RAND_MAX/10) ? 1 : 0 ;
check+=temp;
mat[i][j]=temp;
}
}
} while(check!=R*C/13);
}
void stampa_matrice(int mat[R][C]) {
int i,j;
for(i=0;i<R;i++) {
for(j=0;j<C;j++) {
if(mat[i][j]==1)
printf("%-2s", "*");
else
printf("%-2s", " ");
}
putchar('\n');
}
}
int cerca_vicini(int mat[R][C], int i, int j) {
int x,y,check,zx=1,zy=1;
if(i==0)
zx=0;
if(j==0)
zy=0;
for(x=(i-zx);x<=(i+1);x++) {
for(y=(j-zy);y<=(j+1);y++) {
if(mat[x][y]==1)
check++;
}
return check;
}
}
void aggiorna_matrice(int mat[R][C]) {
int i, j, temp=0;
for(i=0;i<R;i++) {
for(j=0;j<C;j++) {
temp=cerca_vicini(mat,i,j);
if(mat[i][j]==1 && temp<2)
mat[i][j]=0;
if(mat[i][j]==1 && temp>3)
mat[i][j]=0;
if(mat[i][j]==0 && temp==3)
mat[i][j]=1;
}
}
}