Dunque, io controllo ogni volta TUTTE le celle all'interno della matrice.
Però, ad esempio, se lancio un GLIDE verso un lato non si forma un quadrato come su tutti i programmi già fatti ma il ciclo continua.
Il codice lo allego, è fatto male, disordinato e senza commenti, spero che si capisca.
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#define X 15
#define Y 15
int campo[X][Y]={0};
int controllo(int x,int y);
int stampa(void);
void cursor(int x, int y);
int gen=0;
int main(void)
{
int a=0,b=0,c=0,P1=0,P0=0,d=0;
srand(time(NULL));
int div1[50][50]={0};
int div0[50][50]={0};
/*campo[0][0]=1;
campo[0][2]=1;
campo[1][1]=1;
campo[1][2]=1;
campo[2][1]=1;*/
campo[4][6]=1;
campo[4][5]=1;
campo[4][4]=1;
stampa();
while(getch())
{
int a=0,b=0,c=0,D1=0,D0=0,cont=0;
while(a<X)
{
while(b<Y)
{
if(campo[a][b]==0)
{
if(controllo(a,b)==3)
{
div1[D1][0]=a;
div1[D1][1]=b;
D1++;
}
}
if(campo[a][b]==1)
{
if(controllo(a,b)<2 || controllo(a,b)>3)
{
div0[D0][0]=a;
div0[D0][1]=b;
D0++;
}
}
b++;
}
b=0;
a++;
}
int cun=0;
while(cun<=D1)
{
cursor(div1[cun][1], div1[cun][0]);
campo[div1[cun][0]][div1[cun][1]]=1;
printf("X");
cun++;
}
cun=0;
while(cun<=D0)
{
cursor(div0[cun][1], div0[cun][0]);
campo[div0[cun][0]][div0[cun][1]]=0;
printf(".");
cun++;
}
cursor(25,0);
printf("Generazione N: %d",gen);
gen++;
}
system("PAUSE");
return 0;
}
int controllo(int x,int y)
{
int a=x-1,b=x+1,c=y-1,d=y+1;
int i=0;
if(campo[a][y]==1){
i++;
if(a<0)
i--;};
if(campo[a][c]==1){
i++;
if(a<0 && c<0)
i--;};
if(campo[x][c]==1){
i++;
if(c<0)
i--;};
if(campo[b][c]==1){
i++;
if(b==X && c<0)
i--;};
if(campo[b][y]==1){
i++;
if(b==X)
i--;};
if(campo[b][d]==1){
i++;
if(b==X && d==Y)
i--;};
if(campo[x][d]==1){
i++;
if(d==Y)
i--;};
if(campo[a][d]==1){
i++;
if(a<0 && d==Y)
i--;};
return i;
}
int stampa(void)
{
int a=0,b=0;
while(a<X)
{
while(b<Y)
{
if(campo[a][b]==0)
printf(".");
else
printf("X");
b++;
}
printf("\n");
b=0;
a++;
}
printf("\n\n");
return 0;
}
void cursor(int x, int y)
{
COORD coord = {x, y};
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hConsole, coord);
}
Sfrutto quindi due matrici e la funzione SetConsoleCursorPosition per spostare il cursore e stampare solo la cella che mi serve.
Penso che l'errore sia nella funzione controllo();.