El blog donde subimos las actividades del equipo de clase y laboratorio es el siguiente: labsist.blogspot.mx
Sistemas Adaptativos
Víctor Ríos
martes, 15 de octubre de 2013
viernes, 30 de agosto de 2013
Juego de la Vida
Juego de la Vida
Descripción
Diseñado en 1970 por John Conway, el juego de la vida es uno de los autómatas celulares más conocidos, que ha llamado la atención de los expertos, debido al comportamiento complejo de las células, derivado de unas sencillas reglas.No tiene jugadores reales, el estado inicial determina los estados posteriores a partir de las siguientes reglas:
- De estar muerta, una célula con exactamente 3 células vecinas vivas, nace.
- Una célula viva con 2 o 3 células vecinas vivas se mantiene el siguiente estado, de lo contrario muere, por soledad o por superpoblación.
Código
#include<stdio.h>
#include<time.h>
main(){
int maxi,maxj, i, j, vivas;
printf("Numero de columnas: "); scanf("%d",&maxj);
printf("Numero de filas: "); scanf("%d",&maxi);
int m[maxi][maxj],n[maxi][maxj]; //Declara los dos arreglos
srand(clock()); //semilla
for(i=0;i<maxi;i++){
for(j=0;j<maxj;j++){
m[i][j]=rand()%2; //valores random
}
}
while(1){ //ciclo de la vida
system("cls"); //limpia la pantalla
for(i=0;i<maxi;i++){ // ciclos for que imprimen la matriz
for(j=0;j<maxj;j++){
if(m[i][j]==1) printf("*"); //* si está vivo
else printf(" "); //" " si está muerto
}
printf("\n");
}
usleep(50000); //detiene la ejecución
for(i=0;i<maxi;i++){ // ciclos que recorren la matriz
for(j=0;j<maxj;j++){ // para revisar los vecinos
vivas=0; //se le sumará a vivas si el vecino está vivo
if(i==0&&j==0){ //comparaciones para casos especiales
if(m[i][j+1]==1) vivas++;
if(m[i+1][j]==1) vivas++;
if(m[i+1][j+1]==1) vivas++;
}else{
if(i==maxi&&j==maxj){ //esquina inf-der
if(m[i-1][j-1]==1) vivas++;
if(m[i-1][j]==1) vivas++;
if(m[i][j-1]==1) vivas++;
}else{
if(i==maxi&&j==0){ //esquina
if(m[i-1][j]==1) vivas++;
if(m[i-1][j+1]==1) vivas++;
if(m[i][j+1]==1) vivas++;
}else{
if(i==0&&j==maxj){
if(m[i][j-1]==1) vivas++;
if(m[i+1][j-1]==1) vivas++;
if(m[i+1][j]==1) vivas++;
}else{
if(i==0){
if(m[i][j-1]==1) vivas++;
if(m[i][j+1]==1) vivas++;
if(m[i+1][j-1]==1) vivas++;
if(m[i+1][j]==1) vivas++;
if(m[i+1][j+1]==1) vivas++;
}else{
if(j==0){
if(m[i-1][j]==1) vivas++;
if(m[i-1][j+1]==1) vivas++;
if(m[i][j+1]==1) vivas++;
if(m[i+1][j]==1) vivas++;
if(m[i+1][j+1]==1) vivas++;
}else{
if(i==maxi){
if(m[i-1][j-1]==1) vivas++;
if(m[i-1][j]==1) vivas++;
if(m[i-1][j+1]==1) vivas++;
if(m[i][j-1]==1) vivas++;
if(m[i][j+1]==1) vivas++;
}else{
if(j==maxj){
if(m[i-1][j-1]==1) vivas++;
if(m[i-1][j]==1) vivas++;
if(m[i][j-1]==1) vivas++;
if(m[i+1][j-1]==1) vivas++;
if(m[i+1][j]==1) vivas++;
}else{
if(m[i-1][j-1]==1) vivas++;
if(m[i-1][j]==1) vivas++;
if(m[i-1][j+1]==1) vivas++;
if(m[i][j-1]==1) vivas++;
if(m[i][j+1]==1) vivas++;
if(m[i+1][j-1]==1) vivas++;
if(m[i+1][j]==1) vivas++;
if(m[i+1][j+1]==1) vivas++;
}
}
}
}
}
}
}
} //fin del chequeo, aplica las reglas
if(m[i][j]==0){ //si está muerta...
if(vivas==3) n[i][j]=1;
else n[i][j]=0;
}else{ //si está viva...
if(vivas<2||vivas>3){ n[i][j]=0;}
else {n[i][j]=1;}
}
}
} //utilizó un buffer para modificar los datos, hay que depositarlos
for(i=0;i<maxi;i++){
for(j=0;j<maxj;j++){
m[i][j]=n[i][j];
}
}
}
}
Imágenes Juego de la Vida
Conclusión
La lógica del juego de la vida es simple, con unas pocas reglas se logran comportamientos interesantes para toda la matriz de células. Los resultados muestran comportamientos que logran hacer "eterna" la "vida" de las células. Muchos patrones se repiten y hacen vistoso y entretenido verlos.
Suscribirse a:
Comentarios (Atom)



