C语言实现扫雷游戏

Posted 小740

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言实现扫雷游戏相关的知识,希望对你有一定的参考价值。

一、实现内容:

在传统扫雷游戏上,添加如下功能:

        1>第一次下子,不炸死。
        2>坐标周围没雷,可以实现展开。

二、主要设计方法:

1.采用三个二维数组,分别为mine[ROWS][COLS],show[ROWS][COLS],state[ROWS][COLS]。

mine[ROWS][COLS],‘1‘’表示雷,‘0‘’表示无雷。用于初始化放置雷,后续操作只进行访问,不会进行修改。

show[ROWS][COLS],‘x’(x为数值)表示所在位置周边雷的个数,‘*’表示未被玩家扫描的位置。用于展示玩家每次扫雷后的界面展示,每次扫雷都需要进行赋值,以便展示玩家扫雷后更新的界面。

state[ROWS][COLS],初始化全为0,作为递归的标志位数组。若state[i][j]为1,则不对mine[ROWS][COLS]进行递归遍历;若state[i][j]为0并且show[i][j]为‘0’,则对mine[ROWS][COLS]进行递归遍历。

2.计算show[i][j]周边雷的数量的方法为:

在mine数组中,雷用字符‘1’表示,无雷用‘0’表示,所以某位置周边的8个字符分别-‘0’(字符0)后加和即为雷的个数(字符与字符相减得数值)。

表达式:show[i][j] = mine[i-1][j-1] +mine[i-1][j] +mine[i-1][j+1]+ mine[i][j-1] + mine[i][j+1] + mine[i+1][j-1] + mine[i+1][j] +mine[i+1][j+1] - 8 * '0';

三、设计步骤:

四、实现代码

 

 

五、测试结果 

 

六、问题与反思

        在用递归函数实现任一坐标周围没雷,可以实现展开的过程中,出现了溢出。

        主要原因是在不采用标志位进行标记,直接进行某一坐标周围的8个坐标进行函数调用,然后在继续对8个坐标周围的坐标遍历……,递归调用的空间复杂度为以8为底的指数级,发生了溢出。

        解决办法:采用标志位进行标记,已调用过的坐标标志位设置为1,后续不进行递归。

        

以上是关于C语言实现扫雷游戏的主要内容,如果未能解决你的问题,请参考以下文章

C语言游戏玩转扫雷——简单扫雷功能的实现!

C语言实现入门级小游戏——扫雷

C语言游戏超详解扫雷游戏完整版,细节满满!!

C语言游戏超详解扫雷游戏完整版,细节满满!!

C语言实现扫雷游戏(超详细)

c语言初学者如何代码实现 扫雷 游戏