对于此游戏实现进行分析,建议三个文件进行编写,分别以text.c为主体进行运行,game.h为主体内函数的声明,game.c为函数的实现(此方法方便查看内容,以及实现程序分工)
1.进入游戏
首先每个游戏的进入都是需要一个进入画面的,这里我用menu()函数来实现
接下来需要的是输入数字并进行判断是否进行游戏,这里需要使用分支语句switch()但当玩完后又想再玩一次时,可以使用do while循环,这样一个简单的进入界面就完成了
2.游戏界面
首先应该想一下如何打印出一个扫雷的游戏初始界面,首先需要确定行与列,如果说单纯在主体内部进行定义,会发现有局限性,若想修改行与列比较麻烦,所以这边定义一个行与列,至于ROWS后面会讲到
观察一下,发现其样式可以使用二维数组实现,但是这如何判断雷的位置呢?
2.1如何判断雷?
试想一下建立两个完全一样的二维数组,其中一个里放雷,一个用于排查,这样只需判断两个数组相同位置处值的关系,所以创建show与mine的二维数组
2.2初始化棋盘
创建后肯定需要打印出二维数组,这里需要我们初始化一下数组mine(雷)与show里的值,这里就将show里值初始化为‘*’,mine内初始化为‘0’
所以创建函数my_board初始化棋盘
这里可以进行整合,用set来接收初始化值
2.3打印棋盘
初始化结束后,则就需要打印出棋盘,创建一个打印棋盘的函数displayboard
这样游戏的界面就完成了,运行结果如下
3.开始游戏
既然已经打印,那么就可以开始游戏啦,那么首先就应该让玩家输入坐标把,输入完判断是否是雷,是雷怎么样,不是雷又怎么样。
3.1放置雷
雷肯定是此游戏的关键啦,不然为啥叫扫雷呢?哈,那么接下来就要安放雷了,创建函数setmine
雷肯定是要随机放吧,所以需要rand()的参入,而这个范围呢?肯定要在row与col之内吧,所以写成rand()%row+1
尽然有rand的出现必然伴随着主体中有srand存在,与时间戳的存在
利用二维数组交换将数组内为0处替换为1,重复循环10次,当count为0时,跳出循环
注:这里的count与上文一样,方便修改雷的个数
3.2查找雷
放置好雷后肯定需要查找雷吧,这里又需要进行创建函数findmine
3.2.1输入坐标
坐标在此处是否越界需要考虑,所以写一个if语句判断一下,输入是否越界
满足则进行下一步,不满足则提示一下
3.2.2判断是否为雷
首先需要明确对于输入坐标有几种可能
输入坐标为雷则游戏结束
输入坐标不为雷
首先明确,在输入坐标周围为哪些坐标(注意x为行,y为列)
以上就是一个9宫格,判断一下可以看出可以写成一个for循环的形式
这样count就应该是在show棋盘上显示的数,所以用二维数组替换
这里chount为整数型,进行转换为字符型
整体内容如下
判断赢
以上部分基本上将游戏内容写完,接下来最后就要判断输赢了,可以知道,棋盘总数为row*col
需要排查的次数为减去雷的数量,这样就可以得知循环的次数为row*col-easyset
所以写成如上所示
总结语
以上所有内容如有出错,希望读者大大能及时纠正,谢谢!
后续会推出更多有趣小程序,敬请期待