关于微信跳一跳外挂研究

1.关于游戏的想法

刚开始出现这个游戏时我就想写一个外挂,但是当时我好多技术都不懂。唯一知道的就是使用adb将手机截图弄到电脑上,以及使用adb模拟按压屏幕。图像处理只会简单的一些图像匹配,至于编程语言关键看如何选择了。一开始我用过按键精灵,但是不大好调试,而且vb脚本你懂得,不好调试并难用。
无意中看到关于opencv的图像处理技术,也是在搜索跳一跳外挂时在github上看到的。因此就诞生了下面我的代码。

2.关于外挂的设计

首先该游戏是根据小人和下一个物体的距离得到按压屏幕的时间,因此在图像上得到小人和下一个物体的位置至关重要。
该游戏最好处理的就是小人位置,因为小人图像上一直没有变化,因此简单的图像匹配就能很精确的得到小人位置。
下一个物体由于一直在改变,因此不容易得到,需要精确的计算。我们知道如果跳到中心位置那么下一个物体中心会出现一个小白点,这个小白点我们可以通过图像匹配得到位置,但是没有小白点时该如何处理呢?我通过搜索opencv的相关方法得到边缘处理可得到图像各个轮廓,结果是一个二值图,因此我可以通过判定这些点的值即可。我这里的算法就是得到下一个物体最高点的位置,再此位置基础上垂直向下遍历得到两个不为0的点,这两个点中心就是下一个物体的中心位置。
那么很多人会觉得我的算法比较粗糙,是的经过测试还是有很多时候会失误,因此我加入了一些纠错的方法,及每次得到下一个位置都用一个点标记出来由用户自己肉眼判定位置是否合适,不合适就使用按键调整,因此我们可以确保万无一失的得到下一个位置,只是相对来说运行效率会低一点。综上所述我的算法设计完毕

3.部署环境

环境:Win10,Python2.7.10, Numpy,OpenCV2.4.9
opencv下载地址:https://sourceforge.net/projects/opencvlibrary/files/opencv-win/
我这里下载的是2.4.9
安装Python,并添加到环境变量,以及Python27\Scripts也要添加环境变量
输入pip install numpy ,安装numpy
必须安装 pip install matplotlib
将”\opencv\build\python\2.7\x64”或”\opencv\build\python\2.7\x86”(根据python版本)文件夹中找到cv2.pyd”,复制到Python安装文件的”C:\Python27\Lib\site-packages”文件夹中。

4.使用方法

将安卓手机usb连接电脑,在电脑中安装adb.exe
确保执行 adb devices,有下面类似输出即可
List of devices attached
6239cd75 device

运行成功后会显示下一个跳跃位置
使用按键w,s,a,d方向键移动下一跳的位置
确认下一个位置正确时,按q键即可触发程序去跳
确认游戏结束,按e键即可退出程序
直接运行python jump.py即可,具体效果看show.gif

5.后记

大家可以去看我的项目地址:https://gitee.com/janbar/jumpOnejump
show.gif

仅有一条评论

  1. Thomas Thomas

    That's excellent, Janbar. Hope you could find out more.

captcha