jueves, 29 de agosto de 2013

Juego de la vida

DESCRIPCIÓN
El juego de la vida es el mejor ejemplo de un autómata celular, diseñado por el matemático británico John Horton Conway en 1970.
El juego de la vida es en realidad un juego de cero jugadores, lo que quiere decir que su evolución está determinada por el estado inicial y no necesita ninguna entrada de datos posterior. El "tablero de juego" es una malla formada por cuadrados ("células") que se extiende por el infinito en todas las direcciones. Cada célula tiene 8 células vecinas, que son las que están próximas a ella, incluso en las diagonales. Las células tienen dos estados: están "vivas" o "muertas" (o "encendidas" y "apagadas"). El estado de la malla evoluciona a lo largo de unidades de tiempo discretas (se podría decir que por turnos). El estado de todas las células se tiene en cuenta para calcular el estado de las mismas al turno siguiente. Todas las células se actualizan simultáneamente
REGLAS
Las transiciones dependen del número de células vecinas vivas:
Una célula muerta con exactamente 3 células vecinas vivas "nace" (al turno siguiente estará viva).

Una célula viva con 2 ó 3 células vecinas vivas sigue viva, en otro caso muere o permanece muerta (por "soledad" o "superpoblación").

PATRONES



VÍDEO DE COMO SE JUEGA

CÓDIGO


public static void main(String[] args) {
 

System.out.println("inserte los datos");
int matriz[][] = new int[3][3];

llenar(matriz);
mostrar(matriz);
               //metods
       contar_vecinos(matriz);
       reglas(matriz);
       imprimir2(matriz);
   } 

//EL METODO EN JAVA PARA LLENAR
   private static void llenar(int[][] mat) {
      for ( i = 0; i < mat.length; i++) {
           for ( j = 0; j < mat.length; j++) {
               mat[i][j] = teclado.nextInt();
           }
       }
   }
//EL METODO EN JAVA PARA MOSTRAR
   private static void mostrar(int[][] mat) {
       for ( i = 0; i < mat.length; i++) {
           for ( j = 0; j < mat.length; j++) {
               System.out.print(mat[i][j] + " ");
           }
           System.out.println();
       }
   }   
   
if (mat[i][j-1]==1)
   {
   vecino=vecino+1;
   }
   if (mat[i][j+1]==1)//vecino derecha
                    {
                    vecino=vecino+1;
                    }
     if (mat[i-1][j]==1)//vecino arriba
                    {
                    vecino=vecino+1;
                    }
                    if (mat[i+1][j]==1)//vecino  abajo
                    { 
                    vecino=vecino+1;
                    }
     if (mat[i-1][j-1]==1)//vecino arriba izquierda
                    {
                    vecino=vecino+1;
                    }
         if (mat[i-1][j+1]==1)//vecino arriba  derecha
                    {
                    vecino=vecino+1;
                    }
          if (mat[i+1][j-1]==1)//vecino arriba izquierda
                    {
                    vecino=vecino+1;
                    }
                  if (mat[i+1][j+1]==1)//vecino  abajo derecha
                    {
                    vecino=vecino+1;
                    }
   }
  
   }
private static void  reglas (int [][] mat){
   
   if (mat[i][j]==1)
   {
   if (vecino<=1)
     {
      mat[i][j]=0;
     }
   if (vecino>=2 && vecino<=3)
     {
      mat[i][j]=1;
     }
      if (vecino>=4)
                     {
                      mat[i][j]=0;
                     }
   }
   if (mat[i][j]==0)
   {
   if (vecino==3)
     {
   mat[i][j]=1;
     }
     else
      {
        mat[i][j]=0;
      }
   }
     }
private static void  imprimir2 (int [][] mat){
   
   for (i=0;i<10;i++)
   {
 for (j=0;j<10;j++)
    {
  if (mat[i][j]==0)
  System.out.println ("0");
   }
   else
   {
    System.out.println("1");
   }
     }

   }
   for (i=0;i<10;i++)
   {
         for (j=0;j<10;j++)
         {
         mat[i][j]=mat[i][j];
         }
       
   }  
Read more »