首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

教你如何自己写一个微信小游戏“跳一跳”外挂

【回复“1024”,送你一个特别推送】

这个开源库已经被我同学分享到 GitHub 上,他自己很无聊,就写了这个东西和这篇文章,自己通过写代码实现高分也是玩的不亦乐乎,这就是程序员和普通玩家的区别吧。用JAVA自动控制手机玩跳一跳自动识别图像计算距离自动帮你点击屏幕自动缓存图片,并在图片上标记一些识别结果,如下图:

运行环境JAVA,最低版本为7.0,官网下载adb驱动,官网下载(需要翻墙),或者到这里下载SDK-tools,其中就包含adb安卓手机,目前已适配分辨率使用方法有JAVA开发工具的同学可以直接运行java代码,便于代码调试,下面主要介绍运行已经打包好的jar包的方法手机打开USB调试,并连接电脑打开USB调试方法,进入,找到,打开并勾选;如果没有,进入,连续点击7次,即可开启。

通过下面的命令,运行Android.jarjava -jar Android.jar根据手机分辨率选择跳跃系数,目前已适配机型:其他分辨率请自己微调。

1600x2560机型推荐0.921440x2560机型推荐1.0391080x1920机型推荐1.392720x1080机型推荐2.078原理说明通过adb命令控制手机截图,并取回到本地adb shell screencap -p /sdcard/screen.pngadb pull /sdcard/screen.png .图片分析有靶点,即目标物体中心的白色圆点,则靶点中心为目标落点无靶点,但是纯色平面,或者规则平面,则平面中心为目标落点无靶点,又无纯色规则平面,但是左上和右上位置的斜率是固定的,可根据固定斜率的斜线和目标物体中心线的焦点计算落点根据棋子的颜色,取顶部和底部的特征像素点,在截图中进行匹配,找到棋子坐标由于目标物体不是在左上就是在右上,可以从上往下扫描,根据色差判断目标物体位置,其中又分为以下几种类型

计算棋子坐标和目标落点的距离距离×跳跃系数=按压屏幕的时间,不同分辨率的手机,跳跃系数也有所不同

通过adb命令,给手机模拟按压事件adb shell input swipe x y x y time其中和是屏幕坐标,是触摸时间,单位ms。

工程结构

代码详解这里将针对一些关键算法的代码进行解释寻找棋子位置把截图放大,可以看到棋子顶部像素连成一条横线,那么我们通过颜色匹配,找到这一条线的始末位置,取中间位置,就得到了棋子的x坐标。

棋子的底部也是一条横线,用颜色匹配,我们检测到相似颜色的最大y坐标,就是棋子底部了,不过考虑到棋子底部是个圆盘,我们把棋子的y坐标再往上提一些。

这样我们就得到了棋子的xy坐标,下面是相关代码:

寻找靶点所谓靶点,就是目标物体中心的那个小圆点,颜色值为。

那么我们只需要寻找颜色值为0xf5f5f5的色块就可以了,为了规避其他物体相近颜色干扰,我们可以限制色块的大小,正确大小的色块才是靶点。但是如何计算色块的大小呢,色块最顶端到最底端y坐标的差值我们作为色块的高度,同理,最左侧到最右侧x坐标的差值作为宽度,我们只需要查找这四个顶点的坐标就可以了。本来打算用凸包的Graham扫描算法,后来发现色块已经是凸包了,且边缘像素是连续的,那么我们按照一定顺序,遍历边缘像素,就可以在O(n^-2)的时间复杂度里,得到色块的顶点坐标了。我们从第一个像素点开始,寻找的顺序如图所示:

得到了四个坐标点,我们就可以计算色块的中点了,也就是目标落点。对于没有靶点,但是落点是规则平面的,也可以用类似算法。斜率计算对于没有靶点,又不是规则平面的,我们怎么计算落点呢,这时候就要用到斜率了。可以看得出来,每次左上角或右上角出现的物体,针对当前物体的方向都是一样的,也就是两个物体中心的连线,斜率是固定的。基本所有的目标物体,最顶点像素中点的x坐标,都是在物体中间,我们至少先得到了目标物体x坐标了,记为des.x ,接下来要求des.y 。

如上图所示,计算过程如下:斜线的公式为 y=kx+b那么,在棋子坐标上有 piece.y=k*piece.x+b在目标落点坐标上有 des.y=kdes.x+b代入得到 des.y=k*(des.x-piece.x)+piece.y然而这种算法还是有偏差的。

可以看到,同样的斜率,如果棋子的位置有偏差,计算出来最终落点还是会有偏差的。代码解析就先讲这么多,希望有大神可以提出更好的解决方案。玩游戏小窍门连续的落到物体中心位置,是有分数加成的,最多跳一次可以得几十分井盖、商店、唱片、魔方,多停留一会,有音乐响起后也是有分数加成的那么看一下程序员的朋友圈有多残酷吧

广

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180104G0331D00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券