有朋友反映过关后客服不回话。Hmmm我当初也以为只是玩玩而已,直到——我今天莫名来了个快递…
我当时选的龙猫,看来是龙猫没货了,就给了我一只猫…
不好意思各位,又是python…而且几乎没啥技术含量…
不久前 @神奇的战士 做了一款微信跳一跳的辅助,感觉蛮有趣的。那,我也分享一个自己瞎搞的朴素版 微信小游戏-加减大师 的辅助,因为 Python 快捷,所以也还是采用 Python 实现。与前一个辅助不同的是,程序中的图像处理没用到 opencv,字符识别也没用到机器学习。因为一方面我觉得把用到这里有点大材小用,另一方面即重点是我不会opencv和机器学习啊所。因此整个的实现过程比较朴素,正好和本专栏“朴素维他命”相一致,有趣。
作为本专栏的第二篇文章,下面教程部分我就直接从 readme 文件中抄过来了 _(:з」∠)_
「加减大师」是腾讯推出的一款微信小游戏,玩法极其简单,它要求玩家在指定时间内判断等式的对错,答对40道就算挑战成功,可以赢取娃娃。 游戏界面如下图
https://www.zhihu.com/video/975842081831305216
$ git clone https://github.com/clouduan/WechatGameAutoPlayer.git
$ sudo pip3 install -r requirements.txt
.将手机调到第一题界面,用投屏软件将手机画面投到电脑上。这里推荐使用 Vysor,目前提供 Windows/MacOSX 客户端和 Chrome 应用,推荐使用 Chrome 应用。好处是跨平台而且方便。
.先用相关软件测量包含等式的矩形区域的坐标(左上角的xy值和右下角的xy值),以及 √ 或 × 区域的坐标值,并填入 Config.py 中的相应位置。所用的工具 Windows 上推荐用系统自带画图软件,Linux 可以用 Gimp。矩形区域的选取很重要,可以参考下图标记的区域:
特别说明:以上我只在我个人电脑和个人手机上测试过,诸位使用时可能需要自己慢慢调相关参数,而且投屏的清晰度一定要保证,否则会失败的。祝各位拿到娃娃(
简要说下实现原理吧,很朴素(Naive)的…
.先二值化图像,然后横向分割为两部分,再对每一部分进行纵向分割,得到单个字符。
.分割的算法也蛮简单粗暴的,就是将像素在竖直/水平方向累加,找累加值的间断处标记分割。
.将每个字符图片用一种特定的 hash 函数计算 hash 值,与预先储存的该字符的 hash 值比对(计算汉明距离),汉明距离最小的项所对应的即是该字符的值。
eval()
判断对错,进行点击。记录一下遇到的坑吧…什么这么简单的东西还有坑?确是有的。 最开始是某天晚上,室友在玩加减大师的时候突然说:“ddl,这东西可不可以弄个自动识别啊?”我一听,想了想说:“可以是可以,不过估计要费时间,我期中考完再弄或者暑假再说吧”。室友哦了一声,显然对我的回答颇感失望。
然而话是这么说,当天晚上我躺在床上就在想具体该怎么实现这个:其实只需要截屏+识别+点击就搞定了?…第二天吃完晚饭,我背了电脑就去了新图3楼,随便找了个有电源插座的地方开始做这个,闭馆前弄出了最初版本,调完 bug,正式运行的时候才发现不对劲:前面36道题顺利通过,第37题题目给的时间突然变短,程序运行比较慢,来不及反应就给我挂掉了,详情可以看我录的这个视频。我才发现 ADB 的传输速度太慢了,截屏和点击超级延迟——这是硬伤没法修复,算了开个 Issue 吧,再加个 help wanted,于是这东西被我暂时搁置起来。
过了几天,竟然有兄弟学校的学长在我 issue下面留言说他也在做这个,并且遇到了同样的问题,问我有没有解决办法。我说我要弃坑了,腾讯套路真深,而且马上准备期中考试了_(:з」∠)_。
考试的前两天,他告诉我说找到了一种可行的方法——投屏到电脑,电脑模拟点击,并且亲测成功!虽然很想马上试试,不过我还是耐着性子熬完了考试。
终于考完试了!!!我立马用他的方法,并且重构了代码,发现投屏几乎可以实时响应!于是就拿到了娃娃…
不过我一直好奇,投屏软件为什么能做到那么快,对这个问题感兴趣的可以看看我的这个提问。
最后,挂上 GitHub 地址吧,有问题欢迎交流。
我的
clouduan/WechatGameAutoPlayergithub.com 还有学长的 1033020837/WechatGameScriptgithub.com 如果觉得有趣,可以给个 赞/star … 各位玩得开心 _(:з」∠)_