diff --git a/Cell.cpp b/Cell.cpp index d361519..ac27455 100644 --- a/Cell.cpp +++ b/Cell.cpp @@ -1,15 +1,51 @@ -#include "headers/Cell.hpp" #include +#include "Headers/Grid.hpp" +#include "Headers/Cell.hpp" + Cell::Cell() { } -Cell::Cell(int i, int j, float x) +Cell::Cell(int i, int j, float size) +{ + x = i; + y = j; + alive = rand() % 2; + shape = sf::RectangleShape(sf::Vector2f(size, size)); + shape.setPosition(i * size, j * size); +} + +void Cell::render() { - shape = sf::RectangleShape(sf::Vector2f(x, x)); - shape.setPosition(i * x, j * x); - shape.setFillColor(sf::Color::White); - shape.setOutlineThickness(1.0f); - shape.setOutlineColor(sf::Color(255, 0, 0)); + if (alive) + { + shape.setFillColor(sf::Color::White); + } + else + { + shape.setFillColor(sf::Color::Black); + } +} + +void Cell::setNeighbors(int _neighbors) +{ + neighbors = _neighbors; +} + +void Cell::update() +{ + + if (neighbors > 3 && alive) + { + alive = false; + } + else if (neighbors == 3 and !alive) + { + alive = true; + } + else if (neighbors < 2 && alive) + { + alive = false; + } } \ No newline at end of file diff --git a/Cell.o b/Cell.o index e83b5d7..7efb523 100644 Binary files a/Cell.o and b/Cell.o differ diff --git a/Grid.cpp b/Grid.cpp index 8d5e4a9..c820d2e 100644 --- a/Grid.cpp +++ b/Grid.cpp @@ -1,8 +1,10 @@ -#include -#include "headers/Cell.hpp" -#include "headers/Grid.hpp" #include + #include +#include + +#include "Headers/Grid.hpp" +#include "Headers/Cell.hpp" Grid::Grid(int _size, int _x, int _y) { @@ -22,11 +24,44 @@ Grid::Grid(int _size, int _x, int _y) Cell *Grid::getCell(int xpos, int ypos) { + if (xpos > x || ypos > y || xpos < 0 || ypos < 0) + { + return nullptr; + } return cells + (y * xpos + ypos); } +void Grid::setNeighbors(int xpos, int ypos) +{ + int neighbors = 0; + for (int i = xpos - 1; i <= xpos + 1; i++) + { + for (int j = ypos - 1; j <= ypos + 1; j++) + { + if (!(xpos == i && ypos == j)) + { + Cell *cell = getCell(i, j); + if (cell) + { + neighbors += cell->alive; + } + } + } + } + + getCell(xpos, ypos)->setNeighbors(neighbors); +} + void Grid::update() { + for (int i = 0; i < x; i++) + { + for (int j = 0; j < y; j++) + { + setNeighbors(i, j); + getCell(i, j)->update(); + } + } } void Grid::render(sf::RenderWindow &window) @@ -35,7 +70,9 @@ void Grid::render(sf::RenderWindow &window) { for (int j = 0; j < y; j++) { - window.draw(cells[i * y + j].shape); + Cell *cell = getCell(i, j); + cell->render(); + window.draw(cell->shape); } } } \ No newline at end of file diff --git a/Grid.o b/Grid.o index dd1ecbf..58126c1 100644 Binary files a/Grid.o and b/Grid.o differ diff --git a/headers/Cell.hpp b/Headers/Cell.hpp similarity index 63% rename from headers/Cell.hpp rename to Headers/Cell.hpp index a918727..33705c2 100644 --- a/headers/Cell.hpp +++ b/Headers/Cell.hpp @@ -1,16 +1,19 @@ #pragma once -#include class Cell { private: - bool nextAliveState; + int x, y; + int neighbors; public: sf::RectangleShape shape; bool alive; + void render(); void update(); + void setNeighbors(int _neighbors); + Cell(); Cell(int i, int j, float size); }; diff --git a/headers/Grid.hpp b/Headers/Grid.hpp similarity index 85% rename from headers/Grid.hpp rename to Headers/Grid.hpp index e79c861..1a33911 100644 --- a/headers/Grid.hpp +++ b/Headers/Grid.hpp @@ -1,17 +1,19 @@ #pragma once + #include "Cell.hpp" class Grid { private: int x, y; + int size; Cell *cells = nullptr; public: - int size; Grid(int _size, int _x, int _y); void update(); void render(sf::RenderWindow &window); Cell *getCell(int xpos, int ypos); + void setNeighbors(int xpos, int ypos); }; diff --git a/main.cpp b/main.cpp index b8f64f9..29c1055 100644 --- a/main.cpp +++ b/main.cpp @@ -1,5 +1,7 @@ -#include "headers/Grid.hpp" #include +#include + +#include "Headers/Grid.hpp" int main() { @@ -14,8 +16,9 @@ int main() sf::RenderWindow window(sf::VideoMode(width, height), "Game of Life"); Grid grid(size, x, y); + sf::Clock clock; // Main Loop - while (window.isOpen()) + while (1 == window.isOpen()) { sf::Event event; while (window.pollEvent(event)) @@ -29,6 +32,11 @@ int main() window.clear(sf::Color::Black); + if (clock.getElapsedTime().asSeconds() > 0.01f) + { + grid.update(); + clock.restart(); + } grid.render(window); // Display Stuff diff --git a/main.o b/main.o index f622538..e750700 100644 Binary files a/main.o and b/main.o differ diff --git a/sfml-app b/sfml-app index 4050905..bd4b9b3 100755 Binary files a/sfml-app and b/sfml-app differ