viernes, 30 de agosto de 2013

El Juego De La Vida

Autor: Victor Manuel Martinez Moreno      1522026              Jueves M1

Introducción
Esta tarea es sobre "El juego de la vida de John Conway" en el que hay que programar una matriz de NxN y darle valores de de 0 y 1 donde tendremos que tomar un valor de la matriz y examinar los valores que se encuentran alrededor de dicho valor y con unas condiciones podremos determinar si el valor cambia a 0 o 1.


Código:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main (void)                                       //inicio del programa
{
    
        int Matriz[100][100],I,J,suma,Matriz_2[100][100],N,M;
  char opcion[2];
  
  printf("Cuantas filas quieres para la Matriz?\n");   // Se introduzen la cantidad de filas para la matriz
        scanf("%d",&N);
      
        printf("Cuantas columnas quieres para la Matriz? \n");  // Se introduzen la cantidad de columnas para la matriz
        scanf("%d",&M);
         
       
      
        srand(time(NULL));                                     //funcion para insertar valores random en la matriz
     for(I=0;I<N;I++)
      {
      for(J=0;J<M;J++)
       {
        Matriz[I][J]=rand() % 2;
   
      }
      }
      
      
      printf("El resultado de la matriz 1 es \n\n");     //imprecion de la matriz generada con valores random            
         for(I=0;I<N;I++){                          //inicio de la imprecion de matriz
              for(J=0;J<M;J++) {
                if(Matriz[I][J]== 1){
                      printf("*     ");
                } else {   
                      printf("      ");
                }
              }
      
           printf("\n\n");
     
      }  
          printf("\n");
          
          
    do{         //inicio del ciclo para imprimir iteraiones
       
    for(I=0;I<N;I++) {
        for(J=0;J<M;J++) {
           suma=0;        
           if(I==0 && J==0){                       //esquina superior izquierda
            if(Matriz[I][J+1] == 1) suma++;
            if(Matriz[I+1][J] == 1) suma++;
            if(Matriz[I+1][J+1] == 1) suma++;
           }else{

            if(I==0  && J==M ){                     //esquina superior derecha
             if(Matriz[I-1][J] == 1) suma++;
             if(Matriz[I-1][J-1] == 1) suma++;
             if(Matriz[I][J-1] == 1) suma++;
            }else{
 
            if(I==N && J==0){                        //esquina inferiro izquierda
             if(Matriz[I-1][J] == 1) suma++;
             if(Matriz[I-1][J+1] == 1) suma++;
             if(Matriz[I][J+1] == 1) suma++; 
         }
 
            else{
 
            if(I==N && J==M){                        //esquina inferiro derecha 
             if(Matriz[I-1][J-1] == 1) suma++;
             if(Matriz[I-1][J] == 1) suma++;
             if(Matriz[I][J-1] == 1) suma++; 
         }
 
            else{
 
            if(I==0){                              //orilla superior
             if(Matriz[I][J-1] == 1) suma++;
             if(Matriz[I][J+1] == 1) suma++;
             if(Matriz[I+1][J-1] == 1) suma++; 
             if(Matriz[I+1][J] == 1) suma++;
             if(Matriz[I+1][J+1] == 1) suma++;
         }
 
            else{
 
            if(I==N){                        // orilla inferior
             if(Matriz[I-1][J-1] == 1) suma++;
             if(Matriz[I-1][J] == 1) suma++;
              if(Matriz[I-1][J+1] == 1) suma++; 
             if(Matriz[I][J-1] == 1) suma++;
             if(Matriz[I][J+1] == 1) suma++;
         }
 
            else{
 
            if(J==0){                        // orilla izquierda 
             if(Matriz[I-1][J] == 1) suma++;
             if(Matriz[I-1][J+1] == 1) suma++;
             if(Matriz[I][J+1] == 1) suma++;
             if(Matriz[I+1][J] == 1) suma++;
             if(Matriz[I+1][J+1] == 1) suma++;
         }
 
            else{
 
            if(J==M){                        // orilla derecha
             if(Matriz[I-1][J-1] == 1) suma++;
             if(Matriz[I-1][J] == 1) suma++;
             if(Matriz[I][J-1] == 1) suma++;
             if(Matriz[I+1][J-1] == 1) suma++; 
             if(Matriz[I+1][J] == 1) suma++;
         }
 
            else{
                               //centro
             if(Matriz[I-1][J-1] == 1) suma++;    
             if(Matriz[I-1][J] == 1) suma++;
             if(Matriz[I-1][J+1] == 1) suma++;
             if(Matriz[I][J-1] == 1) suma++;
             if(Matriz[I][J+1] == 1) suma++;
             if(Matriz[I+1][J-1] == 1) suma++;
             if(Matriz[I+1][J] == 1) suma++;
             if(Matriz[I+1][J+1] == 1) suma++; 
 
            }
            }
            }
            }
            } 
            }
            }
            }
            
            switch(Matriz[I][J]){
   case 1:
    switch(suma){
     case 2:
     Matriz_2[I][J] = 1; 
     break;
     
     case 3:
     Matriz_2[I][J] = 1;
     break;
     default:
     Matriz_2[I][J] = 0; 
      
    }
    break;
    case 0:
    switch(suma){
     
     
     case 3:
     Matriz_2[I][J] = 1;
     break;
     default:
     Matriz_2[I][J] = 0; 
      
    }
    break;
       }
        }
    }
    
      printf("El resultado de la matriz es \n\n");      
      for(I=0;I<N;I++){                          //impresion de iteracion
           for(J=0;J<M;J++){
   
               if(Matriz_2[I][J]== 1){
                       
                printf("*     ");
               }
                  else{
     
                       printf("      ");
                 }
           }
             printf("\n\n");
      }
      
    printf("\n");
      
      
       
      for(I=0;I<N;I++)
      {
      for(J=0;J<M;J++)
      {
       Matriz[I][J]=Matriz_2[I][J];
       }
       }
      
      
      
      printf("¿Desea probar otra vez? si(Y)/no(N) \n");     //fin del ciclo para imprimir otra interacion
      scanf("%s",&opcion); 
      }while(!strcmp(opcion,"Y") || !strcmp(opcion,"y"));
         
    
return 0;
}

Capturas de pantalla:










Conclusión:

Al programar este juego pude poner a prueba mi lógica y así también poder mejorarla; fue un reto el programarlo, al principio me costo entender la lógica pero después de leer en varios sitios web pude comprenderla, donde batalle mas fue en la logica de las condiciones para examinar los valores que se encontraban al rededor pero con varias pruebas pude logarlo y también  tenia planeado hacerlo en Python pero como apenas estoy empezando a aprender a programar en ese lenguaje y por falta de tiempo decidí hacerlo en C ya que se me facilita mas, así que pude reforzar mis conocimientos en C.