图片是复制大神的
最近的微信的小程序跳一跳火了起来,很多人都玩得爱不释手,但是这游戏玩起来虐心啊,没跳几下就死了,气得想摔手机的有木有,淡定淡定,作为一名理工科的学生,要发挥自己的聪明才智,不然怎么在女神面前赢得说话的机会呢?
说明:适用于Android平台。此教程改自大神的python版本,由于小编无奈不懂python,于是看了里面的代码,用c 和opencv改写了。要想看大神的原文,请点击这里:https://github.com/wangshub/wechat_jump_game
文末会给出完整的小编的源代码下载地址,或者可以私信我,可以实现一键跳一跳,文中的图片有可能模糊,但是都截源代码的,只需打开源代码即可浏览。限于篇幅,文中有许多未提到的技术点,可关注小编的头条号,以后会把这些发出来的
开发环境:VS2015 opencv 3.4,版本:v1.0.0,由于是第一版,只在1280*720的荣耀手机上测试过,可能会有很多bug
原理:
将手机点击到《跳一跳》小程序界面
用 ADB 工具获取当前手机截图,并用 ADB 将截图 pull 上来
adb shell screencap -p /sdcard/autojump.png adb pull /sdcard/autojump.png .
3.计算按压时间
4.用 ADB 工具模拟点击屏幕蓄力一跳
注意:
需要把用数据线连接到电脑,然后打开开发者模式,有的手机会出现ADB连接失败的,这个请自行度娘
环境配置请自行度娘。当然了,只是玩一下的,只需下载文件,双击打开.exe文件即可体验
下面就是实现的过程:
获取截图,对图片进行识别,首先是找出棋子的位置来,如下图所示
通过用PS拾取那点的颜色值,保存下来,然后由下往上逐行的扫描,扫到之后,记录坐标(以像素为单位)
draw_color函数
draw_color函数执行完后,调用reaw_garry函数,找出物体的中间位置
从图片的上1/3位置开始扫描,把开始扫描的第一行的像素值作参考点(第一行如果选的不对,会出现bug),然后逐行扫描,与第一行作对比,如果误差大于某个值,则认为有物体了,记录下来
关键代码如下:
接着,在这行开始逐列找到非背景的第一点,就是物体的顶点
找出来之后,我们还需要再找一点,圈起来那个就是我们需要找的点,为的就是要计算中心位置
原理跟上面找棋子的坐标一样,找一个参考点,然后逐个的找。找到之后,就能求出物体顶面的中点了,也就是我们要跳到的那个地方
把棋子的坐标与物体顶面上的坐标,代入两点距离公式,就能算出他们的距离了,什么?你跟我说你不知道两点距离公式?自己面壁思过去吧。
激动人心的时刻到了,把得到的距离乘以0.5再除以0.25,就是按压时间。
用system把命令输到手机上。完美
adb shell input swipe x y x y time(ms) 此命令是在x,y点处到x,y点处滑动屏幕,后面是时间 如adb shell input swipe 320 400 320 400 500 也就是按压在320 400这个到滑到320 400这个点,即按压,时间是500毫秒
源代码及执行文件都已经放到github上了
下载地址:https://github.com/BiggerBinBin/jump.git
把整个项目拷贝下来之后,在x64/Debug文件下那个.exe文件就是可执行文件,使用之前须手机连接好电脑且打开了开发者模式和进入微信打开跳一跳界面,并且已经点了开始游戏。
如果嫌麻烦在可以私信我
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved