28-09-2016, 04:03 PM
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:
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.