「加减大师」是腾讯推出的一款微信小游戏,玩家需要在指定时间内判断所给算式的对错,每周比赛排名前500就可以赢得一张大师卡,一定量的大师卡可以兑换物品。
WechatGameAutoPlayer 是用 python 语言实现的一个小脚本,通过 ADB 从手机获得游戏界面截图,然后进行字符识别并判断所给等式的对错,实现自动点击。
GFM 不支持嵌入网页视频,我在 Zhihu 里发的一篇分享里有发效果录屏。点击进入
-
配置 ADB,Windows 系统需另装 ADB 驱动并将可执行文件加入到环境变量 Path 中。这一步是为了后面连接电脑并投屏。
-
克隆/下载代码到本地
$ git clone https://github.com/clouduan/WechatGameAutoPlayer.git --depth=1
-
安装所需的包
首先需要安装
pyHook包,在 此处 下载,然后用pip安装。然后执行
$ sudo pip3 install -r requirements.txt
-
将手机调到答题界面,用投屏软件将手机画面投到电脑上。这里推荐使用 Vysor,目前提供 Windows/MacOSX 客户端和 Chrome 应用,推荐使用 Chrome 应用,好处是跨平台而且方便。
-
先用相关软件测量包含等式的矩形区域的坐标(左上角的xy值和右下角的xy值),以及 √ 或 × 区域的坐标值,并填入 Config.py 中的相应位置。所用的工具 Windows 上推荐用系统自带画图软件,Linux 可以用 Gimp。矩形区域的选取很重要,可以参考下图标记的区域:
-
设置完成后,可以运行下面命令查看是否可以正确地截取到算式区域。
python util.py --check_location
-
运行 autoplay.py 即可。 默认答题次数为 99999,如果想限制答题次数,可以加参数,比如我想答 420 道即可,就可以运行
python autoplay.py --loops=420
-
可以在 config.py 中配置二值化的阈值,一般 180~240,默认 230,如果效果不理想可以自己调。之后需要更新 hash 文件,运行
python util.py --update_hashfiles
-
截图:在电脑上对手机等式区域截图,速度很快,极大减小耗时。
-
字符识别:字符识别没有采用普遍的机器学习方法,而是采用一种叫感知哈希算法(PHA)的相似图片匹配法。在 CaptchaRecognizer中有利用其识别验证码的实现。具体做法简述如下:
先二值化图像,然后横向分割为两部分,再对每一部分进行纵向分割,得到单个字符(数字和运算符号)。将每个字符图片用一种特定的 hash 函数计算 hash 值,与预先储存的该字符的 hash 值比对(计算汉明距离),汉明距离最小的项所对应的即是该字符的值。
-
判断:得到所有字符后,将其顺序连接还原为等式,用
eval()函数判断对错。 -
点击:根据判断结果点击电脑界面的 √ 或 ×,而投屏软件几乎可以和手机实现同步。



