【C语言/C++】扫雷小游戏

文章目录

  • 1、代码规划
  • 2、构思代码
  • 3、代码模块实现
    • 1、游戏菜单
    • 2、初始化雷阵
    • 3、打印雷阵
    • 4、布置雷的逻辑
    • 5、排查雷的逻辑(重点)
    • 6、判断胜负
  • 4、深度思考

1、代码规划

1、创建一个源文件test.c 游戏的测试逻辑
2、创建一个源文件game.c 游戏的实现逻辑
3、创建一个头文件game.h 游戏实现函数的声明

2、构思代码

1、首先我们需要一个简易的游戏界面
2、初级的扫雷游戏需要9*9的雷阵,所以我们要初始化雷阵
3、打印雷阵进行游戏
4、布置雷的信息(在玩家不可见的雷阵上)
5、排查雷的信息
6、

3、代码模块实现

1、游戏菜单

运用do-while循环来实现菜单的打印
【C语言/C++】扫雷小游戏_第1张图片
【C语言/C++】扫雷小游戏_第2张图片

2、初始化雷阵

创建一个函数InitBoard用于初始化雷阵
1、由于初级难度的扫雷游戏需要9*9的雷阵,所以我们自然而然的联想到二维数组的知识。
2、我们需要创建两个棋盘,一个棋盘用于存储布置好的雷的信息,另一个棋盘用于存储玩家排查出的雷的信息
3、由于考虑到我们排查雷阵边界的雷时,有可能会产生的数组越界的问题,所以在创建二维数组的时候,我们选择将 9 * 9的二维数组拓展到11 *11的大小,这样及时排查到雷阵的边界,也不会产生数组越界的问题
【C语言/C++】扫雷小游戏_第3张图片
利用宏定义来限制雷阵的大小,其有点是未来想要修改雷阵的大小时,我们只需要修改宏定义之后的数字就可以轻松做到修改雷阵大小。
【C语言/C++】扫雷小游戏_第4张图片
【C语言/C++】扫雷小游戏_第5张图片

3、打印雷阵

1、我们将隐藏的雷阵(全初始化成字符0)和展示给玩家的雷阵(全初始化成字符’ * ')都初始化完成之后,需要打印出来查看效果
2、创建一个打印棋盘的函数DisplayBoard
在这里插入图片描述
【C语言/C++】扫雷小游戏_第6张图片
最后创建的两个棋盘效果如下
【C语言/C++】扫雷小游戏_第7张图片
为了让棋盘足够的美观,我们可以在打印棋盘的时候添加上棋盘的行号列号
【C语言/C++】扫雷小游戏_第8张图片
这样打印出来的雷阵就会自带行号和列号,需要排查哪个位置的雷就一目了然。

4、布置雷的逻辑

1、我们需要运用随机数来生成雷,需要运用到库函数的srand函数

srand((unsigned int)time(NULL));

1、time函数需要引用头文件time.h
2、srand函数需要引用头文件stdlib.h
3、编写一个SetMine函数来实现布置雷的功能
首先我们需要将生成的随机数限制在1~9之间,才能让雷处于雷阵之中
所以我们将随机数分别对行数和列数取余,并把余数+1,得到的数字范围就是在1~9之内
【C语言/C++】扫雷小游戏_第9张图片
布置好雷之后我们将雷阵打印出来看一下雷阵是否是我们想要的效果

【C语言/C++】扫雷小游戏_第10张图片
最后得到一个这样的雷阵。

5、排查雷的逻辑(重点)

1、首先我们要在mine雷阵(玩家看不到)之内排雷,然后将雷阵该点的信息让show雷阵接收。
2、限制玩家的排雷坐标,如果玩家输入的坐标超出雷阵的范围,我们需要提醒玩家坐标非法
3、如果排雷失败就告诉玩家“排雷失败”,并且将mine雷阵打印出来给玩家查看,让玩家知道自己是怎么失败的
4、如果排雷成功,需要告诉玩家,该点周围有几个雷
首先我们要创建一个FineMine函数来实现排雷的功能
【C语言/C++】扫雷小游戏_第11张图片
再创建一个get_mine_count函数来实现对排查点位周围雷的数量的统计
【C语言/C++】扫雷小游戏_第12张图片
由于我们之前创建雷阵的时候将数组全都初始化成字符’ 0 ‘,布置雷的时候将雷布置成字符’ 1 ',所以在计算雷的数量的时候,我们需要把排查点位的周围八个点位相加,并减去8 * ’ 0 '(字符0)才能够得出我们想要的数字。
Tips:
1、数字1 +字符’ 0 ’ = 字符’ 1 ’
2、字符’ 1 ’ - 字符’ 0 ’ =数字1
3、在函数前加static修饰函数,使函数只能在game.c中被调用

6、判断胜负

点完所有没有雷的地区,即为游戏胜利,所以我们可以创建一个变量win,win与 没有雷的格数 比大小,判断游戏的胜负
【C语言/C++】扫雷小游戏_第13张图片

4、深度思考

扫雷游戏展开一片空白的效果如何实现:
1、该处坐标不是雷
2、该坐标的周围也没有雷
综合1,2两点,可以的出结论,将该坐标设置为空格’ ’
3、该坐标没有被排查过
综合上诉条件,我们可以使用递归的方法去排查

你可能感兴趣的:(c语言,c++,开发语言)