#pragma once #include #include #include #include class MineField { struct Cell { bool isFlagged = false; bool isCleared = false; bool isBomb = false; int bombsNearby = -1; }; std::vector> m_cells; int m_rows; int m_cols; int m_totalMines; int m_remainingFlags; int m_openCells; bool m_gameOver; bool m_gameWon; void computeBombsNearby(int x, int y); void openNeighboorhood(int x, int y); void setOpenCell(int x, int y); void checkGameWon(); public: MineField(int cols, int rows, int mines); ~MineField(); 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_gameOver; }; 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; };