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

 

 


Tema destacado:


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

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Ayuda Juego De la Vida-Conway graficos
« en: 29 Marzo 2016, 04:32 am »

Hola comunidad¡
Queria solicitar su ayuda por que staba realizando el juego de la vida del matematico conway con la bilbioteca graph.h
Solo que esta no respeta la regla que si el estado de la celda es "vida" y no tiene alado ninguna celda "viva" esta pasa a estado "muerto"
Gracias de ante mano.
P.D:El estado vivo se representa con el color azul=1 y el muerto con el negro=0
Código
  1. #include <graphics.h>
  2. #include <stdio.h>
  3. #include <time.h>
  4. void casilla(int x,int y);
  5. void tablero();
  6. void verifica();
  7. int  vecino(int x,int y);
  8. void condiciones(int estado,int v,int x,int y);
  9.  
  10. int main()
  11. {
  12.    initwindow(700,500,"Juego de la vida");
  13.    tablero();
  14.    verifica();
  15.    closegraph();
  16. }
  17. void casilla(int x,int y)
  18. {
  19.    int c;
  20.    c = rand() % 8 ;
  21.    setfillstyle(1,1);
  22.    rectangle(x,y,x+10,y+10);
  23.    if(c==2 || c==3)
  24.        floodfill(x+5,y+5,WHITE);
  25. }
  26. void tablero()
  27. {
  28.    int x,y;
  29.    for(y=0;y<getmaxy();y+=10)
  30.      for(x=0;x<getmaxx();x+=10)
  31.        casilla(x,y);
  32. }
  33. void verifica()
  34. {
  35.    int x,y,e,v,prueba=1;//e=estado v=vecinos
  36.    for(y=5;y<getmaxy();y+=10)
  37.    for(x=5;x<getmaxx();x+=10)
  38.    {
  39.        e=getpixel(x,y);
  40.        v=vecino(x,y);
  41.        condiciones(e,v,x,y);
  42.    }
  43.    verifica();
  44. }
  45. int vecino(int x,int y)
  46. {
  47.    int c=0,i,j;
  48.    int limx=x+10,limy=y+10;
  49.    for(i=x-10;i<=limx;i+=10)
  50.            for(j=y-10;j<=limy;j+=10)
  51.                if(limx!=x && limy!=y)
  52.                    if(x > 0 && x < getmaxx())
  53.                        if( y > 0 && y < getmaxy())
  54.                            if(getpixel(i,j)==1)
  55.                                c++;
  56.    return(c);
  57. }
  58. void condiciones(int estado,int v,int x,int y)
  59. {
  60.    if(estado==1 && v==0)
  61.    {
  62.        setfillstyle(1,0);
  63.        floodfill(x,y,WHITE);
  64.    }
  65.    if(estado==1 && v>=3)
  66.    {
  67.        setfillstyle(1,0);
  68.        floodfill(x,y,WHITE);
  69.    }
  70.    if(estado==0 && v==3)
  71.    {
  72.        setfillstyle(1,1);
  73.        floodfill(x,y,WHITE);
  74.    }
  75. }
  76.  
  77.  
  78.  


En línea

LaiaxanIV

Desconectado Desconectado

Mensajes: 57


Ver Perfil
Re: Ayuda Juego De la Vida-Conway graficos
« Respuesta #1 en: 29 Marzo 2016, 09:24 am »

No he podido probar el programa para asegurarme que la opción que te voy a dar sea correcta ya que no dispongo de graphics.h xD
Supongo que la función vecino devuelve el número de celdas vivas adyacentes a la celda que buscas. El problema parece estar en que también miras la propia celda por lo cual la primera condicion de condiciones() no se va a cumplir. Seria suficiente poniendo otra condición dentro de vecino que fuese
if(x != i && y != j)...
Si no llegase a ser eso, saca por pantalla la x,y y v en condiciones()


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Ayuda Juego De la Vida-Conway graficos
« Respuesta #2 en: 29 Marzo 2016, 18:30 pm »

Por lo que entiendo de tu código el control de las casillas vivas y muertas lo haces con el color de los píxeles.
Te sería más sencillo si separaras la lógica de la presentación: una tabla de X x X de bools o ints, según te vaya mejor.
Por otra parte el juego debe hacerse con dos tableros, uno con la representación y el otro será una copia para trabajar. Esto es así porqué el cálculo de la época actual debe hacerse según la época directamente anterior; si modificas la tabla de la que obtienes los datos el juego no tendrá el comportamiento esperado.
Debes tener en cuenta los límites del mundo: si estás calculando la esquina superior izquierda no puedes mirar que hay ni en la fila superior ni en la columna que está más a su izquierda porqué no existen, o puedes  juntar los límites haciendo que la izquierda se junte con la derecha y arriba con abajo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Juego de rol [Graficos anime o parecido] Diganme alguno ¡¡ « 1 2 »
Juegos y Consolas
anonimo12121 11 11,767 Último mensaje 24 Abril 2009, 13:01 pm
por anonimo12121
Ayuda Juego de la Vida en C
Programación C/C++
neji8 0 3,478 Último mensaje 21 Agosto 2011, 01:25 am
por neji8
El juego de la vida de Jhon Conway
Programación C/C++
o0leumas0o 0 2,678 Último mensaje 21 Noviembre 2011, 18:16 pm
por o0leumas0o
El juego de la vida de John Conway
Programación C/C++
bl@ck 0 4,910 Último mensaje 14 Enero 2015, 19:23 pm
por bl@ck
[AYUDA VB.NET]Mostrar VIDA de un juego en una label
Programación Visual Basic
M1LL3R 2 2,280 Último mensaje 8 Febrero 2015, 09:20 am
por M1LL3R
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines