#include "LifeSimulator.hpp" #include "Pattern.hpp" #include "PatternAcorn.hpp" #include "PatternGosperGliderGun.hpp" #include "PatternRandom.hpp" #include "RendererConsole.hpp" #include "rlutil.h" #include #include const uint32_t STEPS = 1000000; const uint32_t SLEEP_MS = 50; const bool POPULATE_RAND = false; int main() { std::uint8_t rows = static_cast(rlutil::trows()); std::uint8_t cols = static_cast(rlutil::tcols()); LifeSimulator simulation(cols, rows); if (!POPULATE_RAND) { std::uint8_t acornOffsetX = 40; std::uint8_t acornOffsetY = 20; PatternGosperGliderGun patternGun; // PatternAcorn patternAcorn; if (cols > patternGun.getSizeX() && rows > patternGun.getSizeY()) simulation.insertPattern(patternGun, 0, 0); // if (cols > patternAcorn.getSizeX() + acornOffsetX && rows > patternAcorn.getSizeY() + acornOffsetY) // simulation.insertPattern(patternAcorn, acornOffsetX, acornOffsetY); } else { PatternRandom patternRandom(cols, rows, 1); simulation.insertPattern(patternRandom, 0, 0); } RendererConsole renderer; rlutil::cls(); rlutil::saveDefaultColor(); for (std::uint32_t i = 0; i < STEPS; i++) { rlutil::hidecursor(); renderer.render(simulation); simulation.update(); if (SLEEP_MS > 0) std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_MS)); rlutil::showcursor(); } return 0; }