#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROWS 10
#define COLS 10
#define MINES 10
int grid[ROWS][COLS];
int revealed[ROWS][COLS];
int mines[MINES][2];
void initGrid() {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
grid[i][j] = 0;
revealed[i][j] = 0;
}
}
}
void placeMines() {
srand(time(NULL));
for (int i = 0; i < MINES; i++) {
int x, y;
do {
x = rand() % ROWS;
y = rand() % COLS;
} while (grid[x][y] == -1);
grid[x][y] = -1;
mines[i][0] = x;
mines[i][1] = y;
}
}
void calculateNumbers() {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (grid[i][j] == -1) continue;
for (int dx = -1; dx <= 1; dx++) {
for (int dy = -1; dy <= 1; dy++) {
int nx = i + dx;
int ny = j + dy;
if (nx >= 0 && nx < ROWS && ny >= 0 && ny < COLS && grid[nx][ny] == -1) {
grid[i][j]++;
}
}
}
}
}
}
void reveal(int x, int y) {
if (revealed[x][y]) return;
revealed[x][y] = 1;
if (grid[x][y] == 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 < ROWS && ny >= 0 && ny < COLS && !revealed[nx][ny]) {
reveal(nx, ny);
}
}
}
}
}
void printGrid() {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLS; j++) {
if (revealed[i][j]) {
if (grid[i][j] == -1) printf("M ");
else printf("%d ", grid[i][j]);
}
else {
printf("* ");
}
}
printf("\n");
}
}
int main() {
initGrid();
placeMines();
calculateNumbers();
int gameover = 0;
int revealedCells = 0;
while (!gameover) {
printGrid();
int x, y;
printf("Enter coordinates to reveal (row col): ");
scanf("%d %d", &x, &y);
x--; y--; // 调整为0索引
if (grid[x][y] == -1) {
printf("Game Over!\n");
gameover = 1;
}
else {
reveal(x, y);
revealedCells += 1;
if (revealedCells == ROWS * COLS - MINES) {
printf("You Win!\n");
gameover = 1;
}
}
}
return 0;
}
扫雷
于 2024-06-20 11:25:49 首次发布