Temple Run的終點

好久不更新了,一是懶,二是忙。國慶八天不做作業的後果就是這一週狂補作業。於是即使到現在我的作業都還沒有補完,先不管了,來更新一篇吧。

忙裏偷閒,這幾天一直在玩Temple Run,有空就刷上幾局。正巧的是,最近關於Temple Run有無終點的討論又熱烈起來了。有人說跑到5億分就能看到終點,原狀態是這樣的:“最後主人公逃出森林,重返繁華大都市。終點需要跑到5億分,而5億分需要不死且狂吃金幣不間斷跑48小時以上。。。。高潮是,全球已經有上百人跑到了終點……這尼瑪算是一種修行麼……”還有理有據的發了張所謂的終點圖。如下:

這都跑到上海來了,明顯不科學,雖然這圖看上去毫無PS痕跡。

這尼瑪我一開始還傻乎乎的信了,後來越覺得不對勁,這怎麼可能有終點,怎麼可能有終點,怎麼可能有終點呢??

伴隨着我的質疑,又看到了一篇文章,文章作者通過Android程序調試的方式修改了Temple Run的計數器,直接將分數改到了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就代表負數了有木有!!!!

於是,這個遊戲不僅僅沒有大都市,而且當玩家憤然跑到最高分的瞬間會變成負分啊有木有!!!!

摘錄結束,繼續我們的討論。其實我們完全可以問,既然作者可以通過調試直接改分數,那爲何不能直接看看Temple Run的代碼裏有沒有關於終點的代碼呢?

好吧,我們先回歸一下文章最初那張圖片,剛開始我們說,這圖看上去毫無PS痕跡,但其實,稍微仔細一看,就會發現滿滿的都是PS痕跡。以不很專業的3D動畫基礎判斷,這幅圖是利用Maya或者3D等軟件獨立渲染出來的學員作品。之所以說是學員作品,是因爲這幅圖的水面效果做的很一般,水的材質有問題,只有反射效果沒有折射效果,並且沒有加入物理學特效,一點水波紋都沒有。那麼首先來說否定了神廟逃亡的終點是圖中這個德行,也就是說這張圖純屬意淫之作。

再次,首次進入遊戲時,每奔跑1米便獲得10分,而隨着遊戲內獲得金幣數量的增加,這一比例會加大。這就意味着,隨着遊戲時間的增加,這一比例能夠越變越大,也就是說每次的分數都應該是成遞增形式增長的,那麼相同時間內獲得的分數是有差異的,所以48小時內獲得的分數有可能24小時就可以完成。那麼文章開頭那條狀態顯然是假的。

Temple Run的“終點”

其實在神廟逃亡剛剛上市時,就有玩家在詢問這款遊戲是否有終點了,只能說遊戲內那個逃離神廟的道路是沒有終點的,但是遊戲本身是有終點的。

看App Store 裏面遊戲的簡介就知道這是沒有盡頭的了。

很多人說這個終點是遊戲的彩蛋,但其實遊戲真正的彩蛋是在開啓教學模式後,遊戲的第一個右轉彎時連續向右快速滑動三下,這時玩家會進入一條沒有盡頭也沒有金幣的長廊,這時除非你想死,否則將會一路安全的跑下去。不過這個彩蛋只限於iOS版的神廟逃亡。

遊戲真正的終點

作爲一款遊戲而言,神廟逃亡的終點就是當玩家完成了所有的成就,以及用自己賺到的金幣購買了全部的人物形象和增值壁紙之後,就到達了這款遊戲的“終點”,當然不要用修改器速成,這樣會大大丟失遊戲本身的樂趣,雖然收集其這些道具可能真的要有5億分的累計分數,但是卻遠沒有傳說中那樣遙不可及。

Ps。遊戲內成就係統的最高米數成就、最高分數成就都只有1千萬,這也就再次證明了5億分的傳說只是浮雲。

文章來自:Temple Run的終點


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章