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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


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

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ayuda Juego de la Vida en C
« en: 21 Agosto 2011, 01:25 am »

Bueno necesito de vuestra ayuda tengo hacer un progrma en c del juego de la vida.
El cual tiene q leer los parametros desde un fichero y la matriz desde el fichero tambien las reglas supongo que ya las conocereis si no las puedo volver a poner.

os adjunto mi codigo y las dudas q tengo q hace q no me funciones espero vuestra ayuda.

Código:
#include <stdio.h>
#include <stdlib.h>
#define X 25
#define Y 25


typedef struct _coords{
int y,x;
        int my,mx;
} coords;

typedef struct _Parametros{
coords  pos_inicial;
int num_gen;
        char campo[X][Y];
} parametros;


parametros miNuevaStruct()
{
    parametros tmp;
    tmp.num_gen=0;
    tmp.pos_inicial.y=0;
    tmp.pos_inicial.y=0;
    return tmp;
}

parametros leer_parametros (char* cfg_frame)
{
        int a,i;
char buffer [2048];
        char tableA[X][Y];
parametros parms= miNuevaStruct();

FILE* f=fopen("entrada1.txt", "r");
if (f==NULL) // <stdlib.h>
{
fprintf(stderr, "el fichero %s no ha podido ser abierto\n");
exit(1); //<stdlib.hZ
}
fgets(buffer, 2048, f);
sscanf(buffer,"%d", &(parms.num_gen));

fgets(buffer, 2048, f);
sscanf(buffer, "%d %d", &(parms.pos_inicial.x), &(parms.pos_inicial.y));

        for(a=0; a<=parms.pos_inicial.x; a++)
{
for(i=0; i<parms.pos_inicial.y; i++)
{
                    fscanf(f, "%c", &parms.campo[a][i]);
}
}
fclose(f);

return parms;
}

void reglasEvo(char tableA[X][Y], char tableB[X][Y])
{
   int vecinos;
   int x;
   int y;
   parametros parms;
   for (x = 0; x <= parms.pos_inicial.x; x++)
   {
  for (y = 0; y < parms.pos_inicial.y; y++)
          {
vecinos = 0;
if (parms.campo[x-1][y-1]=='*')
                 {
vecinos++;
}
if (parms.campo[x-1][y]=='*')
                 {
vecinos++;
}
if (parms.campo[x-1][y+1]=='*')
                 {
vecinos++;
}
if (parms.campo[x][y-1]=='*')
                 {
vecinos++;
}
if (parms.campo[x][y + 1] == '*')
                 {
vecinos++;
}
if (parms.campo[x + 1][y - 1] == '*')
                 {
vecinos++;
}
if (parms.campo[x + 1][y] == '*')
                 {
vecinos++;
}
if (parms.campo[x + 1][y + 1] == '*')
                 {
vecinos++;
}
if (parms.campo[x][y] == '*' && vecinos < 2)
                 {
tableB[x][y] = '-';
}
else if (parms.campo[x][y] == '*' && vecinos > 3)
                 {
tableB[x][y] = '-';
}
else if (parms.campo[x][y] == '*' && (vecinos == 2 || vecinos == 3))
                 {
tableB[x][y] = '*';
}
else if (parms.campo[x][y] == '-' && vecinos == 3)
                 {
tableB[x][y] = '*';
}
          }
   }
}

void intercambio(char tableA[X][Y], char tableB[X][Y])
{
   int x;
   int y;
   parametros parms;
   for (x = 0; x <= parms.pos_inicial.x; x++)
   {
  for (y = 0; y < parms.pos_inicial.y; y++)
parms.campo[x][y] = tableB[x][y];
   }
}

void dibujartable(char tableA[X][Y])
{
   int x;
   int y;
parametros parms;
   for (x = 0; x <= parms.pos_inicial.x; x++)
   {
 
  for (y = 0; y < parms.pos_inicial.y; y++)
          {
              if(parms.campo[x][y]=='*')
              printf("*");
              else
              printf("-");
          }
   }
   
}

int main(int argc, char** argv)
{
   char tableB[X][Y];
   int gen=0, x, y;
   parametros parms;
   
   parms=leer_parametros(argv[1]);

   while (gen < parms.num_gen)
   {
  reglasEvo(parms.campo, tableB);
  intercambio(parms.campo, tableB);
  dibujartable(parms.campo);
          gen++;
   }
   return 0;
}

aqui os adjunto el contenido del ficehro de texto

Código:
100
15 30
------------------------------
---***------------------------
--*---*-----------------------
--*---*-----------------------
--*---*-----------------------
---***------------------------
------------------------------
------------------------------
------------------------**----
-----**----------------*--*---
----*--*----------------**----
----*--*----------------------
-----**-----------------------
------------------------------
------------------------------

En la funcion leer parametros tras leer el num_gen y las coordenadas procedo a leer la matriz mediante esto

        for(a=0; a<=parms.pos_inicial.x; a++)
        {
        for(i=0; i<parms.pos_inicial.y; i++)
        {
                        fscanf(f, "%c", &parms.campo[a]);
        }
        }
antes le ponia el salto de linea al cerrar el segundo for y en el primer for ponia a<parms.pos_inicial sin el igual. Pero no me lo guardaba bien.
En la funcion reglasEvo con dos fors para que recorra la matriz. Hago que cuando vea un asterisco el contador vecinos aumente en 1 para poder tener el numero de vecinos. luego evaluo las condicones de vida o muerte. y hago q lo guarde en una tabla llamada tableB.

en la funcion intercanbio hago que guarde los cambios hechos en tableB en parms.campo.

en la funcion dibujartable hago que dibuje la matriz

   for (x = 0; x <= parms.pos_inicial.x; x++)
   {
     
      for (y = 0; y < parms.pos_inicial.y; y++)
          {
              if(parms.campo
  • [y]=='*')
              printf("*");
              else
              printf("-");
          }
   }

como antes no le pongo el salto de linea y pongo el = en el primer for porq sino lo imprimia desestructurado.

luego en el main llamo a la funcion leerparametros y abro un while el cual seguira activo hasta que se llegue al num_gen dentro del while llamo a las funciones
      reglasEvo(parms.campo, tableB);
      intercambio(parms.campo, tableB);
      dibujartable(parms.campo);
          gen++;

pero al compilar y ejecutar no hace nada me sale pulse cualquier tecla para terminar.

el problema es que no llamo bien a las funciones diria.

mis dudas son el hecho de no llamar bien a las funciones y en la funcion de leer la matriz y dibujar el hecho de no ponder el salto de linea y poner el =.


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,136 Último mensaje 9 Diciembre 2006, 14:39 pm
por SirLanceCC
El juego de la vida de Jhon Conway
Programación C/C++
o0leumas0o 0 2,518 Último mensaje 21 Noviembre 2011, 18:16 pm
por o0leumas0o
El Juego de la vida de John Horton
Juegos y Consolas
emmHB 0 2,839 Último mensaje 15 Octubre 2012, 20:46 pm
por emmHB
[AYUDA VB.NET]Mostrar VIDA de un juego en una label
Programación Visual Basic
M1LL3R 2 2,123 Último mensaje 8 Febrero 2015, 09:20 am
por M1LL3R
Ayuda Juego De la Vida-Conway graficos
Programación C/C++
SkaTrumpet 2 1,953 Último mensaje 29 Marzo 2016, 18:30 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines