|
@@ -1,12 +1,13 @@
|
|
|
#pragma once
|
|
#pragma once
|
|
|
|
|
|
|
|
-// #include <emmintrin.h>
|
|
|
|
|
#include <sigc++/signal.h>
|
|
#include <sigc++/signal.h>
|
|
|
#include <utility>
|
|
#include <utility>
|
|
|
#include <vector>
|
|
#include <vector>
|
|
|
#include <cstdlib>
|
|
#include <cstdlib>
|
|
|
#include <ctime>
|
|
#include <ctime>
|
|
|
#include <memory>
|
|
#include <memory>
|
|
|
|
|
+#include <thread>
|
|
|
|
|
+#include <chrono>
|
|
|
|
|
|
|
|
struct Cell {
|
|
struct Cell {
|
|
|
bool isFlagged;
|
|
bool isFlagged;
|
|
@@ -17,19 +18,20 @@ struct Cell {
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
class MineField {
|
|
class MineField {
|
|
|
-
|
|
|
|
|
std::vector<std::shared_ptr<Cell>> m_cells;
|
|
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_exploded;
|
|
|
|
|
|
|
+ int m_rows;
|
|
|
|
|
+ int m_cols;
|
|
|
|
|
+ int m_totalMines;
|
|
|
|
|
+ int m_remainingFlags;
|
|
|
|
|
+ int m_openCells;
|
|
|
|
|
+ bool m_exploded;
|
|
|
|
|
+ bool m_gameWon;
|
|
|
|
|
+ size_t m_time;
|
|
|
|
|
+ std::thread timerThread;
|
|
|
void computeBombsNearby(int x, int y);
|
|
void computeBombsNearby(int x, int y);
|
|
|
void openNeighboorhood(int x, int y);
|
|
void openNeighboorhood(int x, int y);
|
|
|
void setOpenCell(int x, int y);
|
|
void setOpenCell(int x, int y);
|
|
|
- //bint vecToPosition(int x, int y) {return (x + y * m_rows); };
|
|
|
|
|
- //std::pair<int, int> positionToVec(int pos) {return std::make_pair(pos % m_cols, pos / m_cols); };
|
|
|
|
|
|
|
+ void timerTick();
|
|
|
|
|
|
|
|
public:
|
|
public:
|
|
|
MineField(int cols, int rows, int mines);
|
|
MineField(int cols, int rows, int mines);
|
|
@@ -47,8 +49,9 @@ public:
|
|
|
int getTotalMines() {return m_totalMines; };
|
|
int getTotalMines() {return m_totalMines; };
|
|
|
void startNewGame(int cols, int rows, int mines);
|
|
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;
|
|
|
|
|
|
|
+ sigc::signal<void(int, int)> openCellSignal;
|
|
|
|
|
+ sigc::signal<void(int)> remainingFlagsSignal;
|
|
|
|
|
+ sigc::signal<void(void)> gameWonSignal;
|
|
|
|
|
+ sigc::signal<void(void)> gameOverSignal;
|
|
|
|
|
+ sigc::signal<void(unsigned int)> timerSignal;
|
|
|
};
|
|
};
|