minefield.hpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #pragma once
  2. // #include <emmintrin.h>
  3. #include <sigc++/signal.h>
  4. #include <vector>
  5. #include <cstdlib>
  6. #include <ctime>
  7. #include <memory>
  8. struct Cell {
  9. bool isFlagged;
  10. bool isCleared;
  11. bool isBomb;
  12. int bombsNearby;
  13. Cell(): isFlagged(false), isCleared(false), isBomb(false), bombsNearby(-1) {};
  14. };
  15. class MineField {
  16. std::vector<std::shared_ptr<Cell>> m_cells;
  17. int m_rows;
  18. int m_cols;
  19. int m_totalMines;
  20. int m_remainingFlags;
  21. bool m_exploded;
  22. void computeBombsNearby(int x, int y);
  23. void openNeighboorhood(int x, int y);
  24. void setClearCell(int x, int y);
  25. public:
  26. MineField(int cols, int rows, int mines);
  27. void initBombs(int x, int y);
  28. bool isBomb(int x, int y);
  29. bool isFlagged(int x, int y);
  30. bool isCleared(int x, int y);
  31. bool clearCell(int x, int y);
  32. int bombsNearby(int x, int y);
  33. bool isGameOver() {return m_exploded; };
  34. int getCols() {return m_cols; };
  35. int getRows() {return m_rows; };
  36. bool toggleFlag(int x, int y);
  37. int getRemainingFlags() {return m_remainingFlags; };
  38. int getTotalMines() {return m_totalMines; };
  39. sigc::signal<void(int, int)> clearCellSignal;
  40. sigc::signal<void(int)> remainingFlagsChangedSignal;
  41. };