淘宝上好多卖跳一跳代练的,其实做一个很简单,不需要有安卓开发知识,不需要有图像识别知识,不需要有人工智能知识!重要的事情说三遍,都不需要。
简单说一下思路:
1.用adb连手机截图,命令是:
adb shell screencap -p /sdcard/screen.png
adb pull /sdcard/screen.png
这样,屏幕就抓到本地了
2.用adb模拟按键
adb shell input swipe 800 800 800 800 650
就是在800x800这个位置按650ms
3.通过抓到的图,计算长度,换算成按屏幕的时间,模拟发出按键就可以了
4.想自动跳,就需要找到旗子和目标的位置,我把图片缩放成im.resize((1080/3, 1920/3))
4.1找到脑袋旗子脑袋有个像素值是:RGB(77, 71,116),找到这个点,往下55个像素大约就是底座的位置
p = im.getpixel((x, y))
if abs(p[0]-77)<5 and abs(p[1]-71)<5 and abs(p[2]-116)<5:
x+=1
y+=55
4.2找目标的值,这个想找准比较难,但是大差不差没问题
1)取到背景颜色,沿y往下搜索,发现一个不是背景的时候,应该就是目标的最上面的点
问题1,有可能旗子比目标还要高,于是判断这个时候的 x 是否和(4.1)判断旗子x相差正负20像素,如果和棋子x比较近,需要丢弃继续找
问题2,如果目标是圆形,可能造成获取定点偏左,于是需要往后找,找到园顶中心那个点
2)确定了定点,往下寻找中心点
如果是纯色,找到第一个不是该颜色的点即可,这个两点长度的一半就是中心,但是中间有可能是白点,需要忽略白点的 RGB(245,245,245)
如果是杂色 ,则搜索的长度比较小,这时固定往下移动10像素当中心点就好了,跳不准但不会跳出
4.3找到起始点,和终点,计算一下距离,就可以开始跳了。
代码不贴了,很简单的。
最后,无图无真相
跳了两小时,1w分以上没啥意思了,也没什么变化了,可以跳到手机没电。