Skip to content

利用MonkeyRunner(WebDriverAgent)和OpenCV在安卓(iOS)设备上自动玩微信跳一跳小游戏。

License

Notifications You must be signed in to change notification settings

berkejf/wechat_automated_jump_game

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

自动玩微信跳一跳小游戏

利用MonkeyRunner和OpenCV在安卓设备上自动玩微信跳一跳小游戏。

依赖

  • OpenCV
    • Mac下使用
  • numpy
    • 使用 pip 安装:pip install numpy
  • flask
    • 使用 pip 安装:pip install flask
  • monkeyrunner
    • 位于 Android SDK 中:tools/bin/monkeyrunner
  • adb
    • 位于 Android SDK 中:platform-tools/adb

原理说明

本项目通过图像处理的方式从屏幕截图中判断棋子当前位置和目标棋盘位置。

  1. 使用 Template Matching 的方式在截图中识别棋子当前位置。
  2. 对截图进行边缘检测,然后在合适的区域内自上而下寻找第一个形状的顶部中心点和最右点,再计算出目标跳跃位置。
  3. 计算棋子当前位置到目标跳跃位置的距离。
  4. 将距离映射为按压时间。
  5. 控制设备进行模拟点击操作。

项目结构说明

项目主要分为两部分:计算跳跃时间的服务端(server.py)和执行设备控制操作的客户端(目前仅有安卓MonkeyRunner脚本monkeyrunner.py)。

执行设备控制操作的客户端首先对设备进行截图,然后将截图通过POST方式发送到服务端的HTTP接口上,计算跳跃时间的服务端对截图进行处理并返回对应的按压时间,客户端在设备上模拟点击操作。

操作步骤

  1. 启动计算跳跃时间的服务端:python server.py,服务端默认监听 127.0.0.1:5000。可选启动参数见 python server.py -h
  2. 安卓手机开启USB调试,通过USB线连接到电脑。
  3. 使用ADB列出连接的安卓设备:adb devices,并记录设备ID如 WTKDU1670700000
  4. 启动MonkeyRunner:monkeyrunner monkeyrunner.py WTKDU1670700000 http://127.0.0.1:5000。注意将 WTKDU1670700000 替换为上一步记录的设备ID,如果启动服务端时修改了监听端口,则第二个参数也需要对应修改。
  5. MonkeyRunner提示 Press enter to start 后,在微信中打开跳一跳并开始游戏,然后在MonkeyRunner中按下回车键。

已知问题

  • 圆形和长方形的棋盘位置判断可能会有偏差,但不致命。
  • 音乐盒的音符可能会干扰棋盘位置判断,致命。(已尝试修复,未确认)

TODO

  • 增加iOS脚本?
  • 也许可以把服务端部署在服务器上。
  • 优化性能。
  • 优化圆形和长方形棋盘的处理。

QA

安卓手机需要ROOT吗?

不需要ROOT。但需要电脑安装 Android SDK。只需要命令行工具即可,不需要Android Studio

About

利用MonkeyRunner(WebDriverAgent)和OpenCV在安卓(iOS)设备上自动玩微信跳一跳小游戏。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%