題:
憤怒的小鳥是確定性的嗎?
Thomas Bonini
2011-12-29 22:30:31 UTC
view on stackexchange narkive permalink

當試圖在更複雜的關卡(擁有許多可破壞實體的關卡)上獲得3星時,我注意到即使玩了50次相同關卡,總是做同樣的事情,但我從未見過相同的場景最後結果。總是有些不同。

相同的輸入是否總是導致相同的輸出,還是其中存在一個隨機因素?

您如何確定輸入的內容是100%相同的?
就像agent86所做的那樣,可以通過電話,特殊程序或簡單地用鼠標模擬遊戲的桌面版本來提供完美的輸入。
五 答案:
agent86
2011-12-29 22:47:10 UTC
view on stackexchange narkive permalink

算法是確定性的,但是可以說發射鳥的總體結果是不確定性,因為它依賴於(非常敏感的)用戶輸入。 / p>

要測試算法和用戶輸入對其的影響,我使用了以下過程:

  • 加載Google Chrome版本的 Angry Birds
  • 加載級別1-1
  • 將鼠標拉回特定的XY坐標。 (這已經超過了鳥的“完全抽籤”的位置。)
  • 釋放鳥,然後等待遊戲達到穩定狀態。

要測量我的XY坐標,我打開了背景Chrome窗口,並將其導航到此頁面。我對齊了兩個窗口,以便可以看到鼠標的X和Y位置,同時當釋放鳥時仍能引起某些事情發生。我將鼠標光標對準這兩個數字周圍的框的左下角,然後鬆開。然後,我記下了鼠標光標的位置(因為只有在未釋放鼠標並且光標在該窗口上方時,顯示才會更新),然後記下“憤怒的小鳥”中的得分。如果您在精確定位鼠標時遇到問題,可以嘗試使用操作系統提供的輔助功能選項,例如Windows上的鼠標鍵

我的得分是相同的,只要我的光標位於與先前迭代相同的完全相同的位置

在提出增強的測試裝備之前,我可以使用它來測量光標的位置像素,我使用遊戲背景圖片中的參考點進行了約10次實驗。我射出的第一隻鳥的得分在8,000和11,000點之間,因此得到了分數。使用增強的測試策略,如果我離開一個像素,我可以預期分數差異在150到500點之間。

我會注意到,光標位於遊戲區域的邊緣,位於瀏覽器窗口之外,遠遠超過了可以拉回小鳥的最大距離,而且我仍然注意到移動我的小鳥時會有所不同光標甚至是單個像素。

此外,在極端情況下,我使用了屏幕截圖,其中光標位於比遊戲窗口不同的顯示器上,並且進行了幾次迭代,使光標保持在同一位置,或者稍微移動了一點。根據我的計算(基於與屏幕截圖的距離的測量),該遊戲能夠基於大約1,284像素寬度的高度上的一個像素差異(544與545像素)創建不同的結果(得分32960與31520)。得出的角度差為0.03度。

我想說,出於任何實際目的,您都可以期望在相同的水平上重複使用相同的通用策略,並期望結果差異很大。控件中的靈敏度非常高,以至於沒有實際的方法可以使它兩次執行相同的操作。如果您在觸摸屏上玩遊戲,則很難將相同的運動再現到單個像素,這一點尤其惡化。

一個像素*可以*很容易表示得分相差很大。這不是對它是否具有確定性的答案;您必須確定您的輸入是相同的。
即使在確定性方案中,開始狀態的微小差異也可能導致結束狀態的巨大差異。它稱為[混沌理論](http://en.wikipedia.org/wiki/Chaos_theory)。
就像我提到的我打算做的@MyrddinEmrys,一樣,我以低至像素的精度重新進行了實驗。我發現,即使我如此精確,造成的傷害也是一樣的。我要說的是,出於玩遊戲的任何實際目的,控件是如此精確,以至於您可以期望系統的最終行為對於任何“正常”人工輸入使用場景實際上都是不確定的。遊戲本身是確定性的。
只是要注意,由於手中的簡單恆定抽動,實際上不可能使人產生相同的精確觸摸輸入。事實是隨機因素,而不是您所發現的《憤怒的小鳥》。
憤怒的小鳥:厘米設備上的毫米遊戲。瘋了
如果您想嘗試此實驗,可以[安裝我的用戶腳本](https://gist.github.com/raw/1536489/angrierbird.user.js)。它在“憤怒的小鳥”頁面中添加了一些框,這些框跟踪準確的光標位置。腳本預覽可在[here](https://gist.github.com/1536489)獲得。
我對@splatteredbits的印像差不多
親愛的agent86,您寫道:“我射出的第一隻鳥的得分在8,000至11,000點之間,因此得分很高。”是否可以使用當前版本運行測試,看看分數是否在系統上更高?
-1
現在的問題是……在半動態實體的水平上(例如“憤怒的小鳥星球大戰”上的激光炮和移動平台),它是確定性的嗎?
這個答案是科學實驗的邊緣。
等一下,您為Arquade完成了所有這一切嗎?+342!
我相信游戲的本質是混亂的。混沌系統是確定性的系統,但是初始條件的微小變化會導致結果的巨大變化。
Pubby
2011-12-30 01:32:07 UTC
view on stackexchange narkive permalink

憤怒的小鳥使用Box2D庫進行物理學。

Box2D是否具有確定性?對於相同的輸入和相同的二進制,Box2D將重現任何模擬。 Box2D不使用任何隨機數,也不基於隨機事件(例如計時器等)進行任何計算。

但是,人們經常需要更嚴格的確定性。人們通常想知道Box2D是否可以在不同的二進製文件和不同的平台上產生相同的結果。答案是不。這個答案的原因與許多編譯器和處理器中如何實現浮點數學有關。如果您好奇,我建議閱讀這篇文章: http://www.yosefk.com/blog/consistency-how-to-defeat-the-purpose-of-ieee-floating-point.html

http://code.google.com/p/box2d/wiki/FAQ#Determinism

太好了(感謝您實際與源進行核對);為了完整起見,您是否有《憤怒的小鳥》使用Box2D的參考?您是從哪兒得到這句話的?
@MarkTrapp http: // www.geek.com / articles / mobile / box2d-creator-asks-rovio-for-angry-birds-credit-at-gdc-2011032 /和http://en.wikipedia.org/wiki/Box2D
我敢打賭,由於許多因素(CPU不足,過熱,頁面錯誤等),物理FPS也會有所不同,從而影響了仿真的“準確性”。 :)
第二種說法含糊不清;我假設的是,如果您在多個體系結構上運行相同的仿真,則可能不會獲得完全相同的結果,但是每個平台的每次仿真都將以相同的方式運行。
@muntoo不一定是正確的,因為即使在較低的幀頻下,開發人員也可以使遊戲運行相同數量的模擬步驟。至於實際的處理器錯誤,這種可能性通常很少在遊戲中被忽略。如果您對確定性模擬的主題感興趣,可以在[gamesfromwithin博客](http://gamesfromwithin.com/casey-and-the-clearly-deterministic-contraptions)中閱讀更多內容,也可以直接在Google上搜索。 :)
@agent86,我將您的措辭更改為“但每個平台和**每個Box2D版本**每次模擬都將以相同的方式運行。” (第一段中的“相同二進制”部分似乎表明了這一點)。
@JoãoPortela,很好。我以為“ release”不是在這種情況下允許更改的變量。
不了解qoute的第一段。那麼Box2D是確定性的嗎?
@Jake是的,它是確定性的,但具有第二段中提到的限制。
還是很困惑。為什麼說“ Box2D將重現任何模擬”而不是“相同”模擬?我正在編寫服務器客戶端鎖步sim卡,並且運行2個相同的client.exe僅在沒有衝突的情況下才能進行相同的仿真。
我不確定@Jake,也許嘗試堆棧溢出。
Matthew Read
2011-12-30 00:26:43 UTC
view on stackexchange narkive permalink

有些關卡在關卡開始後不久會受到隨機爆炸的影響,有些磚塊可能會在您扔鳥之前自行掉落。這些事件很少發生,但是當您在每場遊戲的每個級別都達到三星級的時候,您可能會像我一樣幾次見過它。問題,可能與線程有關。我非常確定,如果您進行了一次測試,每個級別加載了十二次並等待三十秒鐘,那麼您至少會得到一次非零分數。根據Pubby的回答,我只能假設“憤怒的小鳥”應用在某個關卡開始時並不總是為Box2D函數提供相同的輸入。

Joseph KaraokeGuy Holtzinger
2014-12-22 02:26:47 UTC
view on stackexchange narkive permalink

我使用宏錄製器在Facebook上玩。我啟動了錄音機,轉到憤怒的小鳥窗口,然後縮小並播放了前兩隻小鳥。然後我停止了錄音機。每次,鼠標移至精確的像素並以完全相同的力量釋放,等等。這是必須的,因為記錄的鼠標移動每次都以像素為單位進行相同的操作。每次我得到不同的分數,而不是每次殺死相同數量的豬等。此遊戲都不一致

Myrddin Emrys
2011-12-29 23:08:26 UTC
view on stackexchange narkive permalink

我做了10次測試,每次都拉到同一點(也像Agent86的測試一樣,也是Chrome憤怒的小鳥,級別1)。

Red Crosshair of test spot

我從未收到儘管小心翼翼地拉到了相同的位置,並且在開始遊戲之後就馬上進行了兩次相同的得分。我相信《憤怒的小鳥》在很大程度上不是確定性的。

這很容易解釋:它旨在在小型觸摸屏上工作。如果是確定性的,由於輸入設備的精度有限,用戶可以輕鬆地重複移動。這可能是不好的,因為他們的設備實際上可能沒有針對他們想要的精確角度和功率所必需的精度。通過略微改變結果並由於“手指”的輸入,用戶不會注意到精度不夠,也不會因無法做出理想的拍攝而感到沮喪。

agent86的其他測試表明我很可能是錯的。到家後,我將重新測試,因為我可以肯定我一直在精確地放置光標。
我認為你錯了。實際上,觸摸屏使每次獲得相同輸入變得極為困難。例如,iphone有614400像素。這些中的每一個都會產生不同的輸出。
您確定@Daenyth:的輸入分辨率精度為1像素嗎?可能是,但我要說的是不一定。
@Daenyth不一定要每個。超出最大距離後,可能會有一組與中心成相同角度的像素,可以合理地假定它們導致相同
@AndreasBonini,進一步的測試似乎表明它是如此的精確,以至於即使在瘋狂的距離上,單個像素也可能導致結果差異-請參閱我的答案的最新編輯。
這是一個混亂的例子(輸入的微小變化導致結果的巨大變化),而不是不確定性


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...