elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  El juego de la vida
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: El juego de la vida  (Leído 3,088 veces)
Kenji-chan

Desconectado Desconectado

Mensajes: 104


Ver Perfil
El juego de la vida
« en: 20 Noviembre 2016, 18:35 pm »

Hola disculpen alguin me podria ayudar con mi implementacion del juego de la vida de john conway, concretamente en la funcion comprobacion(), se agradece de ante mano.  ;D

Código
  1. //El juego de la vida
  2.  
  3. #include <stdio.h>
  4. #include <windows.h>
  5. #include <time.h>
  6.  
  7. int columnas;
  8.  
  9. void gotoxy(int x,int y);
  10. void dibujarrejilla(int fil, int col);
  11. void dibujarCelula(int rejilla[][columnas], int filas, int col);
  12. void llenarRejilla(int rejilla[][columnas], int filas, int col);
  13. void comprobacion(int rejilla[][columnas], int filas, int col);
  14.  
  15. int main(){
  16.  
  17.    int filas, col;
  18.    int i, j;
  19.  
  20.    printf("Coloque el numero de filas\n");
  21.    scanf("%d", &filas);
  22.    printf("Coloque el numero de columnas\n");
  23.    scanf("%d", &col);
  24.  
  25.    columnas = col;
  26.  
  27.    int rejilla[filas][col];
  28.  
  29.    llenarRejilla(rejilla, filas, col);
  30.    dibujarrejilla(filas, col);
  31.  
  32.  
  33.    do{
  34.    dibujarCelula(rejilla, filas, col);
  35.    comprobacion(rejilla, filas, col);
  36.    Sleep(1000);
  37.    //getch();
  38.  
  39.    }while(1);
  40.  
  41.    getch();
  42.    return 0;
  43. }
  44.  
  45. void gotoxy(int x,int y){
  46.      HANDLE hcon;
  47.      hcon = GetStdHandle(STD_OUTPUT_HANDLE);
  48.      COORD dwPos;
  49.      dwPos.X = x;
  50.      dwPos.Y= y;
  51.      SetConsoleCursorPosition(hcon,dwPos);
  52. }
  53.  
  54. void llenarRejilla(int rejilla[][columnas], int filas, int col){
  55.    int i, j;
  56.  
  57.    srand(time(NULL));
  58.  
  59.     for(i=0; i<filas; i++){
  60.        for(j=0; j<col; j++){
  61.            rejilla[i][j]=rand()%2;
  62.        }
  63.     }
  64.  
  65. }
  66.  
  67. void dibujarrejilla(int fil, int col){
  68.    int i, j;
  69.  
  70.    system("cls");
  71.  
  72.    for(i=0; i<fil; i++){
  73.        for(j=0; j<col; j++){
  74.            if(i==0){
  75.                if(j==0){
  76.                    gotoxy(i*2,j*2);
  77.                    printf("%c%c",201,205);
  78.                }else{
  79.                    if((col-1) == j){
  80.                       gotoxy(i*2,j*2);
  81.                        printf("%c%c",200,205);
  82.                        gotoxy(i*2,(j*2-1));
  83.                        printf("%c",186);
  84.                    }else{
  85.                        gotoxy(i*2,j*2);
  86.                        printf("%c%c",204,205);
  87.                        gotoxy(i*2,(j*2-1));
  88.                        printf("%c",186);
  89.                    }
  90.                }
  91.            }else{
  92.                if(j==0){
  93.                    gotoxy(i*2,j*2);
  94.                    printf("%c%c",203,205);
  95.                }else{
  96.                    if((col-1) == j){
  97.                        gotoxy(i*2,j*2);
  98.                        printf("%c%c",202,205);
  99.                        gotoxy(i*2,(j*2-1));
  100.                        printf("%c",186);
  101.                    }else{
  102.                        gotoxy(i*2,j*2);
  103.                        printf("%c%c",206,205);
  104.                        gotoxy(i*2,(j*2-1));
  105.                        printf("%c",186);
  106.                    }
  107.                }
  108.                if((fil-1) == i){
  109.                        if(j==0){
  110.                           gotoxy(i*2,j*2);
  111.                            printf("%c ",187);
  112.                        }else if((col-1) == j){
  113.                            gotoxy(i*2,j*2);
  114.                            printf("%c ",188);
  115.                        }else{
  116.                            gotoxy(i*2,j*2);
  117.                            printf("%c ",185);
  118.                        }
  119.                }
  120.            }
  121.        }
  122.    }
  123.  
  124.  
  125.  
  126. }
  127.  
  128. void dibujarCelula(int pos[][columnas], int filas, int col){
  129.    int j, i;
  130.  
  131.    for(i=0; i<filas-1; i++){
  132.        for(j=0; j<col-1; j++){
  133.            if(pos[i][j] == 1){
  134.                gotoxy((i*2)+1,(j*2)+1);
  135.                printf("%c", 219);
  136.            }else{
  137.                gotoxy((i*2)+1,(j*2)+1);
  138.                printf(" ");
  139.            }
  140.        }
  141.    }
  142.  
  143. }
  144.  
  145. void comprobacion(int rejilla[][columnas], int filas, int col){
  146.    int i, j, x, y, reja[filas][col], vivas;
  147.  
  148.    for(i=0; i<filas; i++){
  149.        for(j=0; j<col; j++){
  150.            if(rejilla[i][j] == 0){
  151.                vivas = 0;
  152.                for(x=0; x<3; x++){
  153.                    for(y=0; y<3; y++){
  154.                        if((i+1)-x == i && (j+1)-y == j){
  155.                            reja[i][j] = rejilla[i][j];
  156.                        }else if(rejilla[(i+1)-x][(j+1)-y] == 1){
  157.                            vivas++;
  158.                        }
  159.                    }
  160.                }
  161.                if( vivas == 3){
  162.                    reja[i][j] = 1;
  163.                }
  164.            }else if(rejilla[i][j] == 1){
  165.                vivas = 0;
  166.                for(x=0; x<3; x++){
  167.                    for(y=0; y<3; y++){
  168.                        if((i+1)-x == i && (j+1)-y == j){
  169.                            reja[i][j] = rejilla[i][j];
  170.                        }else if(rejilla[(i+1)-x][(j+1)-y] == 1){
  171.                            vivas++;
  172.                        }
  173.                    }
  174.                }
  175.                if(vivas == 2 || vivas == 3){
  176.                    reja[i][j] = 1;
  177.                }else{
  178.                    reja[i][j] = 0;
  179.                }
  180.            }
  181.        }
  182.    }
  183.  
  184.    for(i=0; i<filas; i++){
  185.        for(j=0; j<col; j++){
  186.            rejilla[i][j] = reja[i][j];
  187.        }
  188.    }
  189.  
  190. }
  191.  


« Última modificación: 20 Noviembre 2016, 18:40 pm por engel lex » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: El juego de la vida
« Respuesta #1 en: 20 Noviembre 2016, 18:41 pm »

que problema tienes en esa función?


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Kenji-chan

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: El juego de la vida
« Respuesta #2 en: 20 Noviembre 2016, 18:47 pm »

no ebalua correcta mente algunas celdas como x ejemplo devez en cuando me crea una celula donde no hay nada de vida o en las celulas que estan solas ai ariba no mueren por soledad

MOD: Imagen adaptada a lo permitido.
« Última modificación: 20 Noviembre 2016, 21:33 pm por MCKSys Argentina » En línea

Kenji-chan

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: El juego de la vida
« Respuesta #3 en: 20 Noviembre 2016, 18:58 pm »

no se si sedeva a  que mi funcion no evalua si la comparacion esta fuera de la matriz, solo evalua si es 0 o 1
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: El juego de la vida
« Respuesta #4 en: 20 Noviembre 2016, 19:07 pm »

me parece tu codigo excesivamente anidado y complicado para algo simple...

Código
  1. void comprobacion(int rejilla[][columnas], int filas, int col){
  2.    int i, j, x, y, reja[filas][col], vivas;
  3.  
  4.    for(i=0; i<filas; i++){
  5.        for(j=0; j<col; j++){
  6.            if(rejilla[i][j] == 0){
  7.                vivas = 0;
  8.                for(x=0; x<3; x++){
  9.                    for(y=0; y<3; y++){
  10.                        if((i+1)-x == i && (j+1)-y == j){
  11.                            reja[i][j] = rejilla[i][j];
  12.                        }else if(rejilla[(i+1)-x][(j+1)-y] == 1){
  13.                            vivas++;
  14.                        }
  15.                    }
  16.                }
  17.                if( vivas == 3){
  18.                    reja[i][j] = 1;
  19.                }
  20.            }else if(rejilla[i][j] == 1){
  21.                vivas = 0;
  22.                for(x=0; x<3; x++){
  23.                    for(y=0; y<3; y++){
  24.                        if((i+1)-x == i && (j+1)-y == j){
  25.                            reja[i][j] = rejilla[i][j];
  26.                        }else if(rejilla[(i+1)-x][(j+1)-y] == 1){
  27.                            vivas++;
  28.                        }
  29.                    }
  30.                }
  31.                if(vivas == 2 || vivas == 3){
  32.                    reja[i][j] = 1;
  33.                }else{
  34.                    reja[i][j] = 0;
  35.                }
  36.            }
  37.        }
  38.    }
  39.  
  40.    for(i=0; i<filas; i++){
  41.        for(j=0; j<col; j++){
  42.            rejilla[i][j] = reja[i][j];
  43.        }
  44.    }
  45.  
  46. }

por cosas de legibilidad lo cambiaría a
por otro lado no estoy seguro si compruebas los si está en el borde

Código
  1. void comprobacion(int rejilla[][columnas], int filas, int col){
  2.    int i, j, reja[filas][col], vivas;
  3.  
  4.    for(i=0; i<filas; i++){
  5.        for(j=0; j<col; j++){
  6.  
  7.            vivas = rejilla[i+0][j+0];
  8.            if(i > 0){
  9.                if(j > 0)
  10.                    vivas += rejilla[i-1][j-1];
  11.  
  12.                vivas += rejilla[i-1][j+0];
  13.  
  14.                if(j < col -1)
  15.                    vivas += rejilla[i-1][j+1];
  16.            }
  17.  
  18.            if(j > 0)
  19.                vivas += rejilla[i+0][j-1];
  20.  
  21.            vivas += rejilla[i+0][j+0];
  22.  
  23.            if(j < col -1)
  24.                vivas += rejilla[i+0][j+1];
  25.  
  26.            if(i < filas-1){
  27.                if(j > 0)
  28.                    vivas += rejilla[i+1][j-1];
  29.  
  30.                vivas += rejilla[i+1][j+0];
  31.  
  32.                if(j < col -1)
  33.                    vivas += rejilla[i+1][j+1];
  34.            }
  35.  
  36.            reja[i][j] = 0;
  37.  
  38.            if(vivas == 2 || vivas == 3){
  39.                reja[i][j] = 1;
  40.            }
  41.        }
  42.    }
  43.  
  44.    for(i=0; i<filas; i++){
  45.        for(j=0; j<col; j++){
  46.            rejilla[i][j] = reja[i][j];
  47.        }
  48.    }
  49.  
  50. }
  51. }
« Última modificación: 20 Noviembre 2016, 19:09 pm por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Kenji-chan

Desconectado Desconectado

Mensajes: 104


Ver Perfil
Re: El juego de la vida
« Respuesta #5 en: 20 Noviembre 2016, 22:51 pm »

ya lo he heco funcionar gracias por la ayuda
dejo el code por si alguien lo quiere probar.  ;D
Código:
//El juego de la vida

#include <stdio.h>
#include <windows.h>
#include <time.h>

int columnas;

void gotoxy(int x,int y);
void dibujarrejilla(int fil, int col);
void dibujarCelula(int rejilla[][columnas], int filas, int col);
void llenarRejilla(int rejilla[][columnas], int filas, int col);
void comprobacion(int rejilla[][columnas], int filas, int col);

int main(){

    int i, j, filas, col;

    do{
        printf("Coloque el numero de filas\n");
        scanf("%d", &filas);
        if(filas<10 || filas>40) printf("intodusca un numero mayor que 9 o menor que 41\n");
    }while(filas<10 || filas>40);

    do{
        printf("Coloque el numero de columnas\n");
        scanf("%d", &col);
        if(col<10 || col>29) printf("intodusca un numero mayor que 9 o menor que 30\n");
    }while(col<10 || col>29);


    columnas = col;

    int rejilla[filas][col];

    llenarRejilla(rejilla, filas, col);
    dibujarrejilla(filas, col);


    do{
    dibujarCelula(rejilla, filas, col);
    comprobacion(rejilla, filas, col);
    Sleep(1000);
    //getch();

    }while(1);

    getch();
    return 0;
}

void gotoxy(int x,int y){
      HANDLE hcon;
      hcon = GetStdHandle(STD_OUTPUT_HANDLE);
      COORD dwPos;
      dwPos.X = x;
      dwPos.Y= y;
      SetConsoleCursorPosition(hcon,dwPos);
 }

 void llenarRejilla(int rejilla[][columnas], int filas, int col){
    int i, j;

    srand(time(NULL));

     for(i=0; i<filas; i++){
        for(j=0; j<col; j++){
            rejilla[i][j]=rand()%2;
        }
     }

 }

 void dibujarrejilla(int fil, int col){
    int i, j;

    system("cls");

    for(i=0; i<fil; i++){
        for(j=0; j<col; j++){
            if(i==0){
                if(j==0){
                    gotoxy(i*2,j*2);
                    printf("%c%c",201,205);
                }else{
                    if((col-1) == j){
                       gotoxy(i*2,j*2);
                        printf("%c%c",200,205);
                        gotoxy(i*2,(j*2-1));
                        printf("%c",186);
                    }else{
                        gotoxy(i*2,j*2);
                        printf("%c%c",204,205);
                        gotoxy(i*2,(j*2-1));
                        printf("%c",186);
                    }
                }
            }else{
                if(j==0){
                    gotoxy(i*2,j*2);
                    printf("%c%c",203,205);
                }else{
                    if((col-1) == j){
                        gotoxy(i*2,j*2);
                        printf("%c%c",202,205);
                        gotoxy(i*2,(j*2-1));
                        printf("%c",186);
                    }else{
                        gotoxy(i*2,j*2);
                        printf("%c%c",206,205);
                        gotoxy(i*2,(j*2-1));
                        printf("%c",186);
                    }
                }
                if((fil-1) == i){
                        if(j==0){
                           gotoxy(i*2,j*2);
                            printf("%c ",187);
                        }else if((col-1) == j){
                            gotoxy(i*2,j*2);
                            printf("%c ",188);
                        }else{
                            gotoxy(i*2,j*2);
                            printf("%c ",185);
                        }
                }
            }
        }
    }



 }

 void dibujarCelula(int pos[][columnas], int filas, int col){
    int j, i;

    for(i=0; i<filas-1; i++){
        for(j=0; j<col-1; j++){
            if(pos[i][j] == 1){
                gotoxy((i*2)+1,(j*2)+1);
                printf("%c", 219);
            }else{
                gotoxy((i*2)+1,(j*2)+1);
                printf(" ");
            }
        }
    }

 }

 void comprobacion(int rejilla[][columnas], int filas, int col){
    int i, j, x, y, reja[filas][col], vivas;

    for(i=0; i<filas-1; i++){
        for(j=0; j<col-1; j++){
            if(rejilla[i][j] == 0){
                vivas = 0;
                for(x=0; x<3; x++){
                    for(y=0; y<3; y++){
                        if((i+1)-x == -1 || (j+1)-y == -1 || (i+1)-x > filas-1 || (j+1)-y > col-1){
                            continue;
                        }else if((i+1)-x == i && (j+1)-y == j){
                            reja[i][j] = rejilla[i][j];
                        }else if(rejilla[(i+1)-x][(j+1)-y] == 1){
                            vivas++;
                        }
                    }
                }
                if( vivas == 3){
                    reja[i][j] = 1;
                }
            }else if(rejilla[i][j] == 1){
                vivas = 0;
                for(x=0; x<3; x++){
                    for(y=0; y<3; y++){
                        if((i+1)-x == -1 || (j+1)-y == -1 || (i+1)-x > filas-1 || (j+1)-y > col-1){
                            continue;
                        }else if((i+1)-x == i && (j+1)-y == j){
                            reja[i][j] = rejilla[i][j];
                        }else if(rejilla[(i+1)-x][(j+1)-y] == 1){
                            vivas++;
                        }
                    }
                }
                if(vivas == 2 || vivas == 3){
                    reja[i][j] = 1;
                }else{
                    reja[i][j] = 0;
                }
            }
        }
    }

    for(i=0; i<filas; i++){
        for(j=0; j<col; j++){
            rejilla[i][j] = reja[i][j];
        }
    }

 }

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Juego de la vida en Python
Scripting
SirLanceCC 1 6,332 Último mensaje 9 Diciembre 2006, 14:39 pm
por SirLanceCC
Ayuda Juego de la Vida en C
Programación C/C++
neji8 0 3,482 Último mensaje 21 Agosto 2011, 01:25 am
por neji8
El juego de la vida (IMPRESIONANTE)
Foro Libre
erest0r 1 1,837 Último mensaje 23 Agosto 2014, 01:20 am
por erest0r
Este desarrollador recreó el juego del Tiranosaurio Rex de Chrome en la vida ...
Noticias
wolfbcn 0 1,304 Último mensaje 24 Noviembre 2017, 02:14 am
por wolfbcn
Juego de la vida - Simulacion en Java
Java
LuisCardenas123 3 5,636 Último mensaje 1 Abril 2019, 10:50 am
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines