首页
学习
活动
专区
工具
TVP
发布

用AI玩跳一跳,你的良心不会痛吗?

报道/前方智能 丁丁 枭枭

之前,智能君曾写过用AI可以打游戏的文章,而最近大火的微信「跳一跳」,近日也出现了「AI外挂」,且分分钟就可以轻松把分数打到上万!

PGone和李小璐

智能君基于“从众心理”也加入了「跳一跳」,但玩了N多局后最高分还是30分,只超越了朋友圈的几个人,智能君就放弃了这个游戏。

说起来,「跳一跳」的游戏原理其实很简单——通过按压屏幕时间的长短来控制「小人」跳跃的距离,所以学会用物体间的距离来判断时间很重要。

这并不算是个很有“水平”与“深度”的游戏,那为什么会火呢?

其实像之前微信推出的小游戏「打飞机」一样,天生自带的社交属性让它在微信以极快的速度传播着,还有一个重要的是因为“排行榜”:大家喜欢比谁分高!

这不,广大网友们为了得到高分,花样百出啊!

第一个花样,可以说是目前最快捷有效的方法,没有之一!

你有钱就可以啦!想要多少分就有多少分!

中国的淘宝——只有你想不到,没有你买不到!

还顺带形成了代练外挂的产业链~

第二个花样,则是来自机器动手爱好者。

这位兄弟平时乐高应该玩得不少,他用乐高的程序处理器EV3连接马达做成机械臂,来模拟人类手指按屏幕,也是醉了~

问题是这对于整个游戏没啥帮助,跳的时候还是用最笨的方法,先量距离来判断点击时间。

当然,作为黑科技迷,智能君最感兴趣的还是大神写出来的用“AI”来自动跳一跳的外挂,相信大家也比较想知道吧,下面来给大家讲讲它到底是怎么实现的。

「跳一跳」小程序发布后不久,就有程序员在Github 上发布了一个专门针对跳一跳的外挂程序。整个程序基于 Python,可以做到模拟手指按压屏幕的动作,让程序自动跳方块。

简单来说,在Android平台(iOS平台智能君还未试过)上整个程序的实现逻辑是:

用 ADB 工具获取小程序的截图,手动版用 Matplotlib 显示截图,用鼠标点击起始点和目标位置,计算像素距离;自动版依靠棋子的颜色来识别棋子,根据底色和方块的色差来识别棋盘。然后再用 ADB 工具模拟点击屏幕蓄力跳跃。

具体实现步骤如下:

(注:ADB工具指代得失Android Debug Bridge,就是起到调试桥的作用。开发者常用到这个工具.,可以用来管理设备或模拟手机状态。)

将微信点击到《跳一跳》小程序界面

用 ADB 工具获取当前手机截图,并用 ADB 将截图 pull 上来(智能君解释:此处可以理解为将游戏静态画面截图并发送至本地)

adb shellscreencap -p /sdcard/autojump.png

adb pull/sdcard/autojump.png .

计算按压时间

靠棋子的颜色来识别棋子,靠底色和方块的色差来识别棋盘;

用 ADB 工具点击屏幕蓄力一跳(智能君解释:此处可以理解为电脑端模拟人类发出按压力度的指令)

adb shell inputswipe x y x y time(ms)

智能君试用「AI」跳一跳

可以看到,整个过程完全不需要人为的操作,程序就能自动识别两个物体间的距离(distance),计算好按压时间(press time),完成跳跃的操作。

其中最关键的一步便是「计算按压时间」——利用图像识别精确测量出起始和目标点之间测距离,就可以估计按压的时间来精确跳跃。

具体来说是这样的:

「寻找目标坐标

按行自顶向下遍历像素

滤掉背景色,直接取行尾的像素点

除去背景色,避免图形上花纹的干扰

滤掉顶部 y

滤掉颜色线开头像素点小于 10 的线

判断现在这条线对比刚才的线的 x 是否有增加,因为图形都是倾斜的,方块和圆柱的顶部最右侧的 x 不再增加时说明这条线就是顶部的切线了,然后取这条切线的中点」

从智能君实际使用情况来看,「AI外挂」主要是通过图像识别测算出精确的距离,并通过系数来精准确定按压的时间(精确到了毫秒层级)。

而AI在这部分的作用主要就是通过「图像识别」来提高更精准快速的实现测距的效果,智能君注意到在这里程序员GG们主要采用了OpenCV来加快图像识别的效率,实现更快的识别速度。

在这里给大家介绍下鼎鼎大名的OpenCV,它的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉(Computer Vision)库。

它基于BSD许可(开源)跨平台发行,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法,包含了横跨工业产品检测、医学图像处理、安防、用户界面、摄像头标定、三维成像、机器视觉等领域的超过500个接口函数。

就应用层面来说,OpenCV目前主要用于解决如下领域的问题:

增强现实

人脸识别

手势识别

人机交互

动作识别

运动跟踪

物体识别

图像分区

机器人

这么强大的功能,又是开源不收费的,所以被拿来玩「跳一跳」是不是有点大材小用呢?

另外,基于很多人用脚本刷分,现在这个游戏似乎开始检测脚本了,不过检测的方式是检测触摸位置,而只要加随机触摸处区域,就可以了。

结语:

某个程度上来说,AI“破坏”了「跳一跳」的游戏规则,但这究竟是利还是弊呢?

一方面,从某种程度上说它驱使游戏制作方查找某些隐蔽的漏洞,以建立更安全强大的防干预系统,能让玩家获得更好的游戏体验;

另一方面,AI也成了某些人破坏规则,牟取利益的手段。

当然这只是一个小游戏,用AI“作弊”产生不了什么大或者不好的影响。但以小见大,如果在其它重要领域,保证AI技术的合理使用是不是显得非常重要呢?这不得不让人深思。

最后,智能君已经跳到1000多分了,成了朋友圈里的冠军~

可以说,现在「跳一跳」能跳多少分,完全取决于你的良心~

——————————————

更多人工智能产业的新鲜资讯,欢迎关注前方智能的腾讯企鹅媒体,或者在微信关注前方智能(qianfangAI)~

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券