Files
minesweeper/src/minefield.hpp
Bernardo Magri b5f75a29b7 cleaning up
2025-04-10 17:15:14 +01:00

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;
};