比思論壇

標題: 带你解开Temple Run结局的谜团 [打印本頁]

作者: ufo520ufo520    時間: 2012-10-10 16:47
標題: 带你解开Temple Run结局的谜团
今天在人人上看到了被疯转的Temple Run结局的状态,道是跑到5亿分就可以进入大都市。逃脱成功有木有啊!!!看起来很给力有木有啊!!!可是要5亿分,这是要逆天啊!!!传言要连续不断跑48小时才能目睹传说中的大都市!!笔者一直坚信科学技术是第一生产力,秉承以人为本、全面协调、可持续发展的科学发展观……(少扯没用的,赶紧进入正题!)

首先可以肯定这张图片不是PS的,不过它的来历之后再提。
至于究竟要跑多久能跑出5亿的分数,我们来做个计算:
先来看看Temple Run的得分规则:
Temple Run 的得分由以下两个部分组成:
基本得分、倍数
最终我们看到的得分实际上是基本得分乘以倍数得到的。
基本得分又由以下几个部分组成:
距离得分、金币得分、奖励得分
距离得分=你跑的距离(单位:m)
金币得分=你所得到的金币数*5(注意红色金币算2个,蓝色金币算3个,不过游戏已经帮我们计算好了)
奖励得分:主要来自游戏右边的金币条,每次充满可以奖励一定分数,具体得分规则未知,大概每够100金币次在600-1000左右
经过测试,正常情况下,每秒可以跑约15米,平均1000米金币数量大概在200-250个(个数,而不是金币换算后的总额)
现在计算一下500,000,000分数需要多长时间:
假设玩家全程所有金币全部吃掉,从来没有掉下去,倍数为52x(我的是1.8版本,正常的52x)
那么用总分除以倍数可得所需的基本得分:500,000,000/52=9,615,385
每1000米250个金币,每4000米就是1000个金币,共有10次奖励得分,可得这4000迷的分数为:
1000*5+4000+10*1000=19,000
所需时间为:4000/15=267 s
平均每秒得分:19,000/267=71.16
那么所需时间为:135,123s 即37.53小时。所以达到这个分数最短只要38个小时。(我去,这也很坑啊!)
虽然游戏可以暂停,但是这样一个休闲游戏,即使抛开难度不谈,跑这么长时间才有从逻辑上不合理。
当然,为了科学,我们假设这样奇葩的设计是可以被接受的,那么就需要实际验证究竟5亿究竟能不能到达都市。
那么,要达到5亿这个分数,我们肯定不会疯狂的晚上37.53个小时以上。其实,通过Android程序调试的方法,很容易可以操纵游戏中的数据,比如,我们可以将游戏倍数调成10,000,把一个金币的基本得分调成10,000。。。不过这些来的都不是很快,笔者这里将游戏的初试分数设定在9亿多~考虑到以上提出的分数组成,必须要分数符合游戏本身的评分规则才可以。笔者游戏的倍数目前是52,于是将游戏距离初始值设置为2,678,923,将金币的初始值设置为:2,680,000 ,基本分设置为:18,752,461 那么基本分的组成为2,678,923+2,680,000*5+其他各类加分,不存在金币数*5超过基本分或金币严重不足的情况。我们看一看结果怎么样。





我们的角色依旧跑啊跑……尼玛这是坑爹呢,哪有什么大都市!
不过为了科学,我们假设传闻的5亿分数是不准确的,实际的重点存在于分数比5亿更高的地方。那么现在需要考虑的问题就是这个游戏最高可以达到多少分。
首先明确该游戏需要的是玩家的手眼协调及手眼反应能力。那么,手眼协调方面,我们假设玩家喝了1000瓶红牛……每次都完美无错,那么就只剩反应速度了。目前已知最快的手眼反应速度是0.2s即200ms。游戏的迷宫是根据几种基本结构随机组合而成的。在多次试验中,发现可能存在长度恰好等于一般角色跳跃范围的沟壑,不过出现的概率较低,平均每10,000m出现一个。一个急转紧接着一个沟壑的组合出现概率后期平均约为3,000m一个,由此可推算出二者组合出现的频率为每30,000,000m一个(其实实际上的频率要比这个高得多),当出现如下组合的时候,所需反应时间实际上小于0.2秒(转过去后马上就要跳,两个动作间隔若超过100ms即有坠落危险。)那么这种情况下基本上不可能避免坠落。不过我们还有翅膀,可以让我们的角色复生。好吧,假设我们的翅膀是无限的,它仍然有60s的冷却时间,那么我们60s内遇到两次这样组合的概率是多少呢?
首先要计算遇到一次这样的组合大概所需时间30,000,000/15=2,000,000s 也就是说,在任何一秒内我们遇到一次这样组合的概率为0.0000005,那么60s内有2s或2s以上遇到这种组合的概率为1-0.0000005*0.9999995-0.9999995=0.00000000000025 也就是说,我们平均跑4,000,000,000,000s的时候就可以遇到这样的一个组合。。。所对应分数为284,640,000,000,000。为了达到这个分数我们需要跑126,839.16793505834601725012683917年。。。当然其实这个数字可能更大,因为这种情况发生的时候可能远大于这个游戏时间……(时间不是问题,我们可以秉承愚公移山的精神,子子孙孙无穷尽矣~~~)
当然,其实上面有关手眼协调与反应的分析只不过是提供一下这个游戏终结情况的庞大可能性之一,科学性不高,仅供娱乐~
下面,让笔者带你进入本游戏最坑爹的部分!
既然获得284,640,000,000,000这种算法不是很靠谱的,我们就需要从游戏本身下手。
笔者用的是android平台测试游戏,故利用该游戏的Java代码来作分析。
成功提取代码后,笔者发现该游戏分数这个变量为int类型,Java中的int类型长度为4字节。这就意味着,分数这个变量的取值范围是-2147483647~2147483647,也就是说该游戏可能达到的最高分数实际上就是2147483674(坑爹呢不是……别急,还有更坑的!)那么是不是达到了这个分数我们角色就会到达大都市了吗?我们再次利用程序调试的方式将初始分数调成2147483647,然后一跑……

尼玛,分数变成负的了有木有!!!
实际上就是4字节的int变量不够用了,由于int类型变量是有符号的,2147483647的二进制代码是
0111 1111 1111 1111 1111 1111 1111 1111 再加一就变成了1000 0000 0000 0000 0000 0000 0000 0000
第一位是符号位有木有,变成1就代表负数了有木有!!!!
于是,这个游戏不仅仅没有大都市,而且当玩家愤然跑到最高分的瞬间会变成负分啊有木有!!!!
至于开头那副图片,其实是官方宣传画……



PS:纯属娱乐~行文仓促,难免有不周之处,望体谅~

作者: xumomo    時間: 2012-10-10 19:17
厉害啊 哈哈
作者: tjshenjian    時間: 2012-10-10 19:20
前两天才刚看见有人玩
作者: qq285023229    時間: 2012-10-10 19:29
没玩过啊!
作者: ysw425842470    時間: 2012-10-10 19:32
我应该说LZ是无聊呢 还是厉害呢
作者: wchjsw    時間: 2012-10-10 19:32
八门改出来的么...话说那个结局也是在其他坛子看到来着,卤煮很有耐心的分析,强悍
作者: 深井兵    時間: 2012-10-10 19:57
哇,技术贴,火速膜拜~~
作者: lee0523    時間: 2012-10-10 20:07
有关末日的游戏
作者: LIAIAN    時間: 2012-10-10 20:11
玩了下 不是我的菜  果断删了!
作者: LIAIAN    時間: 2012-10-10 20:12
玩了下 不是我的菜  果断删了!
作者: yyyxbxb110    時間: 2012-10-10 20:12
纯技术帝!~
作者: d6601120    時間: 2012-10-10 21:17
俺现在才跑到50W
作者: 南宁胖子    時間: 2022-3-9 18:55
提示: 作者被禁止或刪除 內容自動屏蔽




歡迎光臨 比思論壇 (http://108.170.5.78/) Powered by Discuz! X2.5