Tominysun

最新更新:

使用教程

https://blog.tominysun.com/to-the-programmers-point-of-view-to-play-wechat-jump-jump-use-tutorial.html

原文

前些日子微信推出了一款小游戏「跳一跳」,游戏中玩家需要扮演一个「黑色」小人,在不同颜色、形状的跳板方块间进行跳跃。操作也很容易,按压屏幕越久,小人会跳得越远。

显然这游戏对我这样的手残党非常不友好
fail.png
若干次徘徊在十位数后,决定好好研究这个游戏,用程序员的思路去解决它。

外挂无非两种:内存修改、物理辅助。这里研究后者,也就是识别出跳跃距离后,换算成时间后模拟真实触碰操作。这种方式最保险,而且不容易被后台察觉。

观察棋子,不难发现棋子的颜色始终是没有变化的,因此可以根据颜色识别出棋子中最宽的部分,取中心即可
chess.png

棋盘部分比较难识别,忽略掉背景色后会有阴影等因素的干扰,还有前后两个棋子紧挨的特殊情况。
chess_scan.png
考虑从上到下做行扫描,提取出所有连续的颜色块,排除掉中心点与棋子过于靠近的情况,这样就避免识别到棋子头部,取最上面且长度大于棋子宽度的切片,就得到目标点横坐标。
chess_scan_1.png

对于纵坐标可以只考虑棋盘右侧,这样就不需要和阴影打交道。棋盘只有圆盘、方块两种类型,边缘的锯齿状如下
chess_scan_2.png

容易发现规律,方块的中心线位于边缘峰值处,圆盘的中心线在峰值处偏下。可以设定一个计数器,当边缘连续 4-5 次没有增加时停止,将此处确定为纵坐标。

有时候两个方块相邻会出现识别失败,可以通过角度的方式来重新确定纵坐标。

$$T_x = S_x - \frac{|T_y-S_y|}{\sqrt{3}}$$

通过以上步骤就可以精准识别坐标点了,接下去需要将坐标距离转成按压时间。

我们先使用命令 adb shell input swipe <x> <y> <x> <y> <time> 测出几组数据

# dist time
1 278 444
2 301 493
3 403 608
4 154 273
5 496 775
6 304 501
7 397 632
8 260 445
9 473 709
10 143 257
11 543 802
12 666 953
13 618 884
14 507 794

使用指数模型进行拟合

$$time = k \cdot dist^{p}$$

mathematica.png

随便写个 PHP 脚本跑一下看看

jump.png

微调参数后还没有出现失败的情况,最高连击 72 次!完美!

脚本地址:https://github.com/metowolf/JumpJumpHelper


感谢

最后感谢一下:https://i-meto.com/wechat-jump-siteme/

仅有一条评论

  1. Tominysun
    Tominysun 作者君 10Chrome 67

    这个脚本碉堡了,本人佩服,故转载至本人博客! @(damuzhi)

添加新评论