View difference between Paste ID: mu4CCTyd and PnT1KLhe
SHOW: | | - or go back to the newest paste.
1
#include <iostream>
2
using namespace std;
3
#define LIVING '#'
4
#define DEAD '_'
5
#define TEMPDEAD 'R'
6
#define TEMPLIVING 'T'
7
#define BOUND '|'
8
#define SIZE 22
9
int mod (int a, int b)
10
{
11
   if(b < 0)
12
     return mod(-a, -b);
13
   int result = a % b;
14
   if(result < 0)
15
     result+=b;
16
   return result;
17
}
18
char *setCell(char grid [], int index, char state)
19
{
20
	grid[mod(index,SIZE)]=state;
21
}
22
char getCell(char grid [], int index)
23
{
24
	return grid[mod(index,SIZE)];
25
}
26
char *initializeGrid(char grid [])
27
{
28
	for(int i = 0; i < SIZE; i++)
29
	{
30
		grid[i] = DEAD;
31
	}
32
	setCell(grid,2,LIVING);
33
	setCell(grid,3,LIVING);
34
	setCell(grid,4,LIVING);
35
	setCell(grid,6,LIVING);
36
	setCell(grid,7,LIVING);
37
	setCell(grid,9,LIVING);
38
	setCell(grid,11,LIVING);
39
	setCell(grid,13,LIVING);
40
	setCell(grid,15,LIVING);
41
	setCell(grid,18,LIVING);
42
	setCell(grid,0,BOUND);
43
	setCell(grid,SIZE-1,BOUND);
44
}
45
46
void endProgram()
47
{
48
	cout << "Press enter to continue..." << endl;
49
	string input = "";
50
	getline(cin,input);//keeps console open
51
}
52
bool checkifgameover(char grid [], char lastgrid [], int gen)
53
{
54
	if(gen>1)
55
	{
56
		for(int i = 0; i < SIZE; i++)
57
		{
58
			if(grid[i]!=lastgrid[i])
59
			{
60
				return false;
61
			}
62
		}
63
		return true;
64
	}
65
}
66
char *updateGrid(char grid [])
67
{
68
	for(int i = 0; i < SIZE; i++)
69
	{
70
		if(getCell(grid,i)==LIVING)
71
		{
72-
			if(getCell(grid,i+1) !=LIVING)
72+
			if(getCell(grid,i+1) !=LIVING & getCell(grid,i+1) !=BOUND)
73
			{
74
				if(getCell(grid,i+2) ==LIVING)
75
				{
76
					setCell(grid,i+1,TEMPLIVING);//WHERE DOES THE POLLEN GO?
77
				}
78
			}
79
			if((getCell(grid,i-1)!=LIVING & getCell(grid,i-1)!=TEMPDEAD ) & (getCell(grid,i+1)!=LIVING & getCell(grid,i-1)!=TEMPDEAD))
80
			{
81
				setCell(grid,i,TEMPDEAD);//DEATH BY LONELINESS
82
			}
83
			if((getCell(grid,i-1)==LIVING | getCell(grid,i-1)==TEMPDEAD) & (getCell(grid,i+1)==LIVING | getCell(grid,i+1)==TEMPDEAD))
84
			{
85
				setCell(grid,i,TEMPDEAD);//DEATH BY OVERPOPULATION
86
			}
87
		}
88
	}
89
	for(int i = 0; i < SIZE; i++)
90
	{
91
		if(getCell(grid,i)==TEMPLIVING)//So no logic is acted on Living cells until after next generation
92
		{
93
			setCell(grid,i,LIVING);
94
		}
95
		if(getCell(grid,i)==TEMPDEAD)
96
		{
97
			setCell(grid,i,DEAD);
98
		}
99
	}
100
}
101
int main()
102
{
103
	char output [SIZE];
104
	char lastoutput [SIZE];
105
	initializeGrid(output);
106
	int generation = 0;
107
	while(!checkifgameover(output,lastoutput,generation))
108
	{
109
		for(int i = 0; i < SIZE; i++)
110
		{
111
			lastoutput[i] = output[i];
112
		}
113
		generation++;
114
		cout<< "Current Gen:" << generation;
115
		for(int i = 0; i < SIZE; i++)
116
		{
117
			cout <<  output[i];
118
		}
119
		cout << endl;
120
		updateGrid(output);
121
	}
122
	endProgram();
123
    return 0;
124
}