No me va el enlace que has puesto, bueno mañana lo reviso.
// Nombre: El juego de la vida// Versión: 0.2-unix// Autor: user170294// E-mail: [email protected]#include <cstdlib> // rand() y srand()#include <ctime> // time()#include <iostream>using namespace std;#define ALTO 80 // Alto del tablero#define ANCHO 200 // Ancho del tablero#define VIVA 'O' // Celula VIVA#define MUERTA ' ' // Celula MUERTA#define PROBABILIDAD 10 // De cada X celulas 1 estará viva.void EntornoVaciar(char entorno[ALTO][ANCHO]); // Llena el entorno de celulas muertasvoid EntornoImprimir(char entorno[ALTO][ANCHO]); // Imprime el entorno en pantallavoid EntornoEscribir(char entorno[ALTO][ANCHO]); // Escribe un entorno a manovoid EntornoAleatorio(char entorno[ALTO][ANCHO], int probabilidad); // Genera una población aleatoriavoid EntornoEvolucionar(char entorno1[ALTO][ANCHO], char entorno2[ALTO][ANCHO]); // Evoluciona una población a la siguiente generaciónint main(void){ char entorno1[ALTO][ANCHO]; // Son necesarios dos tablas, una para mostrar y otra para evolucionar char entorno2[ALTO][ANCHO]; bool scrFlip = false; // Variable de la que dependerá mostrar un entorno u otro. int generacion = 0; // Variable que almacena la generación actual srand(time(NULL)); // Inicializamos el generador de números aleatorios system("clear"); // Limpiamos la pantalla antes de imprimir nada cout << "###########################" << endl; cout << "# El juego de la vida #" << endl; cout << "###########################" << endl; cout << "\t[>] Versión: 0.2-unix\n\t[>] Autor: user170294\n\t[>] E-mail: [email protected]\n\n"; cout << "*** Pulsa Enter para generar una población aleatoria ***"; cin.get(); EntornoVaciar(entorno1); // Vaciamos el entorno1 EntornoAleatorio(entorno1, PROBABILIDAD); // Generamos una poblacion aleatoria en entorno1 while(true) { system("clear"); cout << "[ Generación: " << generacion << " ]" << endl; if(!scrFlip) { // Es necesario utilizar este efecto para el correcto funcionamiento de las reglas EntornoImprimir(entorno1); EntornoVaciar(entorno2); EntornoEvolucionar(entorno1, entorno2); scrFlip = true; } else { EntornoImprimir(entorno2); EntornoVaciar(entorno1); EntornoEvolucionar(entorno2, entorno1); scrFlip = false; } system("sleep 0.1"); // Hacer una pausa de 0.1s para que no valla demasiado rápido generacion++; }}void EntornoVaciar(char entorno[ALTO][ANCHO]) { for(int i=0;i<ALTO;i++) for(int j=0;j<ANCHO;j++) entorno[i][j]=MUERTA;}void EntornoImprimir(char entorno[ALTO][ANCHO]) { for(int i=0;i<ALTO;i++){ for(int j=0;j<ANCHO;j++) cout<<entorno[i][j]; cout<<endl; }}void EntornoEscribir(char entorno[ALTO][ANCHO]) { int aux; for(int i=0;i<ALTO;i++) for(int j=0;j<ANCHO;j++){ aux=0; cout<<"celda["<<i<<"|"<<j<<"]: "; cin>>aux; entorno[i][j]=(aux==0)?MUERTA:VIVA; }}void EntornoAleatorio(char entorno[ALTO][ANCHO], int probabilidad) { int aux; for(int i=0;i<ALTO;i++) for(int j=0;j<ANCHO;j++){ aux=rand()%probabilidad; entorno[i][j]=(aux==0)?VIVA:MUERTA; }}void EntornoEvolucionar(char entorno1[ALTO][ANCHO], char entorno2[ALTO][ANCHO]) { int n; //numero de celdas alrededor for(int i=0;i<ALTO;i++){ for(int j=0;j<ANCHO;j++){ n=0; ((i-1)<0||(j-1)<0)?:(MUERTA==entorno1[i-1][j-1])?:n++; //arriba-izquierda ((i-1)<0)?:(MUERTA==entorno1[i-1][j])?:n++; //arriba ((i-1)<0||(j+1)>=ANCHO)?:(MUERTA==entorno1[i-1][j+1])?:n++; //arriba-derecha ((j-1)<0)?:(MUERTA==entorno1[i][j-1])?:n++; //izquierda ((j+1)>=ANCHO)?:(MUERTA==entorno1[i][j+1])?:n++; //derecha ((i+1)>=ALTO||(j-1)<0)?:(MUERTA==entorno1[i+1][j-1])?:n++; //abajo-izquierda ((i+1)>=ALTO)?:(MUERTA==entorno1[i+1][j])?:n++; //abajo ((i+1)>=ALTO||(j+1)>=ANCHO)?:(MUERTA==entorno1[i+1][j+1])?:n++; //abajo-derecha if(VIVA==entorno1[i][j]){ if(n<2) entorno2[i][j]=MUERTA; if(n==2||n==3) entorno2[i][j]=VIVA; if(n>3) entorno2[i][j]=MUERTA; } if(MUERTA==entorno1[i][j]) if(n==3) entorno2[i][j]=VIVA; } }}