Autojs实现消消乐自动消除脚本

概要

最近想写一个消消乐自动消除的脚本,研究了一下,总结出这种三个相连消除的逻辑

消除逻辑

大多数的消消乐,都是x轴或者y轴三个相同颜色相连便可以消除,总结出12中消除方法,这里先讲一下消除逻辑,再将具体的代码逻辑
在这里插入图片描述
先判断x轴
在这里插入图片描述
1.x轴 ,以当前检测的颜色坐标为原始坐标x,y,向当前行的下一列x,y+1检测,是否跟原始坐标颜色一样,如果一样就有四种可能,不一样就继续检测下一个颜色
判断这四种可能的颜色值和原始坐标的颜色值是否相同,相同执行相应的滑动即可
在这里插入图片描述
2.x轴 ,以当前检测的颜色坐标为原始坐标x,y,向当前行的下2列x,y+2检测,是否跟原始坐标颜色一样,如果一样就有2种可能,不一样就继续检测下一个颜色
在这里插入图片描述
如果相同就检测中间上下颜色是否跟原始坐标相同
在这里插入图片描述

接着判断y轴
在这里插入图片描述在这里插入图片描述
能看到这里,这几张图能看明白就理解逻辑

如果图片没看懂,就看一下总结的文字逻辑
12种情况
1、x轴颜色相同相邻的两个格子,分别判断左边格子的左上方和左下方的一格格子的颜色,是否跟当前相邻的两个格子的颜色相同,左上方相同就向下滑动,左下方相同就向上滑动;分别判断右边格子的右上方和右下方的一格格子的颜色,是否跟当前相邻的两个格子的颜色相同,右上方相同就向下滑动,右下方相同就向上滑动
2、y轴颜色相同相邻的两个格子,分别判断上边格子的左上方和右上方的一格格子的颜色,是否跟当前相邻的两个格子的颜色相同,左上方相同就向右滑动,右上方相同就向左滑动;分别判断下边格子的左下方和右下方的一格格子的颜色,是否跟当前相邻的两个格子的颜色相同,左下方相同就向右滑动,右下方相同就向左滑动
3、x轴相邻的三个格子,中间颜色不同,左右颜色相同,滑动中间不同颜色格子的上下格子
4、y轴相邻的三个格子,中间颜色不同,上下颜色相同,滑动中间不同颜色格子的左右格子
横排x轴判断:判断当前颜色x1的下一个格子x2颜色是否相同,相同的话行数不变,列数加一,判断12,不相同就继续识别
5、左上相同:x1的行-1,列-1,相同x3坐标下滑
6、左下相同:x1的行+1,列-1,相同x3坐标上滑
7、右上相同:x2的行+1,列+1,相同x3坐标下滑
8、右下相同:x2的行+1,列+1,相同x3坐标上滑
竖排y轴判断:判断当前颜色y1的下一列格子y2颜色是否相同,相同的话列数不变,行数加一,判断12,不相同就继续识别
9、左上相同:y1的行-1,列-1,相同y3坐标右滑
10、右上相同:y1的行-1,列+1,相同y3坐标左滑
11、右上相同:y2的行+1,列-1,相同y3坐标右滑
12、右下相同:y2的行+1,列+1,相同y3坐标左滑

CODE

提示:具体的代码我相信跟业务有关,代码也各不相同,理解逻辑就好办了,有思路问问gpt代码就出来了

  1. 颜色检测方法

把颜色分成一个个小块,检测这个小块的颜色,检测到就返回颜色值和当前颜色方块的xy坐标

	function 当前颜色检测(x, y) {
    // 颜色检测范围:region(起始x, 起始y, 宽116, 高110)
    //当前颜色识别数据:  1 绿色 2 蓝色 3 橘色 4 黄色  5 红色 6 绿色
    var colors = {color: [0, 1, 2, 3], x: 0, y: 0}
    color("#199e10", [[-24, 0, "#29be21"], [-8, -2, "#29ae19"], [8, -6, "#21a210"]]).region(x, y, widht, height).click(0, 0).clickAfter(function (xy) {
        colors.x = xy.x;
        colors.y = xy.y;
        colors.color = [1];
    }).start()
    color("#00c6ff", [[8, 0, "#00b2ff"], [14, 4, "#00aeff"], [20, -18, "#00cef7"]]).region(x, y, widht, height).click(0, 0).clickAfter(function (xy) {
        colors.x = xy.x;
        colors.y = xy.y;
        colors.color = [2];
    }).start()
    color("#ffba3a", [[-2, -4, "#ffb63a"], [-6, -8, "#ffa631"], [16, -20, "#f7b23a"], [20, -18, "#ff9229"]]).region(x, y, widht, height).click(0, 0).clickAfter(function (xy) {
        colors.x = xy.x;
        colors.y = xy.y;
        colors.color = [3];
    }).start()
    return colors;
}

2.根据行列检测颜色

根据当前的行和列来返回当前颜色的位置等信息

function 获取当前信息(当前行, 当前列) {
    var 当前x坐标 = 开始坐标x + (当前行 * widht);
    var 当前y坐标 = 开始坐标y + (当前列 * height);
    //这里需要屏幕的边缘坐标减去一个方块的位置
    if (当前x坐标 >= 964 || 当前y坐标 >= 1810 || 当前x坐标 <= 0 || 当前y坐标 <= 0) {
        return null;
    }
    // 调用当前颜色检测函数
    var 当前颜色信息 = 当前颜色检测(当前x坐标, 当前y坐标);
    // 判断 x 和 y 是否为 0,如果不为 0,则返回当前行、列以及颜色信息
    if (当前颜色信息.x !== 0 && 当前颜色信息.y !== 0) {
        return {
            行数: 当前行 + 1,
            列数: 当前列 + 1,
            颜色信息: 当前颜色信息.color,
            x: 当前颜色信息.x,
            y: 当前颜色信息.y
        };
    } else {
        // 如果 x 和 y 为 0,则返回空对象
        return null;
    }
}
  1. 循环扫描每行每列的块颜色

我这里代码行列循环有bug,建议不要c我这段代码

        for (当前列 = 0; 当前列 < 15; 当前列++) {
            for (当前行 = 0; 当前行 < 9; 当前行++) {
                var 当前信息 = 获取当前信息(当前行, 当前列);
                if (当前信息 !== null) {
                    var 右侧信息 = 获取当前信息(当前行 + 1, 当前列);
                    if (右侧信息 && 当前信息.颜色信息.toString() === 右侧信息.颜色信息.toString()) {
                        log("右侧信息:" + JSON.stringify(右侧信息));
                        var 左上信息 = 获取当前信息(当前行 - 1, 当前列 - 1);
                        if (左上信息 && 左上信息.颜色信息.toString() === 当前信息.颜色信息.toString()) {
                            console.log("左上相同,执行下滑");
                            if (左上信息.y + 滑动距离 < 1920) swipe(左上信息.x, 左上信息.y, 左上信息.x, 左上信息.y + 滑动距离, 500);
                        }
                        var 左下信息 = 获取当前信息(当前行 + 1, 当前列 - 1);
                        if (左下信息 && 左下信息.颜色信息.toString() === 当前信息.颜色信息.toString()) {
                            console.log("左上相同,执行下滑");
                            if (左下信息.y - 滑动距离 > 0) swipe(左下信息.x, 左下信息.y, 左下信息.x, 左下信息.y - 滑动距离, 500);
                        }
                        var 右上信息 = 获取当前信息(当前行 + 2, 当前列 - 1);
                        if (右上信息 && 右上信息.颜色信息.toString() === 右上信息.颜色信息.toString()) {
                            // 相同,执行下滑
                            console.log("右上相同,执行下滑");
                            if (右上信息.y + 滑动距离 < 1920) swipe(右上信息.x, 右上信息.y, 右上信息.x, 右上信息.y + 滑动距离, 500);
                        }
                        var 右下信息 = 获取当前信息(当前行 + 1, 当前列 + 2);
                        if (右下信息 && 右下信息.颜色信息.toString() === 右下信息.颜色信息.toString()) {
                            // 相同,执行上滑
                            console.log("右下相同,执行上滑");
                            if (右下信息.y - 滑动距离 > 0) swipe(右下信息.x, 右下信息.y, 右下信息.x, 右下信息.y - 滑动距离, 500);
                        }
                    }
                    var 横排第三格信息 = 获取当前信息(当前行 + 2, 当前列);
                    if (横排第三格信息 && 当前信息.颜色信息.toString() === 横排第三格信息.颜色信息.toString()) {
                        log("横排第三格信息:" + JSON.stringify(横排第三格信息));
                        var 中上信息 = 获取当前信息(当前行 + 1, 当前列 - 1);
                        if (中上信息 && 当前信息.颜色信息.toString() === 中上信息.颜色信息.toString()) {
                            console.log("左上相同,执行下滑");
                            if (中上信息.y + 滑动距离 < 1920) swipe(中上信息.x, 中上信息.y, 中上信息.x, 中上信息.y + 滑动距离, 500);
                        }
                        var 中下信息 = 获取当前信息(当前行 + 1, 当前列 + 1);
                        if (中下信息 && 当前信息.颜色信息.toString() === 中下信息.颜色信息.toString()) {
                            console.log("左上相同,执行下滑");
                            if (中下信息.y - 滑动距离 > 0) swipe(中下信息.x, 中下信息.y, 中下信息.x, 中下信息.y - 滑动距离, 500);
                        }
                    }
                    var 竖排第三格信息 = 获取当前信息(当前行, 当前列 + 2);
                    if (竖排第三格信息 && 当前信息.颜色信息.toString() === 竖排第三格信息.颜色信息.toString()) {
                        log("竖排第三格信息:" + JSON.stringify(竖排第三格信息));
                        var 中左信息 = 获取当前信息(当前行 - 1, 当前列 + 1);
                        if (中左信息 && 当前信息.颜色信息.toString() === 中左信息.颜色信息.toString()) {
                            console.log("左上相同,执行下滑");
                            if (中左信息.x + 滑动距离 < 1080) swipe(中左信息.x, 中左信息.y, 中左信息.x + 滑动距离, 中左信息.y, 500);
                        }
                        var 中右信息 = 获取当前信息(当前行 + 1, 当前列 + 1);
                        if (中右信息 && 当前信息.颜色信息.toString() === 中右信息.颜色信息.toString()) {
                            console.log("左上相同,执行下滑");
                            if (中右信息.x - 滑动距离 > 0) swipe(中右信息.x, 中右信息.y, 中右信息.x - 滑动距离, 中右信息.y, 500);
                        }
                    }
                    var 竖排信息 = 获取当前信息(当前行, 当前列 + 1);
                    if (竖排信息 && 当前信息.颜色信息.toString() === 竖排信息.颜色信息.toString()) {
                        log("竖排信息:" + JSON.stringify(竖排信息));
                        var 左上信息 = 获取当前信息(当前行 - 1, 当前列 - 1);
                        if (左上信息 && 左上信息.颜色信息.toString() === 当前信息.颜色信息.toString()) {
                            console.log("左上相同,执行右滑");
                            if (左上信息.x + 滑动距离 < 1080) swipe(左上信息.x, 左上信息.y, 左上信息.x + 滑动距离, 左上信息.y, 500);
                        }
                        var 右上信息 = 获取当前信息(当前行 - 1, 当前列 + 1);
                        if (右上信息 && 右上信息.颜色信息.toString() === 当前信息.颜色信息.toString()) {
                            console.log("右上相同,执行左滑");
                            if (右上信息.x - 滑动距离 > 0) swipe(右上信息.x, 右上信息.y, 右上信息.x - 滑动距离, 右上信息.y, 500);
                        }
                        var 左下信息 = 获取当前信息(当前行 + 2, 当前列 - 1);
                        if (左下信息 && 左下信息.颜色信息.toString() === 竖排信息.颜色信息.toString()) {
                            console.log("左下相同,执行右滑");
                            if (左下信息.x + 滑动距离 < 1080) swipe(左下信息.x, 左下信息.y, 左下信息.x + 滑动距离, 左下信息.y, 500);
                        }
                        var 右下信息 = 获取当前信息(当前行 + 2, 当前列 + 1);
                        if (右下信息 && 右下信息.颜色信息.toString() === 竖排信息.颜色信息.toString()) {
                            console.log("右下相同,执行左滑");
                            if (右下信息.x - 滑动距离 > 0) swipe(右下信息.x, 右下信息.y, 右下信息.x - 滑动距离, 右下信息.y, 500);
                        }
                    }
                }
            }
        }
  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值