diff --git a/src/minefield.cpp b/src/minefield.cpp index 5d9163b..88e45f7 100644 --- a/src/minefield.cpp +++ b/src/minefield.cpp @@ -12,6 +12,20 @@ MineField::MineField(int cols, int rows, int mines): m_rows(rows), } } +void MineField::timerTick() { + + auto start = std::chrono::system_clock::now(); + + while((m_exploded == false) && (m_gameWon == false)) { + std::this_thread::sleep_for(std::chrono::milliseconds(200)); + auto now = std::chrono::system_clock::now(); + const auto duration = now - start; + std::chrono::milliseconds ms = std::chrono::duration_cast(duration); + m_time += duration.count(); + timerSignal.emit(m_time); + start = std::chrono::system_clock::now(); + } +} void MineField::initBombs(int x, int y) { @@ -28,6 +42,11 @@ void MineField::initBombs(int x, int y) { m_cells.at(position)->isBomb = true; --remainingMines; } + + //init the timer to zero and start the timer thread + m_time = 0; + timerThread = std::thread(&MineField::timerTick, this); + timerThread.detach(); //not sure if this is okay } bool MineField::openCell(int x, int y) { diff --git a/src/minefield.hpp b/src/minefield.hpp index 2c5532e..6aa7526 100644 --- a/src/minefield.hpp +++ b/src/minefield.hpp @@ -1,12 +1,13 @@ #pragma once -// #include #include #include #include #include #include #include +#include +#include struct Cell { bool isFlagged; @@ -17,19 +18,20 @@ struct Cell { }; class MineField { - std::vector> 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 openNeighboorhood(int x, int y); void setOpenCell(int x, int y); - //bint vecToPosition(int x, int y) {return (x + y * m_rows); }; - //std::pair positionToVec(int pos) {return std::make_pair(pos % m_cols, pos / m_cols); }; + void timerTick(); public: MineField(int cols, int rows, int mines); @@ -47,8 +49,9 @@ public: 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; + sigc::signal openCellSignal; + sigc::signal remainingFlagsSignal; + sigc::signal gameWonSignal; + sigc::signal gameOverSignal; + sigc::signal timerSignal; };