Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
//
// Created by Admin on 20.12.2022.
//
#include <iostream>
#include <ctime>
#include <cstring>
#include "Field.h"
void Field::printHiddenBoard() {
for (auto &i: hiddenBoard) {
for (int j: i) {
// Print the mines as X
if (j == -1) {
cout << "X ";
} else {
cout << j << " ";
}
}
cout << endl;
}
}
Field::Field() {
memset(hiddenBoard, 0, sizeof(hiddenBoard));
memset(board, '*', sizeof(board));
}
void Field::generateMines() {
srand(time(nullptr));
while (mines.size() < MINES) {
mines.insert(rand() % 100);
}
}
void Field::printBoard() {
cout << " A B C D E F G H I J" << endl;
for (int i = 0; i < 10; i++) {
if (i < 9) cout << i + 1 << " ";
else cout << i + 1;
for (int j = 0; j < 10; j++) {
cout << board[i][j] << " ";
}
cout << endl;
}
}
void Field::fillHiddenBoard() {
// Fill the board with mines and the number of mines around it
for (int i = 0; i < 10; ++i) {
for (int j = 0; j < 10; ++j) {
if (mines.find(i * 10 + j) != mines.end()) {
hiddenBoard[i][j] = -1;
for (int k = -1; k <= 1; ++k) {
for (int l = -1; l <= 1; ++l) {
if (i + k >= 0 && i + k < 10 && j + l >= 0 && j + l < 10 && hiddenBoard[i + k][j + l] != -1) {
hiddenBoard[i + k][j + l]++;
}
}
}
}
}
}
}
void Field::openField(int row, int col) {
// Open all fields that are possible to open using recursion
if (hiddenBoard[row][col] == 0) {
board[row][col] = '_';
for (int i = -1; i <= 1; i++) {
for (int j = -1; j <= 1; j++) {
if (row + i >= 0 && row + i < 10 && col + j >= 0 && col + j < 10 && board[row + i][col + j] != '_') {
openField(row + i, col + j);
}
}
}
} else {
board[row][col] = hiddenBoard[row][col] + '0';
}
}
bool Field::isMine(int row, int col) {
return hiddenBoard[row][col] == -1;
}
bool Field::isOpen(int row, int col) {
return board[row][col] == '_';
}
void Field::flagField(int row, int col) {
board[row][col] = 'p';
}