最近在群里闲聊的时候发现大家在玩一款考眼力的网页小游戏,这个游戏简单来说就是从方块中找出不同的。在规定的时间通过的关卡越多越好。最后游戏会根据你通过的关卡数量来给你评分。但是人类的眼力是有极限的,而装逼的欲望没有。So, 我就开始研究如何愉快的用JS作弊了。
Hack这种事情是讲究化劲的,知己知彼才能成功。第一步当然是先分析一下网页了。打开Chrome自带的开发者工具可以看到,这些方块不过就是span标签搭配RGB颜色。而我们知道游戏规则是所有的方块里面只有一个是不同的,所以我们只需要找到那个不同的,然后模拟点击那个元素就可以了。
说干就干。由于游戏限制实现是60秒,所以我们为了调试方便,可以用一段JS先把网页内所有的计时器停掉。
借着根据我们之前发现的原理,构造原型代码验证思路。
A few moments later……
这段代码的意图很明显,为每一种颜色建立一个字典,记录出现了多少次,然后我们遍历字典,只出现了一次的颜色自然就是我们要找的方块了。接着我们拿着得到的颜色代码,再去文档中对着所有的方块比对,最后找到元素并点击。为这个函数设置一个计时器定时启动,便大功告成了,把代码输入开发者工具,试试效果。
Impressive! 效果非常不错,我当时看到的最厉害的人,也不过只能打到lv40而已。但是我们的代码还是有一些冗余,还有优化提高的空间。
在交流中,其他人在我的代码的基础上,给出了性能更强更精简的改进版。
这段代码妙就妙在用了requestAnimationFrame代替了计时器,真正达到了机器能跑多快跑多快,完全释放了机器的全部性能,能限制速度的也只有浏览器渲染的速度了。
效果可以说是相当的不错了,只不过到了这个阶段,人类早已经退出较量了。
总体来说,这个游戏挺好玩的,各种意义上。