根据之前讲解的数组和函数,简单做一下最基础模式的扫雷游戏。当然这个可以精进,后期有时间的话,也可以做的更好一点,现在就基于所讲知识,简单做一下游戏。
首先,要写游戏的代码,先要明白,游戏该怎么玩,同时,在写代码之前,要明确自己要做的内容,这样不仅节约时间,也能提高工作效率。
目前能做的是可以完成下列操作:
1.使用控制台实现经典的扫雷游戏(cmd窗口)(cmd窗口就是底层逻辑代码)
2.可以通过菜单实现继续完或者退出游戏
3.扫雷的棋盘式9*9的格子(这样后面可以再加,9*9是最基础的游戏)
4.默认随机布置10个雷
5.可以排查雷:
如果位置不是雷,就显示周围有几个雷
如果位置是雷,就炸死游戏结束
把除10个雷之外的所有非雷都找出来,排雷成功,游戏结束
先讲一下,函数有函数的声明,函数的应用,可以分开写,那就是可以写三个文件去去实现这个代码。add.h add.c test.c
扫雷游戏网页版 - Minesweeper//这是扫雷的网页版,可以根据这个游戏,来想你下一步要干什么,提前做好规划,方便接下来去写代码。
目录
那现在就开始写代码了:
main函数:
首先,先写出main主函数来
int main()
{
int input = 0;
do
{
menu();
printf("请选择:> ");
scanf("%d", &input);
switch (input)
{
case 1:
game();//玩游戏
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("选择错误\n");
break;
}
} while (input);
return 0;
}
这样的代码,我相信看过我之前的写的,再加上自己的勤加练习还是可以做到的,我就简单解释一下吧,方便大家理解,input输入,这个很简单,我就不过多解释了,为什么用do while 呢?do while 它是无论条件成不成立,都会循环一次,能够在你什么都不输入的情况下,展示菜单,这样就验证了2.可以通过菜单实现继续完或者退出游戏。switch语句也很明白,我就不说了。
void menu()
{
printf("*********************\n");
printf("****** 1.play *******\n");
printf("****** 0.exit *******\n");
printf("*********************\n");
}
menu(菜单)
这是menu(菜单)。相信大家都能看懂。
game()这个是重点,毕竟你主要工作就在忙这个。
void game()
{
char mine[11][11] = { 0 };
char show[11][11] = { 0 };
//完善游戏代码
//棋盘初始化
//mine 数组初始化全为'0'--表示还没有布置雷,所有位置都不是雷
//show 数组初始化全为'*'--表示所有位置没有排查
InitBoard(mine,11,11,'0');
InitBoard(show,11,11,'*');
//布置雷
SetMine(mine,ROW,COL);
//打印棋盘
DisplayBoard(mine,9,9);
DisplayBoard(show,9,9);
//排查雷
Findmine(mine,show,9,9);
}
可以提前把要做的操作提前写出来,当然也可以提前一步,不用提前这个多,为什么是11呢?因为9*9的话,你要统计周围的雷的个数的话,肯定要把边缘位置的那些统计全了,也就上下左右各加上一行或者一列。
这里可以做一个简单的优化,因为什么呢?
如果你要后面做点改动,这个比如你觉得9*9对你来说太过简单了,单纯改9的话,要改的地方太多了,当然你可以也会漏改,大大影响工作效率。
当然你们可能会问这样一个问题:
为什么设计两个数组?
因为一个数组是设置雷
另一个数组是如果那个坐标是雷,被炸死了,没什么好说的
那如果不是雷,统计周围雷的个数,那那个数和你一开始设置雷的数字能够混淆,所以设置两个数组。
void game()
{
char mine[ROWS][COLS] = { 0 };
char show[ROWS][COLS] = { 0 };
//完善游戏代码
//棋盘初始化
//mine 数组初始化全为'0'--表示还没有布置雷,所有位置都不是雷
//show 数组初始化全为'*'--表示所有位置没有排查
InitBoard(mine,ROWS,COLS,'0');
InitBoard(show,ROWS,COLS,'*');
//布置雷
SetMine(mine,ROW,COL);
//打印棋盘
DisplayBoard(mine,ROW,COL);
DisplayBoard(show,ROW,COL);
//排查雷
Findmine(mine,show,ROW,COL);
}
初始化棋盘式ROWS,COLS,是因为要包括上下左右加的那一列
布置雷的时候,肯定是放在中间9*9里面,所以是ROW,COL
打印展示的时候,也是ROW,COL,就像你玩扫雷游戏的时候,9*9模块,不会给你展示11*11的一样
排查雷,和布置雷类似,布置雷是布置在9*9里面,排查雷,也肯定是排查9*9里面布置的雷
这就是修改后的代码。
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
这个在头文件里