分析思路
将扫雷分在不同函数中,那么创建一个头文件,一个源函数(游戏函数)用于放置我们所需的函数,另一个源函数放置我们游戏主体。
游戏主体包括菜单函数和游戏函数。
游戏主体
在这里我使用while和goto语句,实际上可以使用do while也可以。
分成三种情况:输入1;输入0;输入其他数字。当输入1游戏就开始;输入0游戏结束;输入其他数字那么就提醒玩家重新输入。使用goto语句,当输错两次,将重新打印菜单。
菜单函数
菜单函数只有打印,没有返回值那么用void
游戏函数
游戏中包括选择难度,布置雷,统计雷数,判断输赢。
选择难度
使用degree函数,当玩家选完应该返回游戏函数中,所以返回a值来判断。在这里我只设计了一个难度,如果输入超过3的数,程序会停止(这里设计和前面一样,以后可以不断丰富)
布置雷
最简单的难度是9*9的格子,那么我们可以用二维数组。先假定雷为1,空白为0。那么就会有一个问题:是1就游戏结束了,那么玩家会不懂这个显示出来的1是已经踩雷还是表示周围有一个雷。
这样非常糟糕,所以我们使用两个二维数组,一个用于放雷(mine),一个用于显示雷(show)
还有一个问题,当雷出现在数组边缘时,没有办法计算雷数,因为会越界查找。
所以我们将数组从9*9改为11*11,这样可以只使用中间9*9的框,解决了越界访问的问题。
初始化棋盘(board)
使用函数(mines)
我们是随机布置雷,这里必须写while(m)不是while(m--)原因是雷有可能放置在同一处,通过if语句后,雷总数变少了。
所以使用rand和time函数,记得声明和头文件
统计雷数
这里将用户输入的坐标发给get函数查找雷数,下面代码只是将(i,j)坐标旁八个坐标的雷数进行统计并返回show函数,等待打印。
打印
判断输赢
排查成功,打印周围雷数(show),排查失败打印雷的位置(mine)
最后做好头文件
游戏运行问题
难度只有简单,这个需要后面继续优化
一共要输入71次,非常麻烦,不能像正常扫雷一样揭开附近不是雷的区域。