Autor
|
Tema: "Juego de la vida" en C (Leído 9,697 veces)
|
folostia
Desconectado
Mensajes: 111
|
¿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
Mensajes: 1.639
|
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: 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
|
¿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
Mensajes: 111
|
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
|
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
|
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
Mensajes: 111
|
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
|
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) #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ónCualquier duda, aqui estoy NoX
|
|
« Última modificación: 22 Enero 2012, 21:18 pm por Littlehorse »
|
En línea
|
|
|
|
|
|