Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: folostia en 21 Enero 2012, 09:57 am



Título: "Juego de la vida" en C
Publicado por: folostia en 21 Enero 2012, 09:57 am
¿Alguien sabe cómo se hace el juego de la vida en C? nos lo ha mandado hacer el trabajo y sé como funciona pero no tengo ni idea de programarlo y ella se niega a explicarnos nada...  >:(

no pido que me lo hagáis pero a ver si alguien sabe más o menos cómo hacerlo


Título: Re: "Juego de la vida" en C
Publicado por: rir3760 en 22 Enero 2012, 03:39 am
Las reglas del juego de la vida las puedes encontrar en cinco minutos cortesía de un buscador decente como Google.

En cuanto al algoritmo, este es:
Código:
Imprimir la generación actual (generación inicial)
Incrementar el numero de generaciones

Mientras no se alcance el numero de generaciones requerido
   Calcular la siguiente generación
   Imprimir la generación
Eso te debe sugerir que solo se trata de un bucle llamando a funciones de soporte: una para crear una generación en base a la actual y otra para imprimirla.

Para almacenar la generación actual debes utilizar una matriz, eso se implementa en C mediante un array de arrays de caracteres (por ejemplo "char gen[10][10]") con el valor 1 si hay una célula viva y 0 en caso contrario.

Para la generación siguiente debes recorrer cada una de las celdas de la matriz actual verificando su estado (numero de vecinos): si eso resulta en una célula viva o muerta lo "anotas" en otra matriz (esa es la nueva generación).

Suena engorroso (tedioso) pero no es difícil.

Un saludo


Título: Re: "Juego de la vida" en C
Publicado por: Noxors en 22 Enero 2012, 17:26 pm
¿Alguien sabe cómo se hace el juego de la vida en C? nos lo ha mandado hacer el trabajo y sé como funciona pero no tengo ni idea de programarlo y ella se niega a explicarnos nada...  >:(

no pido que me lo hagáis pero a ver si alguien sabe más o menos cómo hacerlo

Ni siquiera os ha dado el codigo del dibujo del cuadro?

Yo tuve que hacerlo hace 2 meses, no tiene mucha dificiltad. Ahora mismo he de marcharme al trabajo, pero cuando vuelva te echo un cable.

Al mio lo que le pasa es que en la generacion que yo inserto celulas me sale el cuadro, pero cuando paso a la siguiente generacion ya el cuadro dice que desaparece y no aparece mas xDD

NoX


Título: Re: "Juego de la vida" en C
Publicado por: folostia en 22 Enero 2012, 17:35 pm
Ni siquiera os ha dado el codigo del dibujo del cuadro?

Yo tuve que hacerlo hace 2 meses, no tiene mucha dificiltad. Ahora mismo he de marcharme al trabajo, pero cuando vuelva te echo un cable.

Al mio lo que le pasa es que en la generacion que yo inserto celulas me sale el cuadro, pero cuando paso a la siguiente generacion ya el cuadro dice que desaparece y no aparece mas xDD

NoX
Lo único que nos dio fue el en qué consiste el juego,nada más,y aún por encima se niega  ayudarnos...


Título: Re: "Juego de la vida" en C
Publicado por: El_Java en 22 Enero 2012, 18:06 pm
Yo lo hice hace algun tiempo en C++, y el proceso que usé fue más o menos este:
------
vector<vector<char> > mapa, copia; //son dos matrices de chars, pero usando la STL
Entrada de datos // lees el mapa
copia = mapa
Procesamiento:
  • bucle for para recorrer el numero de instantes:
  • dos bucles for recorriendo el mapa
  •   si se cumple las condiciones hacer los cambios sobre copia
  • mapa = copia
Fin procesamiento.
Salida. //muestras el mapa
---
Espero que lo puedas entender.

PD: En que universidad estás estudiando?


Título: Re: "Juego de la vida" en C
Publicado por: Noxors en 22 Enero 2012, 20:05 pm
Bueno yo solo te facilitare el codigo que dibuja el cuadro, despues de ahí tendras que apañartelas tu solo, ya que supongo que es lo unico que aun no te habran explicado. Te va bien?

NoX


Título: Re: "Juego de la vida" en C
Publicado por: folostia en 22 Enero 2012, 20:41 pm
Bueno yo solo te facilitare el codigo que dibuja el cuadro, despues de ahí tendras que apañartelas tu solo, ya que supongo que es lo unico que aun no te habran explicado. Te va bien?

NoX
Cualquier ayuda es bien recibida,lo malo es que tengo que hacer varios trabajos y no tengo mucho tiempo.

Muchísimas gracias,el resto lo hago yo porque si no tampoco aprendo nada.

un cordial saludo y,otra vez,gracias  :)


Título: Re: "Juego de la vida" en C
Publicado por: Noxors en 22 Enero 2012, 20:59 pm
Aqui te lo dejo, revisa los cierres {} ya que he copiado el codigo del mio sin mirar demasiado donde abrian y cerraban las claves jeje.

Este codigo es mas o menos el que nos dieron a nosotros para posicionar el cursor, dibujar el cuadro y pintar una celula, nosotros teniamos que hacer el resto.

Los comentarios estan en catalan, (cosas del sistema de educacion de aqui xD)

Código:
 #include <stdio.h>
 #include <stdlib.h>
 #include <conio2.h>
 
 #define FILES 24
 #define COLUMNES 80
 
 #define FINAL 'z'
 #define CELULA 2
 
 #define AMUNT 72
 #define AVALL 80
 #define ESQUERRA 75
 #define DRETA 77
 
 void dibuixa_quadre(void);
 
 int medcols,medfils; //Per a posicionar el cursos
 
 int main (void)
 {
 
 int x=0,x2=0; //Per a recollir les tecles que prem l'usuari
 

 clrscr(); //Serveix per esborrar la pantalla de la consola
 
 dibuixa_quadre(); //Dibuixem el requadre
 
 medcols = COLUMNES / 2; medfils = FILES / 2;
 
 /* Funcio gotoxy(x,y)
 Serveix per a posicionarse a una coordenada determinada de la consola.
 Apareix a la nova llibreria instal·lada conio2.h */
 
 gotoxy(medcols,medfils); //Posicionarse al mig
 
 /*Mentre l'usuari no permi la tecla z el programa no arribara al seu final.
 Podeu ficar un altre lletra si us interesa modificant la constant */
 
 while(x != FINAL)
 {
 x= getch(); //Recollir una tecla de l'usuari sense mostrar-la per pantalla
 
 if(x==224) //Codi ASCI estes.
 {
 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);
 
 }
 // Si premem l'espai llavors pintem una cel·lula
 
 if(x==32)
 {
 if (mundo[medfils-1][medcols-1]) {
 printf (" ");
 mundo [medfils-1][medcols-1]=0;
 }
 else {
 printf("%c", CELULA);
 mundo[medfils-1][medcols-1]=1;
 }
 gotoxy(medcols,medfils);
 
 }
 
 
 void dibuixa_quadre (void)
 {
 int i=0, j=0;
 
 gotoxy (1,1);
 
 //Linia inicial del quadre
 
 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++)
 {
 //Linies verticals
 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);
 }
 }
 // Linea de tancament 200,202,188
 printf("%c%c",200,205);
 
 for(i=0; i < 38; i++)
 {
 printf("%c%c",202,205);
 }
 printf("%c",188);
 }

Y te dejo mi ejecutable para que veas como me quedó a mi.
Lh: No se pueden postear ejecutables en esta sección

Cualquier duda, aqui estoy :)


NoX