「加减大师」是腾讯推出的一款微信小游戏,玩法极其简单,它给出一个等式,要玩家在指定时间内判断等式的对错,答对40个就算挑战成功,可以赢取娃娃。 游戏界面截图、辅助运行、讨战成功界面如下
WechatGameAutoPlayer 是用 python 语言实现的一个脚本,可通过 ADB 从手机获得游戏界面截图,然后进行字符识别并判断所给等式的对错,实现自动点击。本脚本纯属娱乐,请勿恶意使用,开心就好~
-
配置 ADB,Windows 系统需另装 ADB 驱动并将可执行文件加入到环境变量 Path 中。这一步是为了后面连接电脑并投屏。
-
克隆代码到本地
$ git clone https://github.com/clouduan/WechatGameAutoPlayer.git
- 安装所需的包
$ sudo pip3 install -r requirements.txt
-
将手机调到游戏界面,运行 AutoPlay.py 文件即可ADB 太慢了,直接在手机上操作的话,无法对付最后几题,于是采用投屏大法。 -
将手机调到第一题界面,用投屏软件将手机画面投到电脑上。这里推荐使用 Vysor,目前提供 Windows/MacOSX 客户端和 Chrome 应用,推荐使用 Chrome 应用。好处是跨平台而且方便。
-
先用相关软件测量包含等式的矩形区域的坐标(左上角的xy值和右下角的xy值),以及 √ 或 × 区域的坐标值,并填入 Config.py 中的相应位置。所用的工具 Windows 上推荐用系统自带画图软件,Linux 可以用 Gimp。矩形区域的选取很重要,可以参考下图标记的区域:
- 运行 AutoPlayPC.py 即可。在一加三手机上测试通过,拿到了娃娃...
-
ADB: 获取手机游戏界面截图,并对截图进行灰度化和二值化处理 -
截图:在电脑上对手机等式区域截图,速度很快,极大减小耗时。
-
字符识别:字符识别没有采用普遍的机器学习方法,而是采用一种叫感知哈希算法(PHA)的相似图片匹配法。在我的另一项目CaptchaRecognizer中有利用其识别验证码的实现。具体做法简述如下:
先二值化图像,然后横向分割为两部分,再对每一部分进行纵向分割,得到单个字符(数字和运算符号)。将每个字符图片用一种特定的 hash 函数计算 hash 值,与预先储存的该字符的 hash 值比对(计算汉明距离),汉明距离最小的项所对应的即是该字符的值。
-
判断:得到所有字符后,将其顺序连接还原为等式,用
eval()
函数判断对错。 -
点击:根据判断结果点击电脑界面的 √ 或 ×,而投屏软件竟然几乎可以和手机实现同步,不可思议...
投屏软件的使用一下子解决了全部问题...
- 速度问题,这是个亟待解决的问题。详情参见Issue-2
- 适配 IOS 系统
- 适配不同屏幕尺寸的手机
- 熟悉 ADB 和投屏软件原理的朋友,欢迎参与此讨论。
- 使用过程中出现问题,欢迎在 Issues 区提出! 也可以联系 dyzplus@gmail.com。
该 Repo 所有代码及图片均采用 GPL 协议。