目录
看到这个经典的画面,是否会勾起你的回忆呢?
还记的xp系统里的游戏吗,蜘蛛纸牌、扫雷、五子棋等 。至今记得小时候电脑课用着没网的电脑跟小伙伴们玩着扫雷,纸牌游戏,看谁的分数高呢。今天就让我们重温经典,自己试着来完成一个扫雷的小游戏。
想要完成一个小游戏,我们得明白这个游戏是怎么玩得,它是一个怎么样得规律
当我们点击一个空格后,显示了一个3,这代表着在这个3周围一圈8个方格中有着3个炸弹,具体是哪3个呢就需要我们通过运气来继续点击边上得方格来进行观察了。
大概了解了扫雷游戏是怎么玩的,它的规律是什么后,我们就来开始今天的重头戏吧。
设计思路:
将扫雷的实现过程进行拆分,并创建三个文件来存储:
测试文件(main.c) 游戏实现文件(game.c) 头文件(game.h)
1. 简易游戏菜单
我们在测试文件中打印一个简易菜单,并对菜单可以进行一个选择,选择1开始我们的扫雷游戏,选择0则退出游戏,如果不小心选择了其他数字,就提醒玩家选择错误,请重新选择。而且可以实现重新选择和玩完一把后还可以继续玩,
代码实现:
int main()
{
test();//为测试模块封装一个test函数,使main函数更简洁
return 0;
}
void test()
{
int input = 0;
//打印菜单
do
{
menu();//菜单模块封装一个menu函数
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();//游戏实现模块封装一个game函数
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
}
//菜单
void menu()
{
printf("***********************\n");
printf("**** 1. play ****\n");
printf("**** 0. exit ****\n");
printf("***********************\n");
}
2. 游戏棋盘初始化
这里很明显的我们可以发现这是一个9*9的一个方格棋盘(我们也以9*9为例),所以我们需要二维数组来存放我们的棋盘,那我们该如何来存放呢,这里我大概说一下思路。
我们使用两个二维数组来存放我们的棋盘,一个(mine)数组来存放我们布置雷的棋盘,一个(check)数组来存放显示给我们进行排雷的棋盘。那这两个数组需要多大呢?
我们想要打印的棋盘是一个9*9的棋盘,但是如果我们想要排查左下角的方格时,会发现出现了越界操作。所以为了避免越界我们就将棋盘存放设置为一个11*11的棋盘。为了使两个数组可以下标相同我们都设置成11*11的棋盘,为了方便排雷和布置我们将数组类型设置成字符类型。
为了后续增加可维护性和可以进行一个修改,我们在头文件进行宏定义行和列
代码实现:
game.h头文件
void game()
{
//存放布置雷
char mine[ROWS][COLS] = { 0 };
//存放排查雷
char check[ROWS][COLS] = { 0 };
}
创建好存放棋盘的数组,我们就要对棋盘进行初始化,为了使两个棋盘一眼可以看出是布置雷棋盘还是排查雷棋盘,我们将mine数组初始化为‘0’,使排查雷数组更美观更有神秘感,将check数组初始化为‘*’
代码实现: