¿Supiste lo que acaba de lanzar LagriHost? Sí, como lo estabas esperando, ahora vendemos Web Hosting y Dominios. Conoce más :)


Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
TUTORIAL JAVA y Python: Juego de la vida de John Conway
#1
0
El juego de la vida fue diseñado por el matemático británico John Horton Conway en 1970. La idea es disponer de un tablero de x por x casillas, donde cada casilla puede tomar el valor de 0 o 1.
 Las celdas con valor 0 están muertas y las celdas con valor 1 esta viva, el algoritmo debe recorrer las celdas y examinar las celdas vecinas (alrededor), según las celdas vivas o muertas vamos a cambiar el estado de la casilla examinada. Así es como el tablero va cambiando.



REGLAS:
  • Casilla con 0 o 1 vecinos muere.

  • Casilla con mas de 3 vecinos muere.

  • Casilla con 2 o 3 vecinos vive.

  • Si la casilla no esta poblada, y tiene 3 vecinos se activa.

Programación:

En este caso yo realize el proyecto por "cosola" y en 2 lenguajes diferentes Python y JAVA. A continuación explicare algunas partes del código:


CREAR LA MATRIZ E INTRODUCIR LOS VALORES
En esta parte lo único que hacemos es crear una matriz, donde podremos introducir los valores de "0"  y "1" y posteriormente la imprimimos en pantalla.



En python: 

Código:
[align=center][size=x-small][font=Lato, sans-serif]matriz = [][/font][/size][/align]
[align=center][/align]
[align=center][/align]
[align=center][/align]
[align=center][/align]
[align=center]for i in range(10):[/align]
[align=center][/align]
[align=center]   matriz.append([0]*10)[/align]
[align=center][/align]
[align=center]   [/align]
[align=center][/align]
[align=center]for f in range(10) :[/align]
[align=center][/align]
[align=center]   for c in range (10) :[/align]
[align=center][/align]
[align=center]       matriz[f][c] = int(raw_input("Elemento %d,%d : " % (f,c)))[/align]
[align=center]print matriz[/align]




 En java: Como vemos en java es un poco mas extenso, pero lo único que hacemos aquí de diferente es que hicimos métodos para llenar y mostrar. También en el main incluimos los métodos que mas adelante mostraremos en el blog. 

Código:
[align=center]   public static void main(String[] args) {[/align]
[align=center][/align]
[align=center]       System.out.println("inserte los datos");[/align]
[align=center][/align]
[align=center][/align]
[align=center][/align]
[align=center][/align]
[align=center]       int matriz[][] = new int[3][3];[/align]
[align=center][/align]
[align=center][/align]
[align=center][/align]
[align=center][/align]
[align=center]       llenar(matriz);[/align]
[align=center][/align]
[align=center]               mostrar(matriz);[/align]
[align=center][/align]
[align=center]               //metodos[/align]
[align=center][/align]
[align=center]       contar_vecinos(matriz);[/align]
[align=center][/align]
[align=center]       reglas(matriz);[/align]
[align=center][/align]
[align=center]       imprimir2(matriz);[/align]
[align=center][/align]
[align=center]   } [/align]



//EL METODO EN JAVA PARA LLENAR

Código:
[align=center]   private static void llenar(int[][] mat) {[/align]
[align=center][/align]
[align=center]      for ( i = 0; i < mat.length; i++) {[/align]
[align=center][/align]
[align=center]           for ( j = 0; j < mat.length; j++) {[/align]
[align=center][/align]
[align=center]               mat[i][j] = teclado.nextInt();[/align]
[align=center][/align]
[align=center]           }[/align]
[align=center][/align]
[align=center]       }[/align]
[align=center][/align]
[align=center]   }[/align]




//EL MÉTODO EN JAVA PARA MOSTRAR

Código:
[align=center][/align]
[align=center]   private static void mostrar(int[][] mat) {[/align]
[align=center][/align]
[align=center]       for ( i = 0; i < mat.length; i++) {[/align]
[align=center][/align]
[align=center]           for ( j = 0; j < mat.length; j++) {[/align]
[align=center][/align]
[align=center]               System.out.print(mat[i][j] + " ");[/align]
[align=center][/align]
[align=center]           }[/align]
[align=center][/align]
[align=center]           System.out.println();[/align]
[align=center][/align]
[align=center]       }[/align]
[align=center][/align]
[align=center]   }   [/align]



ANALIZAR VECINOS
Aquí nos encargamos por medio de una función en python o un método en java (según sea el caso) analiza los vecinos de la celda a analizar, para saber si están vivos o muertos.

En python:

Código:
[align=center]for f in range(10) :[/align]
[align=center][/align]
[align=center]   for c in range (10) :[/align]
[align=center][/align]
[align=center]       vecino = 0[/align]
[align=center][/align]
[align=center]       if (i[f][c-1]==1) :[/align]
[align=center][/align]
[align=center]       intvecino = vecino +1 :[/align]
[align=center][/align]
[align=center]       if (i[f][c+1]==1)[/align]
[align=center][/align]
[align=center]       vecino = vecino +1[/align]
[align=center][/align]
[align=center]       if (i[f-1][c]==1)[/align]
[align=center][/align]
[align=center]       vecino = vecino +1[/align]
[align=center][/align]
[align=center]       if (i[f+1][c]==1[/align]
[align=center][/align]
[align=center]       vecino = vecino +1[/align]
[align=center][/align]
[align=center]        if (i[f-1][c-1]==1[/align]
[align=center][/align]
[align=center]       vecino = vecino +1[/align]
[align=center][/align]
[align=center]        if (i[f-1][c+1]==1[/align]
[align=center][/align]
[align=center]       vecino = vecino +1[/align]
[align=center][/align]
[align=center]        if (i[f+1][c-1]==1[/align]
[align=center][/align]
[align=center]       vecino = vecino +1[/align]
[align=center][/align]
[align=center]        if (i[f+1][c+1]==1[/align]
[align=center][/align]
[align=center]       vecino = vecino +1[/align]


  En java:
Código:
[align=center][/align]
[align=center][/align]
[align=center]if (mat[i][j-1]==1)//vecino izquierda[/align]
[align=center][/align]
[align=center]  {[/align]
[align=center][/align]
[align=center]  vecino=vecino+1;[/align]
[align=center][/align]
[align=center]  }[/align]
[align=center][/align]
[align=center]  if (mat[i][j+1]==1)//vecino derecha[/align]
[align=center][/align]
[align=center]                   {[/align]
[align=center][/align]
[align=center]                   vecino=vecino+1;[/align]
[align=center][/align]
[align=center]                   }[/align]
[align=center][/align]
[align=center]    if (mat[i-1][j]==1)//vecino arriba[/align]
[align=center][/align]
[align=center]                   {[/align]
[align=center][/align]
[align=center]                   vecino=vecino+1;[/align]
[align=center][/align]
[align=center]                   }[/align]
[align=center][/align]
[align=center]                   if (mat[i+1][j]==1)//vecino  abajo[/align]
[align=center][/align]
[align=center]                   { [/align]
[align=center][/align]
[align=center]                   vecino=vecino+1;[/align]
[align=center][/align]
[align=center]                   }[/align]
[align=center][/align]
[align=center]    if (mat[i-1][j-1]==1)//vecino arriba izquierda[/align]
[align=center][/align]
[align=center]                   {[/align]
[align=center][/align]
[align=center]                   vecino=vecino+1;[/align]
[align=center][/align]
[align=center]                   }[/align]
[align=center][/align]
[align=center]        if (mat[i-1][j+1]==1)//vecino arriba  derecha[/align]
[align=center][/align]
[align=center]                   {[/align]
[align=center][/align]
[align=center]                   vecino=vecino+1;[/align]
[align=center][/align]
[align=center]                   }[/align]
[align=center][/align]
[align=center]         if (mat[i+1][j-1]==1)//vecino arriba izquierda[/align]
[align=center][/align]
[align=center]                   {[/align]
[align=center][/align]
[align=center]                   vecino=vecino+1;[/align]
[align=center][/align]
[align=center]                   }[/align]
[align=center][/align]
[align=center]                 if (mat[i+1][j+1]==1)//vecino  abajo derecha[/align]
[align=center][/align]
[align=center]                   {[/align]
[align=center][/align]
[align=center]                   vecino=vecino+1;[/align]
[align=center][/align]
[align=center]                   }[/align]
[align=center][/align]
[align=center]  }[/align]
[align=center][/align]
[align=center] [/align]
[align=center][/align]
[align=center]  }[/align]


REGLAS

En esta parte empezaremos aplicar las reglas, ya que ya tenemos analizados los vecinos de la celda a examinar y según sea el caso la celda podría morir ("0") o vivir "1")
En python:

Código:
[align=center][/align]
[align=center]   if (i [f][c]==1)[/align]
[align=center][/align]
[align=center]   if(vecino <=1)[/align]
[align=center][/align]
[align=center]     i [f][c]=0[/align]
[align=center][/align]
[align=center]   if(vecino>=2 && vecino<=3)[/align]
[align=center][/align]
[align=center]     i[f][c]=1[/align]
[align=center][/align]
[align=center]     if (vecino>=4)[/align]
[align=center][/align]
[align=center]     i [f][c]= 0[/align]
[align=center][/align]
[align=center]   if (i [c][f]==0)[/align]
[align=center][/align]
[align=center]   if(vecino==3)[/align]
[align=center][/align]
[align=center]   i [f][c]=1[/align]
[align=center][/align]
[align=center]   else [/align]
[align=center][/align]
[align=center]   i [f][c]=0[/align]


En java:
Código:
[align=center][/align]
[align=center]private static void  reglas (int [][] mat){[/align]
[align=center][/align]
[align=center]  [/align]
[align=center][/align]
[align=center]  if (mat[i][j]==1)[/align]
[align=center][/align]
[align=center]  {[/align]
[align=center][/align]
[align=center]  if (vecino<=1)[/align]
[align=center][/align]
[align=center]    {[/align]
[align=center][/align]
[align=center]     mat[i][j]=0;[/align]
[align=center][/align]
[align=center]    }[/align]
[align=center][/align]
[align=center]  if (vecino>=2 && vecino<=3)[/align]
[align=center][/align]
[align=center]    {[/align]
[align=center][/align]
[align=center]     mat[i][j]=1;[/align]
[align=center][/align]
[align=center]    }[/align]
[align=center][/align]
[align=center]     if (vecino>=4)[/align]
[align=center][/align]
[align=center]                    {[/align]
[align=center][/align]
[align=center]                     mat[i][j]=0;[/align]
[align=center][/align]
[align=center]                    }[/align]
[align=center][/align]
[align=center]  }[/align]
[align=center][/align]
[align=center]  if (mat[i][j]==0)[/align]
[align=center][/align]
[align=center]  {[/align]
[align=center][/align]
[align=center]  if (vecino==3)[/align]
[align=center][/align]
[align=center]    {[/align]
[align=center][/align]
[align=center]  mat[i][j]=1;[/align]
[align=center][/align]
[align=center]    }[/align]
[align=center][/align]
[align=center]    else[/align]
[align=center][/align]
[align=center]     {[/align]
[align=center][/align]
[align=center]       mat[i][j]=0;[/align]
[align=center][/align]
[align=center]     }[/align]
[align=center][/align]
[align=center]  }[/align]
[align=center][/align]
[align=center]    }[/align]


VOLVER A IMPRIMIR
El ultimo paso por así decirlo, es volver a imprimir toda la matriz pero con los nuevos valores según sea el caso, cabe decir que todo este código debe de estar dentro de un ciclo para que se ejecute automáticamente.

En python:

Código:
[align=center]for f in range(10) :[/align]
[align=center][/align]
[align=center]   for c in range (10) :[/align]
[align=center][/align]
[align=center]       if (i[f][c]==0)[/align]
[align=center][/align]
[align=center]       print ("0")[/align]
[align=center][/align]
[align=center]       else[/align]
[align=center][/align]
[align=center]       print ("1")[/align]


En java:

Código:
[align=center]private static void  imprimir2 (int [][] mat){[/align]
[align=center][/align]
[align=center]  [/align]
[align=center][/align]
[align=center]  for (i=0;i<10;i++)[/align]
[align=center][/align]
[align=center]  {[/align]
[align=center][/align]
[align=center]for (j=0;j<10;j++)[/align]
[align=center][/align]
[align=center]   {[/align]
[align=center][/align]
[align=center] if (mat[i][j]==0)[/align]
[align=center][/align]
[align=center]  System.out.println ("0");[/align]
[align=center][/align]
[align=center]  }[/align]
[align=center][/align]
[align=center]  else[/align]
[align=center][/align]
[align=center]  {[/align]
[align=center][/align]
[align=center]  System.out.println("1");[/align]
[align=center][/align]
[align=center]  }[/align]
[align=center][/align]
[align=center]    }[/align]
[align=center][/align]
[align=center][/align]
[align=center][/align]
[align=center][/align]
[align=center]  }[/align]
[align=center][/align]
[align=center]  for (i=0;i<10;i++)[/align]
[align=center][/align]
[align=center]  {[/align]
[align=center][/align]
[align=center]        for (j=0;j<10;j++)[/align]
[align=center][/align]
[align=center]        {[/align]
[align=center][/align]
[align=center]        mat[i][j]=mat[i][j];[/align]
[align=center][/align]
[align=center]        }[/align]
[align=center][/align]
[align=center]      [/align]
[align=center][/align]
[align=center]  }[/align]
[align=center][/align]



  CAPTURAS DE PANTALLA:
[Imagen: Captura+de+pantalla+de+2013-08-28+22:43:06.png]

[Imagen: Captura+de+pantalla+de+2013-08-28+22:48:56.png]
 

CONCLUSIÓN
Podemos concluir que el juego de la vida es un algoritmo celular interesante de programar, ya que desarolla mucha lógica , en lo personal a mi me ayudo a practicar mucho mas el lenguaje de python y me di cuenta que es un lenguaje "fácil" y comprime mucho el código, lo cual creo que es excelente.
Si te Agrado o Sirvió El Tema Dame Reputación Lengua




Posibles temas similares...
Tema Autor Respuestas Vistas Último mensaje
  APORTE JAVA: Domine el lenguaje líder en aplicaciones cliente servidor - User Kevin Alfonso 1 568 04-08-2016, 10:59 PM
Último mensaje: asanbus
  Flappy Bird (Java) sigefi 7 1,825 14-10-2014, 08:09 PM
Último mensaje: Basdower
  Tutorial Introducción curso [JAVA] Nafko 0 424 13-06-2014, 01:50 AM
Último mensaje: Nafko



Usuarios navegando en este tema:
1 invitado(s)


Forum software by © MyBB Theme © Kevinex & iAndrew 2018