c语言扫雷
时间: 2023-06-22 11:28:44 浏览: 122
以下是一个简单的 C 语言扫雷游戏的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 10 // 行数
#define COL 10 // 列数
#define MINE_NUM 10 // 雷数
int board[ROW][COL]; // 扫雷棋盘
/**
* 在棋盘上随机放置雷
*/
void place_mines() {
int count = 0;
while (count < MINE_NUM) {
int row = rand() % ROW;
int col = rand() % COL;
if (board[row][col] != -1) {
board[row][col] = -1;
count++;
}
}
}
/**
* 输出棋盘
*/
void print_board() {
printf(" ");
for (int j = 0; j < COL; j++) {
printf(" %d", j);
}
printf("\n");
for (int i = 0; i < ROW; i++) {
printf("%d ", i);
for (int j = 0; j < COL; j++) {
if (board[i][j] == -2) {
printf("* ");
} else if (board[i][j] >= 0) {
printf("%d ", board[i][j]);
} else {
printf(". ");
}
}
printf("\n");
}
}
/**
* 计算某个格子周围的雷数
* @param row 行坐标
* @param col 列坐标
* @return 周围雷数
*/
int count_mines(int row, int col) {
int count = 0;
for (int i = row - 1; i <= row + 1; i++) {
for (int j = col - 1; j <= col + 1; j++) {
if (i >= 0 && i < ROW && j >= 0 && j < COL && board[i][j] == -1) {
count++;
}
}
}
return count;
}
/**
* 打开某个格子
* @param row 行坐标
* @param col 列坐标
*/
void open_cell(int row, int col) {
if (board[row][col] == -1) {
printf("Game Over!\n");
print_board();
exit(0);
} else if (board[row][col] == -2) {
board[row][col] = count_mines(row, col);
if (board[row][col] == 0) {
for (int i = row - 1; i <= row + 1; i++) {
for (int j = col - 1; j <= col + 1; j++) {
if (i >= 0 && i < ROW && j >= 0 && j < COL) {
open_cell(i, j);
}
}
}
}
}
}
int main() {
srand(time(NULL));
// 初始化棋盘
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
board[i][j] = -2; // -2 表示未打开的格子
}
}
// 随机放置雷
place_mines();
// 输出初始棋盘
print_board();
// 开始游戏
while (1) {
int row, col;
printf("Enter row and col: ");
scanf("%d%d", &row, &col);
if (row >= 0 && row < ROW && col >= 0 && col < COL) {
open_cell(row, col);
print_board();
}
}
return 0;
}
在这个示例代码中,我们使用一个二维数组 board
来表示扫雷棋盘,数组元素的含义如下:
-1
表示该格子是一颗雷;-2
表示该格子还未被打开;- 非负整数表示该格子周围有多少颗雷。
游戏开始时,我们随机放置了 MINE_NUM
颗雷。然后,程序会要求用户输入一个格子的位置,如果该位置上是一颗雷,则游戏结束;否则,程序会计算该格子周围有多少颗雷,并在棋盘上显示出来。如果该格子周围没有雷,则程序会递归地打开周围的格子,直到不能再打开为止。游戏结束后,程序会输出完整的棋盘并退出。
当然,这只是一个简单的示例代码,实际的扫雷游戏还有很多需要完善的地方,例如计时、计分等等。
相关推荐







