飞猪旅行,飞猪闯关记辅助

改进了一下计算砖块的方式,从中间线向两边找.
测试机型 小米max2 miui8 已root.
测试时间: 2018年3月15日10:03:58
测试次数: 5次
通关: 110
初次使用 建议到设置里打开 音量上键关闭所有运行脚本. 然后打开悬浮窗(miui等机型需要设置悬浮窗权限). 然后在飞猪里使用悬浮窗,找到你导入的脚本,运行它.

我快抓狂了,明明在一个账号上测试没问题.换个账号就gg了.
2018年3月15日13:19:07 ,附上中午的测试脚本,1920x1080下 找了下砖缝的位置 ,颜色比较单一.
2018年3月15日15:02:29 中午的版本小改,版本三我用起来效果不错. 特意加了点输入框之类的, 比如你要跑30次的奖励,就输入30. 够次数后自动失败,就能领奖了.
另外我发现埃及金字塔下那张图,识别不是很好. 没点开始时,背景如果是金字塔,就别进了,重新打开试试.
今天测试发现切换账号后,点击失效,没几步就挂了,这时清内存. 重新开.就好了.给后来者点建议.

版本三

requestScreenCapture();//请求截图
var n = device.width / 1080;
var v = device.height / 1920;
var sfr = "no";

var vid = 1.3;//点击按屏时间系数

try {
    root_automator = new RootAutomator();
    sfr = "root";
} catch (e) {
    sfr = "noroot";
}

console.show();//显示控制台


var awc = 10; //比色误差

 // 每此操作完后等待小猪走完的时间间隔. 单位:毫秒
 // 如果在你机器上这个数字过小 建议每次加500 
var sleepTime = 5000;
// 执行次数 默认110次结束
// 
var runTime = rawInput("请输入次数", 100 + random(5, 20));
// var runTime = 100 + random(5, 20);
sleep(2000);

var i = -2;
var blockColor = -8839915;
var blockColor2 = -8118505;

var step = 10;
while(true){
	i ++;
	if(i> runTime){
		//随便按一下
		presso(963 * n + random(-10, 10), 1588 * v + random(-10, 10), 100);
		console.info("结束了,最后一次随便按下");
		break;
	}

	var tp = capturescreen();//获取截图

	var fx1 = 0;
	var fx2 = 0;
	var need = 1;

	// 分辨率高度 -22个像素 是砖块缝隙位置 颜色比较一致
	var y0 = 1898 * v;

// for(var x0 = 60 * n; x0 < 1000 * n ; x0 += step * n){
//  			var ys = qs(tp, x0, y0);
//  			console.info("d: ",x0, ys, colors.red(ys), colors.green(ys), colors.blue(ys), abs(ys, blockColor), abs(ys, blockColor2));
//  }

	
	var lastYs = 0;
	for(var x0 = 540 * n; x0 > 60 * n ; x0 -= step * n){
			var ys = qs(tp, x0, y0);
			var nextYs = qs(tp, x0 - step * n, y0);
			//console.info("fx1 find: ",ys, lastYs);
			if(lastYs == 0){
				lastYs = ys;
			}else if(!validateColor(lastYs) && validateColor(ys) && validateColor(nextYs)) {
				fx1 = x0;
				break;
			}else{
				lastYs = ys;
			}
	}

	lastYs = 0;
	// 自动加大100个像素单位 兼容一下异常情况 一般坑的宽度不可能100个像素 太窄了
	for(var x0 = 540 * n; x0 < 1000 * n ; x0 += step * n){
		var ys = qs(tp, x0, y0);
		var nextYs = qs(tp, x0 + step * n, y0);
		//console.info("fx2 find: ",ys, lastYs);
		if(lastYs == 0){
			lastYs = ys;
		}else if(!validateColor(lastYs) && validateColor(ys) && validateColor(nextYs)) {
			fx2 = x0;
			break;
		}else{
			lastYs = ys;
		}
	}


if(fx1 ==0 || fx2 ==0){
	console.info("识别出错了,需要看看为啥,关了脚本手动跳过去吧");
	break;
}
	
	// 得出来的位置差 其实就是坑的宽度
	console.info(fx1, fx2 , " 坑的宽度 ", Math.abs(fx2-fx1));

	var time = Math.abs(fx2-fx1) * vid;
	presso(963 * n + random(-10, 10), 1588 * v + random(-10, 10), time);
	console.info("按压完毕,等小猪走图");
	sleep(sleepTime);
	console.info("休息完毕,如果猪猪还没走完,请加大sleepTime,否则会影响杆的长度,导致失败");
	console.info("");
}





function validateColor(c){

	if(abs(c,-7986407) || abs(c,-8118505) || abs(c,-8839915)){
		return true;
	}

	// if(c == -7986407 || c == -8118505 || c == -8839915){
		// return true;
	// }
	return false;
}

//获取截图,返回图片对象
function capturescreen() {
    while (true) {
        if (ajt = captureScreen()) {
            return ajt;
            break;
        }
    }
}


function qs(a, b, c) {
    return images.pixel(a, b, c);
} //取色函数简化为qs(),方便后面调用,也可以写成qs=images.pixel;

function abs(a7, a8) {
    if (Math.abs(colors.red(a7) - colors.red(a8)) < awc && Math.abs(colors.green(a7) - colors.green(a8)) < awc && Math.abs(colors.blue(a7) - colors.blue(a8)) < awc) {
        return true;
    } else {
        return false;
    }
}//比色函数,比色误差为第10行定义的


function presso(x, y, duration) {
    // log(duration);
    // var t0 = (new Date()).getTime();
    if (device.sdkInt >= 24) {
        press(x, y, duration);
    } else {
        if (sfr == "root") {
            root_automator.press(x, y, duration);
        } else {
            alert("不是安卓7.0以上也没有root权限");
            exit(); 
        }
    }
    // var t1 = (new Date()).getTime();
    // console.info(t1 - t0);
}//root与非root通用判断



最后由 小圣12345 编辑

试了一下,最远只能跳到11😬😬

怎么在手机调用代码

@liliang11 不是很清楚, 我是模仿微信跳一跳的写法写的.你可以试试....

我的运行起来第一个走一点就死掉了

荣耀V8,第一个脚本运行划线很短,第一次就死掉。第二个脚本运行之后只提 示 识别出错了,找找原因😿
我的屏幕分辨率应该是1440*2560的2K屏。

最后由 wangaigui 编辑

可以做成点击确认运行吗

楼主有考虑过分辨率或者尺寸方面的问题吗,新版识别出错。我手机5.5,上一个版本都能用,不应该啊。

@wangaigui 欢迎再试试,抱歉一直在改动,没找到好方案.

以成功用楼主脚本做满3个100,谢谢楼主啦

此回复已被删除!

@小圣12345 又刚试过了,还是不行,第一版可以运行,但是划线太短。
当前的还是提示
识别出错了,需要看看为啥

  • 69
    帖子
  • 5846
    浏览

与 Auto.js 的连接断开,我们正在尝试重连,请耐心等待