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

首先我们来分解一下扫雷游戏应该实现的功能
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.胜负检测
这个更简单了,判断下点击的位置有枚炸弹,如果无运行第三步,然后检测剩下的格子和雷数是不是一样就可以了。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值