#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
//int kolumny;
//int wiersze;
/*
cout << "podaj ilosc kolumn: " << endl;
cin >> kolumny;
cout << "podaj ilosc wierszy: " << endl;
cin >> wiersze;
string ** plansza = new string *[wiersze];
for (int i = 0; i < wiersze; i++)
{
plansza[i] = new string[kolumny];
}
*/
//ilość wierszy: 12
//ilość kolumn: 20
/*
....................
....................
....................
....................
.......X.XX.........
.......XXX..........
........X...........
....................
....................
....................
....................
....................
*/
string plansza[12];
fstream plik;
plik.open("gra.txt");
for (int i = 0; i < 12; i++)
{
plik >> plansza[i];
//cout << plansza[i] << endl;
}
string pokolenieprzed[12];
string pokoleniepo[12][20];
for (int i = 0; i < 12; i++)
{
pokolenieprzed[i]=plansza[i];
//cout << pokolenieprzed[i] << endl;
}
for (int i = 0; i < 37; i++)
{
cout << "Pokolenie " << i + 1 << ":" << endl;
for (int j = 0; j < 12; j++) cout << pokolenieprzed[j]<<endl;
for (int j = 0; j < 12; j++)
{
for (int k = 0; k < 20; k++)
{
int licznikzyw = 0;
//PIONOWA
//góra
if (j - 1 < 0) { if (pokolenieprzed[11][k] == 'X') licznikzyw++; }
else { if (pokolenieprzed[j - 1][k] == 'X') licznikzyw++; }
//cout << licznikzyw << " ";
//dół
if (j + 1 == 12) { if (pokolenieprzed[0][k] == 'X') licznikzyw++; }
else { if (pokolenieprzed[j + 1][k] == 'X') licznikzyw++; }
//cout << licznikzyw << " ";
//POZIOMA
//lewa
if (k - 1 < 0) { if (pokolenieprzed[j][19] == 'X') licznikzyw++; }
else { if (pokolenieprzed[j][k - 1] == 'X') licznikzyw++; }
//cout << licznikzyw << " ";
//prawa
if (k + 1 == 20) { if (pokolenieprzed[j][0] == 'X') licznikzyw++; }
else { if (pokolenieprzed[j][k + 1] == 'X') licznikzyw++; }
//cout << licznikzyw << " ";
//SKOSY
//góra-lewa
if (j - 1 < 0 && k - 1 < 0) { if (pokolenieprzed[11][19] == 'X') licznikzyw++; }
if (j - 1 < 0 && k - 1 >= 0) { if (pokolenieprzed[11][k-1] == 'X') licznikzyw++; }
if (j - 1 >= 0 && k - 1 < 0) { if (pokolenieprzed[j-1][19] == 'X') licznikzyw++; }
if (j - 1 >= 0 && k - 1 >= 0) { if (pokolenieprzed[j-1][k-1] == 'X') licznikzyw++; }
//cout << licznikzyw << " ";
//góra-prawa
if (j - 1 < 0 && k + 1 == 20) { if (pokolenieprzed[11][0] == 'X') licznikzyw++; }
if (j - 1 < 0 && k + 1 < 20) { if (pokolenieprzed[11][k + 1] == 'X') licznikzyw++; }
if (j - 1 >= 0 && k + 1 == 20) { if (pokolenieprzed[j - 1][0] == 'X') licznikzyw++; }
if (j - 1 >= 0 && k + 1 < 20) { if (pokolenieprzed[j - 1][k + 1] == 'X') licznikzyw++; }
//cout << licznikzyw << " ";
//dół-lewa
if (j + 1 == 12 && k - 1 < 0) { if (pokolenieprzed[0][19] == 'X') licznikzyw++; }
if (j + 1 == 12 && k - 1 >= 0) { if (pokolenieprzed[0][k - 1] == 'X') licznikzyw++; }
if (j + 1 < 12 && k - 1 < 0) { if (pokolenieprzed[j + 1][19] == 'X') licznikzyw++; }
if (j + 1 < 12 && k - 1 >= 0) { if (pokolenieprzed[j + 1][k - 1] == 'X') licznikzyw++; }
//cout << licznikzyw << " ";
//dół-prawa
if (j + 1 == 12 && k + 1 == 20) { if (pokolenieprzed[0][0] == 'X') licznikzyw++; }
if (j + 1 == 12 && k + 1 < 20) { if (pokolenieprzed[0][k + 1] == 'X') licznikzyw++; }
if (j + 1 < 12 && k + 1 == 20) { if (pokolenieprzed[j + 1][0] == 'X') licznikzyw++; }
if (j + 1 < 12 && k + 1 < 20) { if (pokolenieprzed[j + 1][k + 1] == 'X') licznikzyw++; }
//cout << licznikzyw << " ";
//PODSUMOWANIE
if (licznikzyw == 3) pokoleniepo[j][k] = 'X';
if (licznikzyw != 3 && licznikzyw != 2) pokoleniepo[j][k] = '.';
}
}
for (int j = 0; j < 12; j++)
{
string linijka;
for (int k = 0; k < 20; k++)
{
linijka = linijka + pokoleniepo[j][k];
}
pokolenieprzed[j] = linijka;
}
}
system("PAUSE");
return 0;
}