前白:最近也没啥事,就想着自己写一个消消乐耍一下。目的就是为了提升自己,然后就这么搞了一下下,整个过程也没参照别人的代码,所以有啥不当之处请指教。毕竟大佬之路崎岖,菜鸡不易,期与各道友共勉。
思路:这里我检测的是单个物体是否可以消除,就需要获取与目标物体样式相同的周围物体的索引(只需要判断目标上下左右四个方向各两个物体就可以了),然后根据位置判断消除方式(消除方式:三连;四连;五连;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)