源码
Python源码下载
工具介绍
- Python或Anaconda
- 手机或模拟器,用于运行游戏
- ADB 驱动,下载地址
- 相关依赖,例如PIL库
实现原理:
精确测量出起始和目标点之间测距离,估计按压的时间来精确跳跃。
思路:
核心:每次落稳之后截图,根据截图算出棋子的坐标和下一个块顶面的中点坐标,根据两个点的距离乘以一个时间系数获得长按的时间
识别棋子:靠棋子的颜色来识别位置,通过截图发现最下面一行大概是一条直线,就从上往下一行一行遍历,比较颜色(颜色用了一个区间来比较)找到最下面的那一行的所有点,然后求个中点,求好之后再让 Y 轴坐标减小棋子底盘的一半高度从而得到中心点的坐标
识别棋盘:靠底色和方块的色差来做,从分数之下的位置开始,一行一行扫描,由于圆形的块最顶上是一条线,方形的上面大概是一个点,所以就用类似识别棋子的做法多识别了几个点求中点,这时候得到了块中点的 X 轴坐标,这时候假设现在棋子在当前块的中心,根据一个通过截图获取的固定的角度来推出中点的 Y 坐标
最后:根据两点的坐标算距离乘以系数来获取长按时间(似乎可以直接用 X 轴距离)
操作步骤
1、将手机点击到《跳一跳》小程序界面;
2、用 ADB 工具获取当前手机截图,并用 ADB 将截图 pull 上来
adb shell screencap -p /sdcard/autojump.png adb pull /sdcard/autojump.png
3、计算按压时间
手动版:用 Matplotlib 显示截图,用鼠标点击起始点和目标位置,计算像素距离;
自动版:靠棋子的颜色来识别棋子,靠底色和方块的色差来识别棋盘;
4、用 ADB 工具点击屏幕蓄力一跳;
adb shell input swipe x y x y time(ms)
安卓手机操作步骤
安卓手机打开 USB 调试,设置 > 开发者选项 > USB 调试
电脑与手机 USB 线连接,确保执行adb devices可以找到设备 ID
界面转至微信跳一跳游戏,点击开始游戏
运行python wechat_jump_auto.py,如果手机界面显示 USB 授权,请点击确认
请按照你的手机分辨率从./config/文件夹找到相应的配置,拷贝到 *.py 同级目录./config.json(如果屏幕分辨率能成功探测,会直接调用 config 目录的配置,不需要复制)
iOS 手机操作步骤
运行安装好的 WebDriverAgentRunner
将手机点击到《跳一跳》小程序界面
运行脚本。有两种模式可供选择:手动辅助跳 和 自动连续跳
手动辅助跳
命令行运行python3 wechat_jump_iOS_py3.py
依次点击弹出的窗口中的起始位置和目标位置,会自动计算距离后起跳
根据起跳的精准情况更改python3 wechat_jump_iOS_py3.py中的time_coefficient参数,直到获得最佳取值
自动连续跳
拷贝./config/iPhone目录下对应的设备配置文件,重命名并替换到./config.json
命令行运行python3 wechat_jump_auto_iOS.py
会自动计算坐标并连续起跳,根据起跳的精准情况更改./config.json 中的press_coefficient参数,直到获得最佳取值
主代码示例(wechat_jump_auto.py):
开发者GitHub:wangshub
# coding: utf-8 import os import sys import subprocess import shutil import time import math from PIL import Image, ImageDraw import random import json import re # TODO: 解决定位偏移的问题 # TODO: 看看两个块中心到中轴距离是否相同,如果是的话靠这个来判断一下当前超前还是落后,便于矫正 # TODO: 一些固定值根据截图的具体大小计算 # TODO: 直接用 X 轴距离简化逻辑