扫雷
一、问题前述。
二、基本流程。
三、具体步骤。
1.创建菜单。
2.创建地图。
3.初始化地图。
4.打印地图。
5.玩家输入坐标进行翻开。
6.判断是否踩到地雷。
7.更新地图。
8.判定胜负。
四、实现代码。
一、问题前述。
手机偶遇许久未见的扫雷,就用C语言实现一下简易版扫雷。
二、基本流程。
1.创建菜单界面。
2.创建地图 (两个地图,一个玩家可见地图,一个地雷分布图)。
3.初始化地图(随机分布地雷在地图上)。
4.打印地图。
5.程序读取玩家输入的要翻开位置的坐标,并校验。
6.如果不是地雷,统计当前位置周围雷的个数, 并显示到地图上.。
7.判定游戏是否胜利。
三、具体步骤。
1.创建菜单。
int menu() {
printf("················\n");
printf("················\n");
printf("·····1.开始游戏······\n");
printf("·····0.退出游戏······\n");
printf("················\n");
printf("················\n");
int choice = 0;
printf("请选择\n");
scanf("%d", &choice);
return choice;
}
2.创建地图。
我们需要两张地图,所以需要创建两个二维数组。
第一个二维数组,表示玩家看到的地图。(show)
第二个二维数组,表示当前位置是不是地雷(1表示是地雷,0表示不是地雷)。(mine)
此处使用宏定义:
目的是
1.推高代码可读性,后续代码中遇到9,方便理解含义。
2.提高扩展性,如果将来要修改棋盘尺寸,代码修改会很方便。
#define MAX_ROW 9
#define MAX_COL 9
char show[MAX_ROW][MAX_COL] = {
0 };
char mine[MAX_ROW][MAX_COL] = {
0 };
3.初始化地图。
用 ‘*’ 表示未翻开的地方。
show刚开始全是 * 。
mine由0,1组成。0表示此处没地雷,1表示此处是地雷。
电脑随机生成地雷。此处地雷使用宏定义,方便更改和表示。
#define MINE_COUNT 10
void init(char show[MAX_ROW][MAX_COL],
char mine[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
show[row][col] = '*';
//初始化为0,之后随机生成1.
mine[row][col] = '0';
}
}
//使用当前时间作为随机种子。
srand((unsigned int)time(0));
int n = MINE_COUNT;
while (n > 0) {
//生成随机地雷。
int row = rand() % MAX_ROW;
int col = rand() % MAX_COL;
if (mine[row][col] == '1') {
continue;
}
mine[row][col] = '1';
n--;
}