背景

微信「跳一跳」是 2017 年风靡一时的小游戏。虽然热度早已过去,但作为一个计算机视觉和自动化控制的练手项目,它的技术价值依然很高。

本项目基于 GitHub 上 14,000+ Stars 的开源项目 wangshub/wechat_jump_game, 针对 vivo X200 Pro(2800×1260 分辨率)做了完整的适配工作。

技术原理

整个自动化流程分为五个步骤:

  1. 截图:通过 ADB 命令获取手机屏幕截图
  2. 找棋子:根据棋子特有的 RGB 颜色范围(R:50~60, G:53~63, B:95~110)定位棋子底部中心
  3. 找目标方块:扫描像素行,检测与背景色差异超过阈值的区域,找到下一个方块的顶面中心
  4. 计算距离:利用游戏等距视角的对称中心,从方块 X 坐标反推 Y 坐标,得到精确的中心点位置
  5. 模拟按压:基于物理抛物线模型将像素距离转为按压时长,通过 ADB 模拟触屏

按压时间的计算并非简单线性,而是基于物理公式:

scale = 0.945 × 2 / head_diameter
actual_distance = distance × scale × (√6 / 2)
press_time = (-945 + √(945² + 4×105×36×actual_distance)) / (2×105) × 1000

vivo X200 Pro 适配工作

1. 分辨率配置

X200 Pro 屏幕为 2800×1260,像素密度 560 DPI,与常见的 1080p 或 2K 分辨率都不同。需要创建专门的分辨率配置文件:

参数默认值 (1080p)X200 Pro 适配值说明
under_game_score_y300440分数栏下方 Y 坐标,按高度比例缩放
piece_base_height_1_22030棋子底盘半高,按高度比例缩放
piece_body_width7085棋子身体宽度,按宽度比例缩放
press_coefficient1.3921.0按压系数,经多次实测校准

2. 按压系数校准

这是最关键的适配工作。系数不对,不是跳太远就是跳太近,直接导致游戏失败。

校准过程:以默认系数 1.392 为起点,发现跳得太远;逐步降低到 0.65,又跳得太近。最终通过实际测算——对同一距离分别计算不同系数下的按压时长,锁定 1.0 为最优值。

校准方法:截图 → 检测棋子与目标方块坐标 → 计算像素距离 → 代入物理公式得原始按压时间 → 乘以系数得最终按压时间 → 与实际跳跃效果对比 → 迭代调整系数。

3. Python 3.14 兼容性修复

原项目发布于 2018 年,部分代码在 Python 3.14 上存在兼容性问题:

4. 触屏坐标适配

ADB 模拟按压的坐标点需要落在屏幕范围内。X200 Pro 竖屏为 1260×2800,按压坐标设为 (630, 1600),即屏幕中央偏下位置。

小白使用教程

即使你没有编程基础,跟着下面步骤一步步来,也能把跳一跳跑起来。

第 1 步:装 Python

  1. 打开 python.org/downloads
  2. 下载最新版 Python(Windows 选 64-bit installer)
  3. 安装时勾选「Add Python to PATH」(重要!)
  4. 安装完成后,打开终端(Win+R 输入 cmd),验证:
python --version

正常应显示 Python 3.x.x

第 2 步:装 ADB 工具

ADB 是 Android 调试桥,用来和手机通信。

  1. 下载 Android Platform Tools(Windows 版 zip)
  2. 解压到 C:\adb\ 目录
  3. C:\adb\platform-tools 加入系统 Path:
    • Win+S 搜索「环境变量」→ 编辑系统环境变量
    • 环境变量 → 系统变量 → Path → 新建 → 粘贴 C:\adb\platform-tools
    • 确定保存
  4. 重新打开终端,验证:
adb version

显示版本号即安装成功。

第 3 步:手机开 USB 调试

vivo X200 Pro 操作路径:

  1. 设置 → 更多设置 → 关于手机 → 版本信息
  2. 连续点击「软件版本号」7 次 → 提示「已进入开发者模式」
  3. 返回:设置 → 更多设置 → 开发者选项
  4. 打开 「USB 调试」开关
  5. 用数据线连接手机和电脑
  6. 手机弹出「允许 USB 调试」→ 勾选「始终允许」→ 确定

验证连接:

adb devices

应显示一串设备 ID + device 字样。如果没有,换一根数据线或换一个 USB 口试试。

第 4 步:下载项目

git clone https://github.com/wangshub/wechat_jump_game.git
cd wechat_jump_game

如果没装 Git,可以直接在 GitHub 页面点「Code → Download ZIP」解压。

第 5 步:放入 vivo X200 Pro 配置文件

在项目 config/ 目录下创建 2800x1260/config.json,内容如下:

{
    "under_game_score_y": 440,
    "press_coefficient": 1.0,
    "piece_base_height_1_2": 30,
    "piece_body_width": 85,
    "swipe": {
        "x1": 630, "y1": 1600,
        "x2": 630, "y2": 1600
    }
}

也可以在终端输入以下命令一键完成:

mkdir config\2800x1260
echo {"under_game_score_y": 440, "press_coefficient": 1.0, "piece_base_height_1_2": 30, "piece_body_width": 85} > config\2800x1260\config.json

第 6 步:安装依赖 + 运行

pip install Pillow six
python wechat_jump_auto.py

运行前确保:

程序启动后会连续自动跳跃,按 Ctrl+C 停止。

跳不准怎么办?

修改配置文件中的 press_coefficient 即可:

每次改完保存,重新运行脚本即可。微调建议 0.05 步进。

2025 旗舰手机参数参考

以下参数根据各机型屏幕规格计算,press_coefficient 建议在此基础上微调(±0.05)。

品牌机型分辨率press_coefficientpiece_body_widthunder_game_score_y
vivoX200 Pro1260×28001.00 ✅ 已实测85440
X200 Ultra1440×31681.0095500
小米15 Ultra1440×32001.0095500
小米 151200×26701.0580420
OPPOFind X8 Pro1264×27801.0085435
Find X81264×27801.0085435
华为Mate 70 Pro1312×28321.0085440
Mate 70 Pro+1312×28321.0085440
荣耀Magic7 Pro1312×28481.0085445
Magic71264×28001.0085440
三星S25 Ultra1440×31201.0095490
S251080×23401.3875365
一加131440×31681.0095500
AppleiPhone 16 Pro Max1320×28681.0085450
iPhone 16 Pro1206×26221.0580410
规律总结

2K+ 机型(高度 ≥ 2800px):系数 ≈ 1.00,body_width ≈ 85~95
1.5K 机型(高度 2600~2800px):系数 ≈ 1.05,body_width ≈ 80
1080P 机型(高度 ~2340px):系数 ≈ 1.38,body_width ≈ 75
配置目录命名config/{高度}x{宽度}/(如 config/2800x1260/
under_game_score_y ≈ 300 × 高度 ÷ 1920
piece_body_width ≈ 70 × 宽度 ÷ 1080
• ⚠️ 标注"已实测"的为实际校准值,其余为理论推算,建议首次使用时微调系数

踩坑记录

在做适配之前,我尝试自己从头写图像识别算法,踩了不少坑:

最终的教训是:别自己造轮子,直接用经过验证的开源方案,把精力放在适配和调优上。

技术栈

组件技术用途
图像采集ADB screencap截取手机屏幕
图像处理Pillow (PIL)像素级颜色读取、位置计算
距离建模物理抛物线公式将像素距离转换为按压时长
触控执行ADB input swipe模拟手指长按屏幕
主控逻辑Python 3.14流程编排、异常处理

本项目基于 wangshub/wechat_jump_game(MIT 协议),感谢原作者的出色工作。

⚠️ 微信对作弊行为有严格检测,本项目仅供计算机视觉与自动化技术学习研究,使用可能导致分数清零或账号受限。