帮我用C语言写一个扫雷游戏,并每句都给出详细注释
时间: 2023-12-29 17:19:43 浏览: 68
用C语言编写的扫雷游戏
5星 · 资源好评率100%
好的,下面是C语言编写的扫雷游戏代码及其详细注释:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 10 // 定义行数
#define COL 10 // 定义列数
#define BOMB_NUM 10 // 定义炸弹数量
void init(char arr[ROW][COL], int row, int col) { // 初始化函数
int i, j;
for (i = 0; i < row; ++i) {
for (j = 0; j < col; ++j) {
arr[i][j] = '0'; // 用字符 '0' 初始化数组
}
}
}
void display(char arr[ROW][COL], int row, int col) { // 显示函数
int i, j;
printf(" ");
for (i = 0; i < col; ++i) {
printf("%d ", i); // 打印列数
}
printf("\n");
for (i = 0; i < row; ++i) {
printf("%d ", i); // 打印行数
for (j = 0; j < col; ++j) {
printf("%c ", arr[i][j]); // 打印当前位置的字母
}
printf("\n");
}
}
void set_bomb(char arr[ROW][COL], int row, int col) { // 放置炸弹函数
int i, j, count = 0;
srand(time(NULL)); // 用时间作为随机数种子
while (count < BOMB_NUM) { // 在随机位置放置炸弹
i = rand() % row;
j = rand() % col;
if (arr[i][j] == '0') {
arr[i][j] = '*';
++count; // 计数器自增
}
}
}
int get_bomb_count(char arr[ROW][COL], int x, int y) { // 获取相邻炸弹数量函数
int i, j, count = 0;
for (i = x - 1; i <= x + 1; ++i) { // 在相邻的 9 个位置中查找炸弹
for (j = y - 1; j <= y + 1; ++j) {
if (i < 0 || i >= ROW || j < 0 || j >= COL) { // 超出边界的情况
continue;
}
if (arr[i][j] == '*') { // 发现炸弹的情况
++count;
}
}
}
return count;
}
void dig(char arr[ROW][COL], char show[ROW][COL], int row, int col, int x, int y) { // 挖掘函数
if (x < 0 || x >= ROW || y < 0 || y >= COL) { // 超出边界的情况
printf("位置无效,请重新输入!\n");
return;
}
if (show[x][y] != '#') { // 已经挖过的情况
return;
}
show[x][y] = arr[x][y]; // 更新挖掘结果
if (show[x][y] == '*') { // 挖到炸弹的情况
printf("很遗憾,你被炸死了!\n");
display(arr, ROW, COL); // 显示所有未挖掘的位置
exit(0); // 退出程序
}
if (show[x][y] == '0') { // 挖出周围没有炸弹的情况
int i, j;
for (i = x - 1; i <= x + 1; ++i) { // 在相邻的 9 个位置中递归挖掘
for (j = y - 1; j <= y + 1; ++j) {
if (i < 0 || i >= ROW || j < 0 || j >= COL) { // 超出边界的情况
continue;
}
dig(arr, show, ROW, COL, i, j);
}
}
}
}
int main() {
char mine[ROW][COL]; // 所有位置是否含有炸弹的数组,初始值全部为 '0'
char show[ROW][COL]; // 所有位置是否已经挖掘的数组,初始值全部为 '#'
int x, y;
init(mine, ROW, COL); // 初始化
init(show, ROW, COL);
set_bomb(mine, ROW, COL); // 放置炸弹
while (1) { // 持续获取用户输入的坐标进行挖掘
display(show, ROW, COL); // 显示挖掘过的位置以及当前所有位置的信息
printf("请输入要挖掘的位置坐标,格式为 x y(例如:3 4):\n");
scanf("%d %d", &x, &y);
dig(mine, show, ROW, COL, x, y); // 挖掘
}
return 0;
}
```
注释写在了代码里面,希望对你有帮助。
阅读全文