Skip to content

Instantly share code, notes, and snippets.

@JVero
Created July 26, 2018 04:00
Show Gist options
  • Save JVero/b44c1392c914acdb6e31bdf24bb731b8 to your computer and use it in GitHub Desktop.
Save JVero/b44c1392c914acdb6e31bdf24bb731b8 to your computer and use it in GitHub Desktop.
#include<iostream>
struct GameOfLife {
static const int xdim = 10, ydim = 10;
bool grid[xdim][ydim];
int turns;
int getNeighbors(int x, int y) {
if (x == 0) { // Left edge
if (y == 0) // Top Left Corner
return grid[0][1] + grid[1][1] + grid[1][0];
if (y > 0 && y < ydim-1) // Left Edge
return grid[0][y - 1] + grid[0][y + 1] + grid[1][y - 1] + grid[1][y] + grid[1][y + 1];
if (y == 10) // Bottom Left Corner
return grid[0][y - 1] + grid[1][y - 1] + grid[0][y];
}
else if (x > 0 && x < xdim - 1) {// Not Left Edge
if (y == 0) // Top Edge
return grid[x - 1][0] + grid[x - 1][1] + grid[x][1] + grid[x + 1][1] + grid[x + 1][0];
if (y > 0 && y < ydim - 1) // middle of grid
return grid[x - 1][y - 1] + grid[x - 1][y] + grid[x - 1][y + 1] + grid[x][y - 1] + grid[x][y + 1] + grid[x + 1][y - 1] + grid[x + 1][y] + grid[x + 1][y + 1];
if (y == ydim-1)
return grid[x - 1][ydim-1] + grid[x - 1][ydim-2] + grid[x][ydim-2] + grid[x + 1][ydim-2] + grid[x + 1][ydim-1];
}
else if (x == xdim-1) { // Right edge
if (y == 0) // Top Right Corner
return grid[xdim-1][1] + grid[xdim - 2][1] + grid[xdim - 2][0];
if (y > 0 && y < ydim - 1) // Right Edge
return grid[xdim - 1][y - 1] + grid[xdim - 1][y + 1] + grid[xdim - 2][y - 1] + grid[xdim - 2][y] + grid[xdim - 2][y + 1];
if (y == 10) // Bottom Right Corner
return grid[xdim - 2][y - 1] + grid[xdim - 2][y - 1] + grid[xdim - 1][y];
}
return 0;
}
void takeTurn() {
auto new_grid = grid;
for (auto xi=0; xi < GameOfLife::xdim;xi++) {
for (auto yi=0; yi < GameOfLife::ydim; yi++){
int numNeighbors = getNeighbors(xi, yi);
if (numNeighbors < 2) {
new_grid[xi][yi] = 0;
} else if (numNeighbors > 3 && grid[xi][yi]) {
new_grid[xi][yi] = 0;
} else if (numNeighbors == 3) {
new_grid[xi][yi] = 1;
}
}
}
for (auto xi=0; xi<GameOfLife::xdim;xi++){
for (auto yi=0; yi<GameOfLife::ydim;yi++)
grid[xi][yi] = new_grid[xi][yi];
}
};
void print() {
for (int i=0; i < GameOfLife::xdim; i++) {
for (int j=0; j < GameOfLife::ydim; j++){
std::cout << grid[i][j] << " ";
}
std::cout << "\n";
}
}
GameOfLife(){
for (auto xi=0; xi<GameOfLife::xdim;xi++){
for (auto yi=0; yi<GameOfLife::ydim;yi++)
grid[xi][yi] = 0;
}
grid[4][4] = 1;
grid[4][5] = 1;
grid[5][4] = 1;
grid[5][6] = 1;
grid[5][7] = 1;
int turns = 0;
};
~GameOfLife() {};
};
int main(int argc, char ** argv) {
auto game = GameOfLife();
game.print();
for (int i=0; i < 5; i++) {
std::cout << "\n\n";
game.takeTurn();
game.print(); // Should overload << operator
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment