-
Notifications
You must be signed in to change notification settings - Fork 0
/
Cell.cs
153 lines (139 loc) · 3.07 KB
/
Cell.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
namespace dotnetcore_gameoflife
{
partial class World
{
protected class Cell
{
public Cell(int row, int column, bool isAlive)
{
Column = column;
Row = row;
IsAlive = isAlive;
}
public int Row { private set; get; }
public int Column { private set; get; }
public bool IsAlive { private set; get; }
private bool[] Neighbours { set; get; }
public int NumberOfNeighbours()
{
Neighbours = new bool[8] { UpperLeft(), Upper(), UpperRight(), Left(), Right(), LowerRight(), Lower(), LowerLeft() };
int numberOfNeighbours = 0;
foreach (bool neighbours in Neighbours)
{
if (neighbours) numberOfNeighbours++;
}
return numberOfNeighbours;
}
bool UpperLeft()
{
if (Row == 1 && Column == 1)
{
return World.Grid[World.RowsUpperBound, World.ColumnsUpperBound];
}
else if (Row == 1)
{
return World.Grid[World.RowsUpperBound, Column - 1];
}
else if (Column == 1)
{
return World.Grid[Row - 1, World.ColumnsUpperBound];
}
return World.Grid[Row - 1, Column - 1];
}
bool Upper()
{
if (Row == 1)
{
return World.Grid[World.RowsUpperBound, Column];
}
return World.Grid[Row - 1, Column];
}
bool UpperRight()
{
if (Row == 1 && Column == World.ColumnsUpperBound)
{
return World.Grid[World.RowsUpperBound, 1];
}
else if (Row == 1)
{
return World.Grid[World.RowsUpperBound, Column + 1];
}
else if (Column == World.ColumnsUpperBound)
{
return World.Grid[Row - 1, 1];
}
return World.Grid[Row - 1, Column + 1];
}
bool Left()
{
if (Column == 1)
{
return World.Grid[Row, World.ColumnsUpperBound];
}
return World.Grid[Row, Column - 1];
}
bool Right()
{
if (Column == World.ColumnsUpperBound)
{
return World.Grid[Row, 1];
}
return World.Grid[Row, Column + 1];
}
bool LowerRight()
{
if (Row == World.RowsUpperBound && Column == World.ColumnsUpperBound)
{
return World.Grid[1, 1];
}
else if (Row == World.RowsUpperBound)
{
return World.Grid[1, Column + 1];
}
else if (Column == World.ColumnsUpperBound)
{
return World.Grid[Row + 1, 1];
}
return World.Grid[Row + 1, Column + 1];
}
bool Lower()
{
if (Row == World.RowsUpperBound)
{
return World.Grid[1, Column];
}
return World.Grid[Row + 1, Column];
}
bool LowerLeft()
{
if (Row == World.RowsUpperBound && Column == 1)
{
return World.Grid[1, World.ColumnsUpperBound];
}
else if (Column == 1)
{
return World.Grid[Row + 1, World.ColumnsUpperBound];
}
else if (Row == World.RowsUpperBound)
{
return World.Grid[1, Column - 1];
}
return World.Grid[Row + 1, Column - 1];
}
public bool Tick()
{
if (!IsAlive && NumberOfNeighbours() == 3)
{
IsAlive = true;
return true;
}
if ((IsAlive && NumberOfNeighbours() == 2) || (IsAlive && NumberOfNeighbours() == 3))
{
return true;
}
IsAlive = false;
return false;
}
}
}
}