做一个c语言扫雷游戏代码
时间: 2024-04-23 11:04:42 浏览: 22
以下是一个简单的C语言扫雷游戏代码,仅供参考:
```
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 9
#define COL 9
#define MINE_NUM 10
int board[ROW][COL]; // 扫雷棋盘
void init_board() {
// 初始化扫雷棋盘
int i, j, count = 0;
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
board[i][j] = 0;
}
}
// 随机布雷
srand((unsigned)time(NULL));
while (count < MINE_NUM) {
int x = rand() % ROW;
int y = rand() % COL;
if (board[x][y] == 0) {
board[x][y] = -1;
count++;
}
}
// 计算每个格子周围雷的数量
for (i = 0; i < ROW; i++) {
for (j = 0; j < COL; j++) {
if (board[i][j] == -1) {
// 当前格子是雷,计算周围的格子
int k, l;
for (k = i - 1; k <= i + 1; k++) {
for (l = j - 1; l <= j + 1; l++) {
if (k >= 0 && k < ROW && l >= 0 && l < COL && board[k][l] != -1) {
// 周围的格子不越界且不是雷
board[k][l]++;
}
}
}
}
}
}
}
void print_board() {
// 打印扫雷棋盘
int i, j;
printf(" ");
for (j = 0; j < COL; j++) {
printf("%d ", j);
}
printf("\n");
for (i = 0; i < ROW; i++) {
printf("%d ", i);
for (j = 0; j < COL; j++) {
if (board[i][j] == -1) {
printf("* ");
} else {
printf("%d ", board[i][j]);
}
}
printf("\n");
}
}
int open_square(int x, int y) {
// 翻开指定的格子,返回翻开的结果
if (board[x][y] == -1) {
// 翻开的是雷
return -1;
} else {
// 翻开的不是雷
return board[x][y];
}
}
int main() {
int i, j;
char cmd;
int opened[ROW][COL] = {0}; // 记录已经翻开的格子
// 初始化扫雷棋盘
init_board();
// 打印扫雷棋盘
print_board();
// 开始游戏
while (1) {
printf("请输入坐标和操作(格式为x y cmd):");
scanf("%d %d %c", &i, &j, &cmd);
if (i < 0 || i >= ROW || j < 0 || j >= COL) {
// 坐标不合法
printf("坐标不合法,请重新输入!\n");
continue;
}
if (opened[i][j] && cmd != 'f') {
// 已经翻开过的格子不能再次翻开
printf("该格子已经翻开过了,请重新输入!\n");
continue;
}
if (cmd == 'o') {
// 翻开指定的格子
int result = open_square(i, j);
if (result == -1) {
// 翻开的是雷,游戏结束
printf("你踩雷了,游戏结束!\n");
break;
} else {
// 翻开的不是雷,打印翻开的结果
printf("翻开的结果为:%d\n", result);
opened[i][j] = 1;
}
} else if (cmd == 'f') {
// 标记指定的格子为雷
opened[i][j] = 1;
printf("成功标记该格子为雷!\n");
} else {
// 操作不合法
printf("操作不合法,请重新输入!\n");
}
}
return 0;
}
```