#pragma once // #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; bool m_exploded; void computeBombsNearby(int x, int y); void openNeighboorhood(int x, int y); void setClearCell(int x, int y); 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 isCleared(int x, int y); bool clearCell(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; }; sigc::signal clearCellSignal; sigc::signal remainingFlagsChangedSignal; };