前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >“跳一跳”游戏外挂原理详析(自动版)

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

作者头像
七夜安全博客
发布2018-06-26 13:26:46
2.4K0
发布2018-06-26 13:26:46
举报
文章被收录于专栏:七夜安全博客七夜安全博客

“跳一跳”外挂自动化

前言

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

第一节

小曲折

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

对棋子的识别,一开始的思路是使用模板匹配,因为棋子的形状和颜色没有变化,具体做法就是将图中的棋子截图下来作为模板,然后使用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版这样做依然可以。大家如果想了解具体的代码,百度一下 微信唤醒支付宝,代码一大堆。。。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 七夜安全博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档