c语言实现扫雷游戏
1.分析问题需求和大致思路
在开始设计之前,我们先分析一下,扫雷游戏大家可能都玩过,基本的信息都是呈现在一个10*10的方格上的。开始时我们应该打印一个菜单,让玩家选择是否进行游戏。
然后是初始化的问题,用二维数组来的格子里面的信息的话,刚好非常契合,确定了用数组来存储以后,我们就可以思考一下怎么做初始化,我们可以用3种不同的符号来表示棋盘上的状态,没被玩家排查之前用#表示,在玩家查找以后要输出周围有多少炸弹,呈现出一个整数,呈现在屏幕上的是这些符号,因此我们在创建数组时就得注意用char型。具体的存储信息如下图:
在完成初始化之后,我们要生成随机的地雷位置,可以用rand函数和srand函数以及time函数来保证生成数的随机性
在将地雷布置完成后,我们就可以构思扫雷部分的逻辑了,首先由玩家输入一个坐标,然后计算机进行判断,输入位置是否合法是否合理,在确认输入合理后,对玩家输入的坐标进行判断,如果有炸弹,就弹出失败的界面,然后退出游戏,如果没有炸弹,就使用一个函数来统计周围炸弹的数量并且打印出来,然后对以上做循环的封装处理,直到游戏胜利或者失败才跳出循环,完成循环后,我们就需要解决如何定义游戏胜利的条件,我们可以用所有的格子减去已经排除的格子,再减去剩余的炸弹数,也就是进行是否已经将所有格子排查的判断,在最后只剩10个炸弹时,结束游戏,跳出循环。
为了保证程序的健全性和可读性,我们采用多文件的方法实现扫雷小游戏。用game.h存储头文件信息以及宏定义和函数声明,用board.c文件存储游戏里面的基本逻辑函数,用game.c文件存储游戏的主要功能以及主体
2.游戏主体逻辑实现以及代码
这里#include包含的头文件是我们自定义的头文件,里面有我们需要的头文件和函数声明,首先我们定义一个input输入实现记录玩家对于是否开始游戏的选择,用do...while...循环来实现先运行循环体让玩家决定是否进入游戏,在判断玩家的输入,以便于让玩家重复输入以及重复的游玩游戏,其中的srand函数是生成随机数的种子
3.游戏的初始化
我们用俩个二维数组来做记录,一个用来保存我们实际上的地雷存储位置,一个用来打印在屏幕上让玩家观看,俩个数组同等大小,之所以使用11行和9行是为了方便后面判断周围的炸弹数,也是方便后面进行交换打印等等操作,但是实际上对玩家展示的只有1~9行和列,也就是最外边一圈不展示。这里利用传的参数(char ret)不同,来实现对俩个数组进行不同的初始化。至于ROW, ROWS, COL, COLS则是我们为了方便使用以及后期修改,对于行和列进行的宏定义
4.地雷位置的随机生成
还是这张图,我们是只需要使用中间部分的格子的,也就是1~9行以及1~9列,所以在放置炸弹时需要注意,不能放在外围去了
用rand函数对9取模,随机数的范围就成了0~8,加上1刚好就是1~9,将值付给x和y就得到了随机的坐标,while循环则可以反复的判断在放置地雷之前得先判断这个位置是否为空,再用count计数保证放置10个炸弹
5.打印棋盘
玩家是需要看见棋盘长什么样的,要给玩家提供一个可视化的界面,实现如下:
6.扫雷
做好一切准备工作后,就可以开始正式的扫雷了,首先让玩家输入一个坐标,用x和y进行保存记录,然后判断这个坐标是否在9*9的格子里面,如果不在就让玩家重新输入,可以用while循环实现重复的过程,拿到这个坐标以后判断是否踩雷,如果踩雷则弹出被炸死的信息,然后打印炸弹的位置,结束游戏,如果没有,则用一个函数来计算周围有多少个炸弹,定义个整数win来统计已经判断安全的位置,最后用所有的格子数减去炸弹数,再让win和这个数比较,就可以得到是否已经全部盘查完毕,如果是,就宣布游戏胜利,结束游戏,如果没有排查完,就继续游戏继续排查
这里我们定义一个函数来判断周围炸弹数量
以上就完成了扫雷游戏的绝大部分内容,剩下的只需要稍微拼接,修补一下就可以得到完整的程序代码,以下完整的一下代码奉上
7.游戏的完整代码
1.头文件代码
2.游戏逻辑代码
3.游戏主体代码
- 点赞
- 收藏
- 关注作者
评论(0)