以程序员的角度玩微信跳一跳
最新更新:
使用教程
原文
前些日子微信推出了一款小游戏「跳一跳」,游戏中玩家需要扮演一个「黑色」小人,在不同颜色、形状的跳板方块间进行跳跃。操作也很容易,按压屏幕越久,小人会跳得越远。
显然这游戏对我这样的手残党非常不友好
若干次徘徊在十位数后,决定好好研究这个游戏,用程序员的思路去解决它。
外挂无非两种:内存修改、物理辅助。这里研究后者,也就是识别出跳跃距离后,换算成时间后模拟真实触碰操作。这种方式最保险,而且不容易被后台察觉。
观察棋子,不难发现棋子的颜色始终是没有变化的,因此可以根据颜色识别出棋子中最宽的部分,取中心即可
棋盘部分比较难识别,忽略掉背景色后会有阴影等因素的干扰,还有前后两个棋子紧挨的特殊情况。
考虑从上到下做行扫描,提取出所有连续的颜色块,排除掉中心点与棋子过于靠近的情况,这样就避免识别到棋子头部,取最上面且长度大于棋子宽度的切片,就得到目标点横坐标。
对于纵坐标可以只考虑棋盘右侧,这样就不需要和阴影打交道。棋盘只有圆盘、方块两种类型,边缘的锯齿状如下
容易发现规律,方块的中心线位于边缘峰值处,圆盘的中心线在峰值处偏下。可以设定一个计数器,当边缘连续 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}$$
随便写个 PHP 脚本跑一下看看
微调参数后还没有出现失败的情况,最高连击 72 次!完美!
脚本地址:https://github.com/metowolf/JumpJumpHelper
这个脚本碉堡了,本人佩服,故转载至本人博客! @(damuzhi)