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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  "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: "Juego de la vida" en C  (Leído 9,697 veces)
folostia

Desconectado Desconectado

Mensajes: 111


Ver Perfil
"Juego de la vida" en C
« 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


En línea

"Antes de que un software pueda ser reusable, primero ha de ser usable." (Ralph Johnson)
Usuario Linux:547941
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: "Juego de la vida" en C
« Respuesta #1 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


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Noxors


Desconectado Desconectado

Mensajes: 641



Ver Perfil WWW
Re: "Juego de la vida" en C
« Respuesta #2 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
En línea

folostia

Desconectado Desconectado

Mensajes: 111


Ver Perfil
Re: "Juego de la vida" en C
« Respuesta #3 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...
En línea

"Antes de que un software pueda ser reusable, primero ha de ser usable." (Ralph Johnson)
Usuario Linux:547941
El_Java

Desconectado Desconectado

Mensajes: 144



Ver Perfil WWW
Re: "Juego de la vida" en C
« Respuesta #4 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?
« Última modificación: 22 Enero 2012, 20:48 pm por El_Java » En línea

Noxors


Desconectado Desconectado

Mensajes: 641



Ver Perfil WWW
Re: "Juego de la vida" en C
« Respuesta #5 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
En línea

folostia

Desconectado Desconectado

Mensajes: 111


Ver Perfil
Re: "Juego de la vida" en C
« Respuesta #6 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  :)
En línea

"Antes de que un software pueda ser reusable, primero ha de ser usable." (Ralph Johnson)
Usuario Linux:547941
Noxors


Desconectado Desconectado

Mensajes: 641



Ver Perfil WWW
Re: "Juego de la vida" en C
« Respuesta #7 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
« Última modificación: 22 Enero 2012, 21:18 pm por Littlehorse » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines