#include <iostream>
#include <time.h>
#include <windows.h>
using namespace std;
//Inizio Programma
int main(){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),5);
cout<<"Gioco Life Sviluppato Da Favaro Matteo"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),6);
//Dichiarazione Variabili Riga E Colonna
int r=0,c=0,scelta,attive=0,k=0,j=0,n=0,scelt,cont=0,o=0,g=0,p=0;
//Richiesta Riga E Colonna
do{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);
cout<<endl<<"Inserisci grandezza matrice: ";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),6);
cin>>r;
}while(r<3);
//Imposto riga=colonna
c=r;
//Dichiaro Le Due Matrici: Appoggio e Life
int life[r][c];
int lifea[r+2][c+2];
//Riempio la matrice Life di Zeri (0)
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
life[i][j] = 0;
}
}
//Riempio la matrice (appoggio) lifea di Zeri (0)
for(int i=0;i<r+2;i++){
for(int j=0;j<c+2;j++){
lifea[i][j] = 0;
}
}
qui:
//Faccio scegliere la modalità di riempimento della matrice
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);
cout<<"Scegli in che modo svolgere il gioco:"<<endl;
cout<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),3);
cout<<"1)Inserimento utente"<<endl;
cout<<"2)Random"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),6);
cin>>scelta;
//Inizio Il Costrutto Switch
switch(scelta){
//Inserimento Manuale Della Popolazione
case 1:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);
cout<<"I valori concessi da inserire sono: "<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),3);
cout<<"Vuoto: 0"<<endl;
cout<<"Pieno: 1"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),6);
cout<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);
cout<<"Quante celle vuoi rendere attive? "<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),6);
cin>>attive;
for(int i=0;i<attive;i++){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),3);
cout<<"Riga: ";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),6);
cin>>k;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),3);
cout<<"Colonna: ";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),6);
cin>>j;
life[k][j] = 1;
}
//Copio La Matrice life In Quella D'appoggio
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
lifea[i+1][j+1] = life[i][j];
}
}
break;
//Inserimento Random Della Popolazione
case 2:
srand(time(NULL));
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
n = rand ()% 2+0;
life[i][j] = n;
}
}
//copio La Matrice life In Quella D'appoggio
for(int i=0;i<r;i++){
for(int j=0;j<c;j++){
lifea[i+1][j+1] = life[i][j];
}
}
break;
default:
system("cls");
goto qui;
}
//Modalità di avanzamento del gioco
qua:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);
cout<<"Modalita\' di evoluzione disponibili:"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),3);
cout<<"1) Step-By-Step"<<endl;
cout<<"2) Forever"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),6);
cin>>scelt;
int test=0;
//Inizio Costrutto Switch
switch(scelt){
case 1:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);
cout<<"Quante generazioni vuoi visualizzare?"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),6);
cin>>g;
//Inizio Costrutto Do-While
do{
if(test < 1){
cout<<"Generazione Iniziale"<<endl;
for(int i=1;i<c+1;i++){
for(int j=1;j<r+1;j++){
cout<<" "<<lifea[i][j];
}
cout<<endl;
}
test++;
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);
cout<<"Generazione "<<o+1<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),6);
//Inizio Controllo
for(int i=0;i<c;i++){
for(int j=0;j<r;j++){
if(lifea[i][j] == 1){
if(lifea[i-1][j-1]==1){cont++;}
if(lifea[i+1][j+1]==1){cont++;}
if(lifea[i][j-1]==1){cont++;}
if(lifea[i-1][j]==1){cont++;}
if(lifea[i][j+1]==1){cont++;}
if(lifea[i+1][j]==1){cont++;}
if(lifea[i-1][j+1]==1){cont++;}
if(lifea[i+1][j-1]==1){cont++;}
}
if(lifea[i][j] == 1 && cont < 2)lifea[i][j] = 0;
else if (life[i][j] == 1 && cont > 3)lifea[i][j] = 0;
else if (life[i][j] == 1 && (cont == 2 || cont == 3))lifea[i][j] = 1;
else if (life[i][j] == 0 && cont == 3)lifea[i][j] = 1;
cout<<" "<<lifea[i][j];
}
cout<<endl;
}
system("pause >null");
o++;
}while(o < g);
//Fine Controllo
break;
case 2:
if(test < 1){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);
cout<<"Generazione Iniziale"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
for(int i=1;i<c+1;i++){
for(int j=1;j<r+1;j++){
cout<<" "<<lifea[i][j];
}
cout<<endl;
}
test++;
}
//Inizio Controllo
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);
cout<<"Quante generazioni vuoi visualizzare?"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),6);
cin>>p;
//Inizio Costrutto Do-While
do{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),2);
cout<<"Generazione "<<o+1<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),6);
//Inizio Controllo
for(int i=0;i<c;i++){
for(int j=0;j<r;j++){
if(lifea[i][j] == 1){
if(lifea[i-1][j-1]==1){cont++;}
if(lifea[i+1][j+1]==1){cont++;}
if(lifea[i][j-1]==1){cont++;}
if(lifea[i-1][j]==1){cont++;}
if(lifea[i][j+1]==1){cont++;}
if(lifea[i+1][j]==1){cont++;}
if(lifea[i-1][j+1]==1){cont++;}
if(lifea[i+1][j-1]==1){cont++;}
}
if(lifea[i][j] == 1 && cont < 2)lifea[i][j] = 0;
else if (life[i][j] == 1 && cont > 3)lifea[i][j] = 0;
else if (life[i][j] == 1 && (cont == 2 || cont == 3))lifea[i][j] = 1;
else if (life[i][j] == 0 && cont == 3)lifea[i][j] = 1;
cout<<" "<<lifea[i][j];
}
cout<<endl;
}
Sleep(2000);
o++;
}while(o < p);
//Fine Controllo
break;
default:
system("cls");
goto qua;
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
system("pause");
return 0;
}