“跳一跳”游戏外挂原理详析(自动版)

“跳一跳”外挂自动化

前言

在上一篇“跳一跳”游戏外挂原理详析(手动版)中,讨论了跳一跳外挂编写的原理,以及手动版的实现,但是在文章最后提到了不足,就是手动太累了,这篇文章通过图像处理的方法,实现棋子和棋盘的定位,从而实现自动化跳跃。如果大家对原理不清楚,可以去看手动版。

第一节

小曲折

以上图为例,主要是确定红色部分的位置:棋子的位置和下一个物体中心。

对棋子的识别,一开始的思路是使用模板匹配,因为棋子的形状和颜色没有变化,具体做法就是将图中的棋子截图下来作为模板,然后使用opencv的模板匹配函数,可以直接匹配出棋子的位置,为了降低依赖,我没有使用opencv,这需要配置环境,而是使用了Python中的skimage图像识别库,anaconda环境中自带这个包,识别代码截图如下(但是我最终放弃了这种做法):

知道左上角坐标,然后还知道棋子模板的长宽,自然也就求出来了棋子所有位置。

但是这个识别真心有点慢。。。最后我抛弃了这种做法,虽然最后也能跑的很高

之后我参考了https://github.com/wangshub/wechat_jump_game,这个开源项目中图像识别的部分 ,发现写的真心不错,不需要依赖很多库,仅仅使用pillow库,最后我移植它图像处理的代码到手动版中。下面我给大家讲解一下它的思路,真心简单。。。

第二节

棋子的识别

棋子的识别主要是靠颜色,棋子的颜色一直没变。

第一步:确定棋子的扫描范围,为了识别快速,我们必须缩小棋子的位置。

棋子的位置是位于图像 h/3 和2h/3之间,棋子颜色和背景颜色有明显的区别,在扫描的过程中,如果发现颜色突变,就意味着快要找到棋子的位置了。这是一个粗调的过程。

代码截图如下:

第二步:从上一步获取的棋子大致位置,接着往下扫描,棋子的颜色RGB:50<R<60,53<G<63,95<B<110,只要是在这个区间的,就是棋子。代码截图如下:

经过这段代码,最后确定的位置是下图红点所示的地方,我们就把这个地方,当做跳跃的起点。

第三节

棋盘的识别

比较复杂的是棋盘的识别,主要是规避一些bug,

第一步:依然是缩小扫描区域,当棋子在图像左半部分时,那棋盘就在右半部分,当棋子在图像右半部分时,那棋盘就在左半部分,从而确定大致的范围。代码截图如下:

这样做的好处,不仅仅是缩小了扫描范围,同时也可以规避音符bug,大家跳到音乐盒上时,会出现音符

第二步:首先确定棋盘的上顶点,其识别方式和识别棋子的差不多,从上到下扫描,棋盘的上顶点和背景颜色差别很大,发现颜色突变,就认为找到了上顶点。代码截图如下:

有两个问题需要注意:1.当出现棋子比棋盘高的时候,会先扫描到棋子,这就会出现bug;2.当棋盘是圆形的时候,顶部是一条线,所以多采集几个点求平均。

第三步:最后确定棋盘的下顶点,知道上下两个顶点,中心点也就确定了。采取的方法比较粗暴,就是从上一步中获取的上顶点下方,向上扫描,发现颜色和上顶点相近的点,就认为是下顶点。我选的是从上顶点+274处,开始往上扫描。代码截图如下:

有时候会出现误判,尤其出现有花纹的棋盘时。对于这种误判,我们可以采取进一步的拯救措施,不知道大家发现了没有,当你一次命中棋盘中心,下一次的棋盘中心,会出现白点,我们可以通过判断白点的位置进行位置修正。白点的RGB为:245,245,245。

最后确定了下顶点 ,在和上顶点一结合,中心也就出来了。

通过勾股定理,就算出棋子到棋盘的距离了。

第四节

代码与演示

源码:https://github.com/qiyeboy/LuLunZi

大家按照手动版那篇文章的方法,将手机通过USB调试模式,连接到手机,并启动跳一跳,运行 python main.py,就可以尽情的刷分了(太高会清空)。

第五节

最后的福利

第一种方案:有很多朋友,问我ios该怎么办,最后给大家推荐这个开源项目:https://github.com/wangshub/wechat_jump_game

不仅有android,ios,还有很多屏幕的适配,很强大。

第二种方案:关注下面的二维码:回复3,就会有跳一跳的教学视频,以及辅助

第六节

小插曲

大家肯定注意到我之前发的http://fankehui.cn/t/t.php,大家一点击就会调到支付宝中自动领取红包,后台朋友让我分享一下原理,其实原理很简单,利用微信浏览器的WeixinJSBridge功能,跳到默认浏览器,接着再唤醒支付宝app,从而实现红包领取。现在android版微信,这个功能已经被腾讯封了,ios版这样做依然可以。大家如果想了解具体的代码,百度一下 微信唤醒支付宝,代码一大堆。。。

原文发布于微信公众号 - 七夜安全博客(qiye_safe)

原文发表时间:2018-01-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏葡萄城控件技术团队

ActiveReports 报表应用教程 (15)---报表换肤

在葡萄城ActiveReports报表中,可以设置报表中不同控件的样式,然后把这些样式保存到一个外部的XML文件当中,供其他报表使用。如果用户希望同一份报表以不...

2038
来自专栏开源FPGA

基于FPGA的VGA显示静态图片

  之前学习了半年的图像处理,所以计划将自己学过的几个图像处理的基础算法,做过的设计记录下来,在OpenHW论坛上发表,计划是这样的,用VGA做显示,使用PC...

4405
来自专栏每日一篇技术文章

SceneKit_入门03_节点

我们已经完成了创建工程的任务,有的人就问了,你不是要将SceneKit 游戏开发,怎么创建的是应用工程,往下看,就这么任性!

1521
来自专栏BGP专栏

BGP电路详解(上)

1.把匹配器件相互靠近放置  (共OD/Poly/OD space/Poly space一致)

1820
来自专栏利炳根的专栏

学习笔记TF062:TensorFlow线性代数编译框架XLA

XLA(Accelerated Linear Algebra),线性代数领域专用编译器(demain-specific compiler),优化TensorFl...

3320
来自专栏小白课代表

图像浏览器 —— Honeyview

https://dl.bandisoft.com/honeyview/HONEYVIEW-SETUP.EXE

1073
来自专栏Timhbw博客

个人博客SEO设置小技巧

2016-05-0518:42:17 发表评论 499℃热度 个人水平有限,还在初步学习SEO中,下面会更新一些我所学到的关于博客SEO的小技巧,大家可以发表...

2838
来自专栏点点滴滴

引物设计

1423
来自专栏人工智能头条

一边吃瓜看球,一边完成AI应用实践——手写体识别入门

1022
来自专栏计算机视觉战队

Caffe源码---------主要框架介绍

初学者的我感觉看代码就是一个煎熬啊!但是某人说过一句话:“Don’t be afraid to read the code!”现在我写一下简单的介绍,准备给入门...

3465

扫码关注云+社区