三消核心代码

本文深入探讨了三消游戏的核心算法,从匹配规则到消除逻辑,详细解析了如何实现这一经典游戏的关键代码。通过实例分析,帮助读者掌握动态更新游戏板和防止无限循环的策略。此外,还介绍了优化算法以提高游戏性能的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

var that = this;
    //相邻块的交换、相邻的块改变点击状态、改变点击的块的形态
    this.touchListener = cc.eventManager.addCustomListener("checkClick", function (event) {
        var box = event.getUserData();
        cc.log(box.arrindex.x, box.arrindex.y);
        if (that.oldCell == null) {
            that.oldCell = box;
            that.oldCell.opacity = 100
        }
        else {
            var o = cc.p(box.arrindex.x, box.arrindex.y);
            var a = cc.p(that.oldCell.arrindex.x + 1, that.oldCell.arrindex.y);
            var b = cc.p(that.oldCell.arrindex.x - 1, that.oldCell.arrindex.y);
            var c = cc.p(that.oldCell.arrindex.x, that.oldCell.arrindex.y + 1);
            var d = cc.p(that.oldCell.arrindex.x, that.oldCell.arrindex.y - 1);
            if (o.x == a.x && o.y == a.y || o.x == b.x && o.y == b.y || o.x == c.x && o.y == c.y || o.x == d.x && o.y == d.y) {
                that.oldCell.opacity = 255;
                that.exchange (box, that.oldCell);
                that.oldCell = null
            }
            else if (box.opacity < 255) {
                box.opacity = 255;
                that.oldCell = null
            }
            else {
                that.oldCell.opacity = 255;
                box.opacity = 100;
                that.oldCell = box
            }
        }
    })
},
//让可以三消的数组中元素不重复
filterDelSame: function (arr1, arr2) {
    var returnArr = arr1.concat(arr2);
    for (var i = 0; i < returnArr.length; i++) {
        var nowPo = returnArr[i];
        for (var j = i + 1; j < returnArr.length; j++) {
            if (cc.pSameAs(returnArr[j], nowPo)) {
                returnArr.splice(j, 1);
                j--
            }
        }
    }
    return returnArr
},
//相邻块交换后判断是否可以三消
exchange : function (text1,text2) {
    var a = this.Arr[text1.arrindex.x][text1.arrindex.y];
    this.Arr[text1.arrindex.x][text1.arrindex.y] = this.Arr[text2.arrindex.x][text2.arrindex.y];
    this.Arr[text2.arrindex.x][text2.arrindex.y] = a;

    var moveTo = cc.moveTo(0.5, cc.p(text2));
    text1.runAction(moveTo);
    var moveTo = cc.moveTo(0.5, cc.p(text1));
    text2.runAction(moveTo);

    var by = null;
    by = text1.arrindex;
    text1.arrindex = text2.arrindex;
    text2.arrindex = by;

    text1.gengxing(text1.arrindex);
    text2.gengxing(text2.arrindex);

    var tp = this.linkLength();
    if (tp == false) {
        this.scheduleOnce(function () {
            var moveTo = cc.moveTo(0.5, text1);
            text2.runAction(moveTo);
            var moveTo = cc.moveTo(0.5, text2);
            text1.runAction(moveTo);
            var by = null;
            by = text1.arrindex;
            text1.arrindex = text2.arrindex;
            text2.arrindex = by;

            text1.gengxing(text1.arrindex);
            text2.gengxing(text2.arrindex)

        }, 1)
    }
    else {
        this.scheduleOnce(function (){
            this.Drop (tp)
        },0.51)
    }
},

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值