| ... | ... |
@@ -1,6 +1,8 @@ |
| 1 |
+#include <chrono> |
|
| 1 | 2 |
#include <cstdlib> |
| 2 | 3 |
#include <ctime> |
| 3 | 4 |
#include <iostream> |
| 5 |
+#include <thread> |
|
| 4 | 6 |
#include <vector> |
| 5 | 7 |
|
| 6 | 8 |
struct Maze |
| ... | ... |
@@ -43,7 +45,8 @@ struct Maze |
| 43 | 45 |
std::vector<Cell> cells; |
| 44 | 46 |
}; |
| 45 | 47 |
|
| 46 |
-Maze hunt_and_kill(int w, int h, unsigned seed) |
|
| 48 |
+template<typename C = void(*)(Maze &)> |
|
| 49 |
+Maze hunt_and_kill(int w, int h, unsigned seed, C callback = [](Maze &){})
|
|
| 47 | 50 |
{
|
| 48 | 51 |
auto maze = Maze(w, h, Maze::WALL); |
| 49 | 52 |
std::srand(seed); |
| ... | ... |
@@ -55,6 +58,8 @@ Maze hunt_and_kill(int w, int h, unsigned seed) |
| 55 | 58 |
auto done = false; |
| 56 | 59 |
while (!done) |
| 57 | 60 |
{
|
| 61 |
+ // Call callback. |
|
| 62 |
+ callback(maze); |
|
| 58 | 63 |
// Find number of neighbors. |
| 59 | 64 |
auto n = 0; |
| 60 | 65 |
for (auto ny = -2; ny <= 2; ny += 2) |
| ... | ... |
@@ -100,7 +105,11 @@ Maze hunt_and_kill(int w, int h, unsigned seed) |
| 100 | 105 |
|
| 101 | 106 |
int main() |
| 102 | 107 |
{
|
| 108 |
+ using namespace std::chrono; |
|
| 103 | 109 |
auto seed = (unsigned)std::time(nullptr); |
| 104 |
- auto maze = hunt_and_kill(80/2, 24-1, seed); |
|
| 110 |
+ auto maze = hunt_and_kill(80/2, 24-1, seed, [](Maze & maze) {
|
|
| 111 |
+ maze.print(); |
|
| 112 |
+ std::this_thread::sleep_for(milliseconds(20)); |
|
| 113 |
+ }); |
|
| 105 | 114 |
maze.print(); |
| 106 | 115 |
} |