#pragma once #include #include #include #include #include #include #include #include struct Cell { bool isFlagged; bool isCleared; bool isBomb; int bombsNearby; Cell(): isFlagged(false), isCleared(false), isBomb(false), bombsNearby(-1) {}; }; class MineField { std::vector> m_cells; int m_rows; int m_cols; int m_totalMines; int m_remainingFlags; int m_openCells; bool m_exploded; bool m_gameWon; size_t m_time; std::thread timerThread; void computeBombsNearby(int x, int y); void openNeighboorhood(int x, int y); void setOpenCell(int x, int y); void timerTick(); public: MineField(int cols, int rows, int mines); void initBombs(int x, int y); bool isBomb(int x, int y); bool isFlagged(int x, int y); bool isOpened(int x, int y); bool openCell(int x, int y); int bombsNearby(int x, int y); bool isGameOver() {return m_exploded; }; int getCols() {return m_cols; }; int getRows() {return m_rows; }; bool toggleFlag(int x, int y); int getRemainingFlags() {return m_remainingFlags; }; int getTotalMines() {return m_totalMines; }; void startNewGame(int cols, int rows, int mines); sigc::signal openCellSignal; sigc::signal remainingFlagsSignal; sigc::signal gameWonSignal; sigc::signal gameOverSignal; sigc::signal timerSignal; };