55 lines
1.3 KiB
C++
55 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include <cstdlib>
|
|
#include <memory>
|
|
#include <sigc++/signal.h>
|
|
#include <vector>
|
|
|
|
class MineField
|
|
{
|
|
|
|
struct Cell
|
|
{
|
|
bool isFlagged = false;
|
|
bool isCleared = false;
|
|
bool isBomb = false;
|
|
int bombsNearby = -1;
|
|
};
|
|
|
|
std::vector<std::shared_ptr<Cell>> 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<void(int, int)> openCellSignal;
|
|
sigc::signal<void(int)> remainingFlagsSignal;
|
|
sigc::signal<void(void)> gameWonSignal;
|
|
sigc::signal<void(void)> gameOverSignal;
|
|
};
|