#include <vector>
#include <ctime>
#include <cstdlib>
using namespace std;
const int BOARD_SIZE = 10;
const int NUM_MINES = 15;
vector<vector<char>> board(BOARD_SIZE, vector<char>(BOARD_SIZE, ' '));
vector<vector<bool>> revealed(BOARD_SIZE, vector<bool>(BOARD_SIZE, false));
vector<pair<int, int>> mines;
void InitializeBoard() {
// 初始化扫雷板
for (int i = 0; i < NUM_MINES; i++) {
int x, y;
do {
x = rand() % BOARD_SIZE;
y = rand() % BOARD_SIZE;
} while (board[y][x] == '*');
board[y][x] = '*';
mines.push_back({x, y});
}
// 计算邻近的雷数
for (int y = 0; y < BOARD_SIZE; y++) {
for (int x = 0; x < BOARD_SIZE; x++) {
if (board[y][x] == ' ') {
int count = 0;
for (int dx = -1; dx <= 1; dx++) {
for (int dy = -1; dy <= 1; dy++) {
int nx = x + dx;
int ny = y + dy;
if (nx >= 0 && nx < BOARD_SIZE && ny >= 0 && ny < BOARD_SIZE && board[ny][nx] == '*') {
count++;
}
}
}
if (count > 0) {
board[y][x] = count + '0';
}
}
}
}
}
void DisplayBoard(bool showMines) {
system("cls");
cout << " ";
for (int x = 0; x < BOARD_SIZE; x++) {
cout << " " << x;
}
cout << "\n";
for (int y = 0; y < BOARD_SIZE; y++) {
cout << y << " ";
for (int x = 0; x < BOARD_SIZE; x++) {
if (showMines && board[y][x] == '*') {
cout << "* ";
} else if (revealed[y][x]) {
cout << board[y][x] << " ";
} else {
cout << ". ";
}
}
cout << "\n";
}
}
bool IsGameWon() {
int totalRevealed = 0;
for (int y = 0; y < BOARD_SIZE; y++) {
for (int x = 0; x < BOARD_SIZE; x++) {
if (revealed[y][x]) {
totalRevealed++;
}
}
}
return totalRevealed == BOARD_SIZE * BOARD_SIZE - NUM_MINES;
}
void RevealCell(int x, int y) {
if (x < 0 || x >= BOARD_SIZE || y < 0 || y >= BOARD_SIZE || revealed[y][x]) {
return;
}
revealed[y][x] = true;
if (board[y][x] == ' ') {
for (int dx = -1; dx <= 1; dx++) {
for (int dy = -1; dy <= 1; dy++) {
int nx = x + dx;
int ny = y + dy;
RevealCell(nx, ny);
}
}
}
}
int main() {
srand(time(0));
InitializeBoard();
DisplayBoard(false);
while (true) {
int x, y;
cout << "输入坐标 (x y): ";
cin >> x >> y;
if (x < 0 || x >= BOARD_SIZE || y < 0 || y >= BOARD_SIZE || revealed[y][x]) {
cout << "无效的坐标,请重新输入。\n";
continue;
}
if (board[y][x] == '*') {
DisplayBoard(true);
cout << "游戏结束,你踩到雷了!" << endl;
break;
}
RevealCell(x, y);
DisplayBoard(false);
if (IsGameWon()) {
cout << "恭喜,你赢了!" << endl;
break;
}
}
return 0;
}
———lvzhuojin