游戏介绍
扫雷,顾名思义,就是排除所有的雷,游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。
基本流程
1.创建用户交互菜单;
2.创建地图并初始化;
3.打印地图;
4.程序读取玩家要翻的坐标并校验;
5.判断该位置的坐标是否有地雷,如果有地雷,则游戏结束;
6.如果不是地雷, 统计当前位置周围雷的个数, 并显示到地图上;
7.判定游戏是否胜利。
代码实现
创建用户交互菜单
int menu(){
//用户交互菜单
printf("======================\n");
printf("1.开始游戏\n");
printf("0.结束游戏\n");
printf("======================\n");
printf("请输入您的选择:");
int choice = 0;
scanf("%d", &choice);
return choice;
}
这里我们最开始创建一个用户菜单供用户选择游戏的开始和结束。(这里小小的吐槽一下,每次我敲完代码,都会出现错误,而且大多数情况下都是scanf没有&,所以大家也要注意啦)
创建地图并初始化
void init(char ShowMap[MAX_ROW][MAX_COL], char MineMap[MAX_ROW][MAX_COL]){
//初始化地图
//先初始化showmap
for (int row = 0; row < MAX_ROW; row++){
for (int col = 0; col < MAX_COL; col++){
ShowMap[row][col] = '*';//ShowMap的初始化我们用‘*’表示
}
}
for (int row = 0; row < MAX_ROW; row++){
for (int col = 0; col < MAX_COL; col++){
MineMap[row][col] = '0';//MineMap的初始化我们用‘ ’表示
}
}
int n = DEFAULT_MINE_COUNT;
while (n > 0) {
// 生成雷的随机位置.
int row = rand() % MAX_ROW;
int col = rand() % MAX_COL;
if (MineMap[row][col] == '1') {
// 如果当前位置已经有雷了, 就直接进入下次循环, 重新
// 产生随机位置.
continue;
}
MineMap[row][col] = '1';
n--;
}
}
这里要注意的是我们打印地图的时候要打印两个地图,一个是供用户选择坐标翻的地图,另外一个是我们地雷随机出现的地图,在MineMap中,我们地雷随机出现采用srand随机数,同时定义宏地雷的总数。
我们初始化ShowMap一开始所有格子为’*’,MineMap一开始所有格子为‘0’,地雷我们用’1’来表示。
地图打印
void printMap(char theMap[MAX_ROW][MAX_COL]){
//打印地图
printf(" |");
for (int col = 0; col < MAX_COL; col++) {
printf("%d ", col);
}
printf("\n"