前段时间,微信跳一跳风靡一时。大家大概也都多少玩了一下,当然也发现了不少人分数奇高,看着就不正常。本期节目,我们就从程序员的角度聊一聊怎么涨分。
我们面临的问题是:使用自动化代替人工,从而去除各种估计误差并将游戏无限的玩下去,以获得超高的分数。
回忆我们的玩法,大体分为以下三个步骤:
1.观察手机屏幕,看到自己操控的小人和想要跳过去的方块。
2.估算小人和方块的距离。根据估算得到的距离,估计按压屏幕时长。
3.使用手指按压预期的时长。
在问题分解后,我们再来看看,如何针对这三个步骤下手。
首先,针对截屏,办法有很多。可以手动操作,可以使用软件,也可以直接使用开发者命令。作为一个移动开发,当然选择使用开发者命令。
其次,在获得了一堆图片之后,有三种思路来解决距离计算并转换到按压时长估计的问题。第一个是人工,上游标卡尺即可。第二个是图像搜索算法,简单的说,就是通过图像处理的一堆方式,包括灰度化、轮廓提取等进行暴力搜索,得到小人和方块的位置,从而计算出距离。只不过,这样的做法比较暴力,开销很大。投机取巧的办法是,以跳到中心后的小白点提示为搜索目标,不再搜索方块,这样能够很好的提高性能。
这两种方式都通过确定的距离从而通过函数换算得到按压时间。
第三个思路是使用人工智能的办法。即不再人工提取图像的特征并实现特定的搜索算法,改为将图像及按压时间作为训练集给到神经网络。经过神经网络的计算,当输入一个特定图片的时候(游戏场景),就可以得出一个合情合理的按压时间。
最后一步,也就是模拟人类按压屏幕的操作。从比较原始的按键精灵,再到开发者工具,再到机械手臂模拟,都是可行的。
最终,面对分解的问题并逐一解决后,自由选择自己擅长的解决方案并最终组合在一起,就形成了你自己的跳一跳“小助手”。
领取专属 10元无门槛券
私享最新 技术干货