El juego de la vida de Jhon Conway

Iniciado por o0leumas0o, 21 Noviembre 2011, 18:16 PM

0 Miembros y 1 Visitante están viendo este tema.

o0leumas0o

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);}}}
}