自制消消乐检测算法部分(ts)

博主使用egret引擎和fairygui编辑器自制消消乐游戏,通过获取目标物体周围相同样式的物体索引来判断消除可能性。检测包括三连、四连、五连及特殊形状消除。代码实现中存在一些可以优化的地方,但博主决定暂时不进行修改。算法实现花费三天时间,包括基础UI、检测逻辑和BUG修复。由于公司项目需求,游戏开发未能进一步完善。
摘要由CSDN通过智能技术生成

前白:最近也没啥事,就想着自己写一个消消乐耍一下。目的就是为了提升自己,然后就这么搞了一下下,整个过程也没参照别人的代码,所以有啥不当之处请指教。毕竟大佬之路崎岖,菜鸡不易,期与各道友共勉。
思路:这里我检测的是单个物体是否可以消除,就需要获取与目标物体样式相同的周围物体的索引(只需要判断目标上下左右四个方向各两个物体就可以了),然后根据位置判断消除方式(消除方式:三连;四连;五连;L或者T型)。
描述:采用的是egret引擎开发,使用的是fairygui编辑器。页面物体所在的格子10 * 10(0 - 99),物体的索引和对应的物体用键值对保存(就是下文的list)。
正文

let nums:number[] = [];
let numNull:number[] = [];
/** 获取周围八个物体有几个与检测物体样式相同,初始化的时候
 * 左上两个检测是否大于0
 * 右下两个方向检测是否在list里面存在
*/
// 上方
let type = list.getValue(index).getNowType();
if(index - 20 >= 0 && list.containsKey(index - 20)) {
	if(list.getValue(index - 20).getNowType() == type)
		nums.push(index - 20);
}
if(index - 10 >= 0 && list.containsKey(index - 10)) {
	if(list.getValue(index - 10).getNowType() == type)
		nums.push(index - 10);
}
// 左方
if(Math.floor((index - 2) / 10) == Math.floor(index / 10) && list.containsKey(index - 2)) {
	if(list.getValue(index - 2).getNowType() == type)
		nums.push(index - 2);
}
if(Math.floor((index - 1) / 10) 
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值