扫雷游戏是怎么玩。
游戏的界面是许多的小格子组成,其中放有雷,而在点击其中的一个小格子是会显示出周围的八个格子雷的数量,再把其信息放到其格子中,如下面中的‘2’数字,代表了周围有八个格子中有俩个是雷。由此可以往下继续思考。
代码的思路:创建数组-->初始化数组-->打印棋盘-->设置雷-->返回雷信息-->找雷阶段
创建数组的阶段
其中我们可以把雷在代码中用‘1’来表示,没有雷的地方初始化为‘0’,而棋盘我们可以用二维数组来表示。我们需要创建俩个数组,为什么呢?因为,我们的雷初始化为‘1’,而查询周围的格子也可能为‘1’,会造成歧义,而再加上如果为俩个数组的话更加的容易理清思路。一个数组为藏雷的数组,一个数组为排查雷返回显示信息的数组。
而为了神秘感,把排查雷的数组最开始都初始化为‘*’。后,在想我们需要什么样的数组,初始化为‘*’,就需要字符数组,所以就把 数组定为字符数组(俩个数组),这样也方便后的操作。(只需要写一个初始化函数)
而后,我们需要多大的数组呢?[11][11]的不要[9][9],因为,这样的话,方便在排查雷时候,数组不会越界:也不用加其他的限定条件,用[9][9]的话,其次,在输入要排查的坐标的话,就不用再去减一,这样也方便。
其中的ROWS和COLS为11。
运用#define可以方便以后对于棋盘大小的修改,而对于定义ROW和COL是因为我们主要的还是对于9×9棋盘的操作,11×11的主要是防止数组越界的而已。
初始化数组的阶段
初始化数组时我们可以把‘*’或‘0’传参,这样我们就可以只用写一个函数,不用写俩个函数来初始化数组,这样就更加的方便。
打印棋盘的阶段
其的代码的第一个for循环时先打印出0到9的数字,后俩个for循环嵌套是先打印1再打印‘*’后换行,以此类推打印出棋盘。
设置雷的阶段
其中的EASY_COUNT是设置雷的数量,同样设置成#define,方便再后续来增加减少雷的数量,来调整扫雷的难度。
返回雷信息的阶段
返回雷信息是扫描周围的八个格子来扫描有几个雷。我们在初始化布置雷的棋盘的时候,‘1’为雷,‘0’为没有雷,所以,我们可以把周围的八个格子都加起来,再去减去8ב0’,就能得到雷的信息。因为,字符‘1’的Ascll值为49,字符‘0’的Ascll值为48。俩个相减就能得到雷得数量。(两个相减为数值)
找雷阶段
把找雷的阶段分为三个分支,一 坐标输入非法;二 踩到雷;三 符合输入找雷。而在第三个分支又分为俩个支路(一个是正式找雷,另一个是输入的坐标重复)。在其中用到了continue,输入的坐标非法的话就会跳过本次的循环。在其中的 show[i][j] = count + '0'语句中,排雷返回的值要加个字符‘0’,因为 排雷返回的值只是一个数值而已,而我们所创建的数组为字符数组,不符合类型,所以,再加字符‘0’重新转为字符数字来显示出来。我们创建个变量win来记录成功排查格子的数量,只有在成功排查格子时win才会++。最后,while循环的条件为win <=ROW * COL - EASY_COUNT,在排查除雷的全部格子后才会退出循环,而这也是扫雷成功的条件。至此扫雷游戏设计就结束。
最后,代码只是基础的扫雷游戏,功能还有其它的欠缺。其中若有有什么错误或不足的地方,希望大家能够帮我指出,谢谢。期间发现错误会进行修改。