您的位置:首页 > 其它

小游戏系列算法之四扫雷游戏核心算法,非递归无雷区自动翻开

2013-04-29 13:48 337 查看
首先我们来分解一下扫雷游戏应该实现的功能

1.地图创建

2.计算点击位置周围雷的数目

3.无雷区自动翻开

4.胜负判决

第一步,地图创建,十分简单,创建一个二维数组类储存地图的相关信息则可,0表示无雷,1表示有雷。



第二部,计算点击位置周围雷的数目

这个也很简单,遍历目标单位上下左右共八个格子就可以了,注意排除越界情况

function round(x,y) retun count

count是雷的数目



第三部 无雷区自动翻开

所谓无雷区自动翻开,就是点击一个位置,如果是0,也即是无雷,那么就翻开他的上下左右8个格子,然后对这八个格子进行检查,如果当中某个格子也是0,那么继续对这格子的上下左右进行检查,如此反复。

这个用递归自然可以实现,但是递归的效率并不高,而且有层次限制。这可能也是为什么给个选做用非递归实现的原因。我当然也用非递归实现咯。

思路很简单,新开两个数组一个是待检测数组,一个是已检测数组

检查某个位置,如x,y时,先把它Point(x,y)(或者是其他类似的地图单元类,记录地图单元信息)push进待检查数组。然后循环

while(待检测数组的长度>0){

count = round(point.x,point.y)

把point从待检测数组放到已经侧数组

如果count等于0,把point周围的八个point放进待检测数组,注意如果已检测数组里面已经有那个point了,就不要把它加到待检测数组里面,不然会死循环



就是这么简单,其实和广搜的原理差不多

4.胜负检测

这个更简单了,判断下点击的位置有枚炸弹,如果无运行第三步,然后检测剩下的格子和雷数是不是一样就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: