改进了一下计算砖块的方式,从中间线向两边找.
测试机型 小米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通用判断