本帖最后由 小触 于 2014-2-17 17:47 编辑
Flappy Bird到底有多难?时下什么游戏最火?无疑是Flappy Bird。这个游戏让无数人又爱又恨,根本停不下来。不过,死理性派又是另一种玩法,东南路易斯安那大学的一位物理学教授对自己的游戏记录进行了分析,然后……他不想玩了。 秦鹏 2014-02-13 12:30
Flappy Bird也许是最近最火爆的游戏。图片来源: Rhett Allain 我不敢想象你对Flappy Bird一无所知——不过还是简单地说两句以防万一。这个游戏很简单。敲击屏幕让一只小鸟扇翅膀并获得向上的速度。之后小鸟会下落,而且是有加速度的。目标是让小鸟在一飞一落之间穿过一些管道的空隙。听来简单,但要想飞远,却出奇地困难。 我的技能会提升吗?我不想只玩游戏,还打算收集一点数据。在玩的过程中,我把自己的得分作为尝试次数的函数记录了下来。下图是得分与尝试次数的关系图: 教授您的得分不是一般的低啊…… 可这幅图说明了什么呢?好吧,基本上说明不了什么,因为R2(相关系数)小得可怜。完美线性数据的R2值应该为1,而最非线性数据的R2值等于0。 不过咱们暂且假装这一拟合可以接受。你能够看出来,随着时间的推移,我的得分看上去确实有轻微的提高。这个函数也表明如果我从来不玩,得分将是0.7004,而每玩一次,我的得分会提高0.005028。 我要玩这个傻游戏大约多少次,才能追平我女儿的得分呢(她的最好成绩是39分)。我只需要把39代入方程,求出来尝试次数(我将其设为n)。
在很多帖子里,说到这里我就要指出:由于“我的线性拟合有意义”实属臆想,才会得出这么个不可理喻的结果。然而我觉得对我来说,7617这个数字也许靠谱。可是这么多次数会耗费多少时间呢?正好我也记录下了我每次玩游戏的时间。从数据上看我大概平均耗时12秒。这就是说为了达到这个分数,我的7617次尝试要花费25.57小时。 想想看,在这个游戏中,你能“通关”还是只能永无休止地玩下去?
通过管道缝隙的可能性让我们以统计学的观点看待这个问题。好比说我有50%的可能通过一根管道,那么我通过两根管道的可能性是多少呢?很简单:0.5*0.5 = 0.25。是的,这个推理过程中有一些假定的成分。一个假定是我的技能不会随着时间而进步(目前来看,这倒是显而易见),另一个假定是我通过第一根管道的方式对我穿过第二根不会造成什么影响。 还有一个问题。如果穿一根管道只能穿到半路,Flappy Bird也会给我计分。这就意味着如果我掉进了第二根管道里,也会得到1分。我撞在第一根管道的末端也能得到同样的分数。 这是我所有得分的柱状图。 数据显示,我总共尝试了150次,其中62次没有通过第一根管道,这说明有88次我确实通过了,其比率是88/150或者0.587。我穿过第二根管道的比率又有多大呢?在成功穿过第一根管道的88次中,有41次穿过了第二根,比率是0.466。这个值与穿过第一根的比率相当接近。 到这里就该建立模型了。下面是一段python代码,用于计算如果穿过每一根管道的可能性都是0.587,我能够飞多远。 这段代码得出的散点图与前文中我自己统计得到的图看上去非常接近。有趣的地方是输出结果与实际数据的柱状对比图。 在仅仅尝试了150次的情况下,这样的对比结果还算好看。 不如试试这样,我用这个模拟来估算我得到每1分需要尝试的次数如何?我会这样做:运行这个模拟直到得到1分,然后数一数我运行了多少次。这样的操作我会重复100遍,来得到尝试次数的平均值和方差。确实,听起来工作量挺大——所以我们要让计算机来代劳。 下图是每得1分需要的平均尝试次数。 没错。这幅图表明要在Flappy Bird中得到25分,我需要尝试差不多一百万次。当然,前提是我玩了50万次之后水平仍不见长——我希望这不是真的,但我也没打算搞清楚。
最后感谢果壳网
|