Hola,
Me gustaria que me ayudaran en mi trabajo sobre el jeugo de la vida de Jhon conway.
Tengo un problema, y esque no se como ir a la siguiente generacion. Es decir cuando el usuario establece la casilla, apreta "s" y deberian morir o reaparacer depndiendo de la vecinas. Aqui led dej mi codigo del tablero. Como pueden observar, cuan apreta la "s" va a un "void seguent_generacio (void)", le dejo el codigo de verificacion que esta mal, pero no se como hacerlo ya.
Gracias por adelantado
#include <stdio.h>
#include <stdlib.h>
#include <conio2.h>
#define FILES 24
#define COLUMNES 80
#define FINAL 'z'
#define CELULA 3
#define AMUNT 72
#define AVALL 80
#define ESQUERRA 75
#define DRETA 77
void dibuixa_quadre (void);
void seguent_generacio (void);
int controlint[24][80];
int controlintcop[24][80];
int x=0, x2=0; // Recoger las teclas del usuario
int i=0, j=0, cont=0;
int main (void)
{
int medcols, medfils; // Posicion del cursor
clrscr(); //Limpiar la pantalla
dibuixa_quadre (); //Dibujar el cuadrado
medcols = COLUMNES / 2; medfils = FILES /2;
gotoxy (medcols,medfils); //gotoxy sirve para marcar la posicion, ahora esta en el centro
while (x!= FINAL){
x=getch(); //es lo mismo que scanf, pero este no muestra las teclas por pantalla
if(x==224){
x2=getch();
switch (x2){
case AMUNT:
if (medfils-2>0) medfils-=2;
break;
case AVALL:
if (medfils+2<=FILES) medfils+=2;
break;
case ESQUERRA:
if (medcols-2>0) medcols-=2;
break;
case DRETA:
if (medcols+2<COLUMNES) medcols+=2;
break;
}
gotoxy (medcols,medfils);
}
//Se ha decidido que si apreta la tecla espacio se imprima el caracter
if (x==32){
controlint[medfils][medcols]=1;
printf("%c", CELULA);
gotoxy (medcols,medfils);}
if (x=='s'){seguent_generacio();}
}
system ("pause");
}
void dibuixa_quadre (void)
{
int i=0, j=0;
for (i=0;i<24;i++){
for (j=0;j<80;j++){
controlint[j]=0;}} //inicialitzar el array
i=0; j=0;
for (i=0;i<24;i++){
for (j=0;j<80;j++){
controlintcop[j]=2;}} //inicialitzar el array de copia
gotoxy (1,1);
//Linia inicial de quadro
printf ("%c%c%", 201,205);
for (i=0; i<38;i++)
printf("%c%c", 203, 205);
printf("%c\n",187);
for (j=0;j<12;j++){
//linias verticales
for (i=0;i<39;i++)
printf ("%c ", 186);
printf( "%c\n",186);
//linies intermitges: 204, 206, 185
if(j!=11){
printf ("%c%c", 204,205);
for (i=0; i<38;i++)
printf ("%c%c",206,205);
printf ("%c\n",185);
} //cerrar el if
}
//linia para cerrar 200,202,188
printf ("%c%c",200,205);
for (i=0; i<38;i++)
printf ("%c%c",202,205);
printf ("%c",188);
}
void seguent_generacio (void){
i=0; j=0;
for (i=0; i<FILES; i++){
for (j=0; j<COLUMNES; j++){
gotoxy (j,i);
if(i-2>0 && controlint[i-2][j]==1){cont++;};
if(i-2>0 && j-2>0 && controlint[i-2][j-2]==1){cont++;};
if(i+2<FILES && controlint[i+2][j]==1){cont++;};
if(i+2<FILES && j+2<COLUMNES && controlint[i+2][j+2]==1){cont++;};
if(j-2>0 && controlint[j-2]==1){cont++;};
if(j+2<COLUMNES && controlint[j+2]==1){cont++;};
if (controlint[j]=1){
if (controlint [j-2]=1){cont++;}
if (controlint [j+2]=1){cont++;}
if (controlint [i-2][j]=1){cont++;}
if (controlint [i+2][j]=1){cont++;}
if (controlint [i-2][j-2]=1){cont++;}
if (controlint [i-2][j+2]=1){cont++;}
if (controlint [i+2][j-2]=1){cont++;}
if (controlint [i+2][j+2]=1){cont++;}}
if (cont<=1 || cont>=4) { controlintcop[j]=0; printf (" "); gotoxy (j,i); }
else { controlintcop[j]=1; printf ("%c",CELULA); gotoxy (j,i); }
if (controlint[j]=0){
if (controlint [j-2]=1){cont++;}
if (controlint [j+2]=1){cont++;}
if (controlint [i-2][j]=1){cont++;}
if (controlint [i+2][j]=1){cont++;}
if (controlint [i-2][j-2]=1){cont++;}
if (controlint [i-2][j+2]=1){cont++;}
if (controlint [i+2][j-2]=1){cont++;}
if (controlint [i+2][j+2]=1){cont++;}}
if (cont==3) { controlintcop[j]=1; printf ("%c", CELULA); gotoxy (j,i); }}
for (i = 0; i< FILES; i++) {
for (j = 0; j< COLUMNES; j++){
gotoxy (j,i);
if ( controlintcop[j]==0) { controlintcop[j]=0; controlint[j]=0; printf (" "); gotoxy (j,i); }
if ( controlintcop[j]==1) { controlintcop[j]=1; controlint[j]=1; printf ("%c",CELULA); gotoxy (j,i);}}}
}
Me gustaria que me ayudaran en mi trabajo sobre el jeugo de la vida de Jhon conway.
Tengo un problema, y esque no se como ir a la siguiente generacion. Es decir cuando el usuario establece la casilla, apreta "s" y deberian morir o reaparacer depndiendo de la vecinas. Aqui led dej mi codigo del tablero. Como pueden observar, cuan apreta la "s" va a un "void seguent_generacio (void)", le dejo el codigo de verificacion que esta mal, pero no se como hacerlo ya.
Gracias por adelantado
#include <stdio.h>
#include <stdlib.h>
#include <conio2.h>
#define FILES 24
#define COLUMNES 80
#define FINAL 'z'
#define CELULA 3
#define AMUNT 72
#define AVALL 80
#define ESQUERRA 75
#define DRETA 77
void dibuixa_quadre (void);
void seguent_generacio (void);
int controlint[24][80];
int controlintcop[24][80];
int x=0, x2=0; // Recoger las teclas del usuario
int i=0, j=0, cont=0;
int main (void)
{
int medcols, medfils; // Posicion del cursor
clrscr(); //Limpiar la pantalla
dibuixa_quadre (); //Dibujar el cuadrado
medcols = COLUMNES / 2; medfils = FILES /2;
gotoxy (medcols,medfils); //gotoxy sirve para marcar la posicion, ahora esta en el centro
while (x!= FINAL){
x=getch(); //es lo mismo que scanf, pero este no muestra las teclas por pantalla
if(x==224){
x2=getch();
switch (x2){
case AMUNT:
if (medfils-2>0) medfils-=2;
break;
case AVALL:
if (medfils+2<=FILES) medfils+=2;
break;
case ESQUERRA:
if (medcols-2>0) medcols-=2;
break;
case DRETA:
if (medcols+2<COLUMNES) medcols+=2;
break;
}
gotoxy (medcols,medfils);
}
//Se ha decidido que si apreta la tecla espacio se imprima el caracter
if (x==32){
controlint[medfils][medcols]=1;
printf("%c", CELULA);
gotoxy (medcols,medfils);}
if (x=='s'){seguent_generacio();}
}
system ("pause");
}
void dibuixa_quadre (void)
{
int i=0, j=0;
for (i=0;i<24;i++){
for (j=0;j<80;j++){
controlint[j]=0;}} //inicialitzar el array
i=0; j=0;
for (i=0;i<24;i++){
for (j=0;j<80;j++){
controlintcop[j]=2;}} //inicialitzar el array de copia
gotoxy (1,1);
//Linia inicial de quadro
printf ("%c%c%", 201,205);
for (i=0; i<38;i++)
printf("%c%c", 203, 205);
printf("%c\n",187);
for (j=0;j<12;j++){
//linias verticales
for (i=0;i<39;i++)
printf ("%c ", 186);
printf( "%c\n",186);
//linies intermitges: 204, 206, 185
if(j!=11){
printf ("%c%c", 204,205);
for (i=0; i<38;i++)
printf ("%c%c",206,205);
printf ("%c\n",185);
} //cerrar el if
}
//linia para cerrar 200,202,188
printf ("%c%c",200,205);
for (i=0; i<38;i++)
printf ("%c%c",202,205);
printf ("%c",188);
}
void seguent_generacio (void){
i=0; j=0;
for (i=0; i<FILES; i++){
for (j=0; j<COLUMNES; j++){
gotoxy (j,i);
if(i-2>0 && controlint[i-2][j]==1){cont++;};
if(i-2>0 && j-2>0 && controlint[i-2][j-2]==1){cont++;};
if(i+2<FILES && controlint[i+2][j]==1){cont++;};
if(i+2<FILES && j+2<COLUMNES && controlint[i+2][j+2]==1){cont++;};
if(j-2>0 && controlint[j-2]==1){cont++;};
if(j+2<COLUMNES && controlint[j+2]==1){cont++;};
if (controlint[j]=1){
if (controlint [j-2]=1){cont++;}
if (controlint [j+2]=1){cont++;}
if (controlint [i-2][j]=1){cont++;}
if (controlint [i+2][j]=1){cont++;}
if (controlint [i-2][j-2]=1){cont++;}
if (controlint [i-2][j+2]=1){cont++;}
if (controlint [i+2][j-2]=1){cont++;}
if (controlint [i+2][j+2]=1){cont++;}}
if (cont<=1 || cont>=4) { controlintcop[j]=0; printf (" "); gotoxy (j,i); }
else { controlintcop[j]=1; printf ("%c",CELULA); gotoxy (j,i); }
if (controlint[j]=0){
if (controlint [j-2]=1){cont++;}
if (controlint [j+2]=1){cont++;}
if (controlint [i-2][j]=1){cont++;}
if (controlint [i+2][j]=1){cont++;}
if (controlint [i-2][j-2]=1){cont++;}
if (controlint [i-2][j+2]=1){cont++;}
if (controlint [i+2][j-2]=1){cont++;}
if (controlint [i+2][j+2]=1){cont++;}}
if (cont==3) { controlintcop[j]=1; printf ("%c", CELULA); gotoxy (j,i); }}
for (i = 0; i< FILES; i++) {
for (j = 0; j< COLUMNES; j++){
gotoxy (j,i);
if ( controlintcop[j]==0) { controlintcop[j]=0; controlint[j]=0; printf (" "); gotoxy (j,i); }
if ( controlintcop[j]==1) { controlintcop[j]=1; controlint[j]=1; printf ("%c",CELULA); gotoxy (j,i);}}}
}