當試圖在更複雜的關卡(擁有許多可破壞實體的關卡)上獲得3星時,我注意到即使玩了50次相同關卡,總是做同樣的事情,但我從未見過相同的場景最後結果。總是有些不同。
相同的輸入是否總是導致相同的輸出,還是其中存在一個隨機因素?
當試圖在更複雜的關卡(擁有許多可破壞實體的關卡)上獲得3星時,我注意到即使玩了50次相同關卡,總是做同樣的事情,但我從未見過相同的場景最後結果。總是有些不同。
相同的輸入是否總是導致相同的輸出,還是其中存在一個隨機因素?
算法是確定性的,但是可以說發射鳥的總體結果是不確定性,因為它依賴於(非常敏感的)用戶輸入。 / p>
要測試算法和用戶輸入對其的影響,我使用了以下過程:
要測量我的XY坐標,我打開了背景Chrome窗口,並將其導航到此頁面。我對齊了兩個窗口,以便可以看到鼠標的X和Y位置,同時當釋放鳥時仍能引起某些事情發生。我將鼠標光標對準這兩個數字周圍的框的左下角,然後鬆開。然後,我記下了鼠標光標的位置(因為只有在未釋放鼠標並且光標在該窗口上方時,顯示才會更新),然後記下“憤怒的小鳥”中的得分。如果您在精確定位鼠標時遇到問題,可以嘗試使用操作系統提供的輔助功能選項,例如Windows上的鼠標鍵。
我的得分是相同的,只要我的光標位於與先前迭代相同的完全相同的位置。
在提出增強的測試裝備之前,我可以使用它來測量光標的位置像素,我使用遊戲背景圖片中的參考點進行了約10次實驗。我射出的第一隻鳥的得分在8,000和11,000點之間,因此得到了分數。使用增強的測試策略,如果我離開一個像素,我可以預期分數差異在150到500點之間。
我會注意到,光標位於遊戲區域的邊緣,位於瀏覽器窗口之外,遠遠超過了可以拉回小鳥的最大距離,而且我仍然注意到移動我的小鳥時會有所不同光標甚至是單個像素。
此外,在極端情況下,我使用了屏幕截圖,其中光標位於比遊戲窗口不同的顯示器上,並且進行了幾次迭代,使光標保持在同一位置,或者稍微移動了一點。根據我的計算(基於與屏幕截圖的距離的測量),該遊戲能夠基於大約1,284像素寬度的高度上的一個像素差異(544與545像素)創建不同的結果(得分32960與31520)。得出的角度差為0.03度。
我想說,出於任何實際目的,您都可以期望在相同的水平上重複使用相同的通用策略,並期望結果差異很大。控件中的靈敏度非常高,以至於沒有實際的方法可以使它兩次執行相同的操作。如果您在觸摸屏上玩遊戲,則很難將相同的運動再現到單個像素,這一點尤其惡化。
憤怒的小鳥使用Box2D庫進行物理學。
Box2D是否具有確定性?對於相同的輸入和相同的二進制,Box2D將重現任何模擬。 Box2D不使用任何隨機數,也不基於隨機事件(例如計時器等)進行任何計算。
但是,人們經常需要更嚴格的確定性。人們通常想知道Box2D是否可以在不同的二進製文件和不同的平台上產生相同的結果。答案是不。這個答案的原因與許多編譯器和處理器中如何實現浮點數學有關。如果您好奇,我建議閱讀這篇文章: http://www.yosefk.com/blog/consistency-how-to-defeat-the-purpose-of-ieee-floating-point.html
有些關卡在關卡開始後不久會受到隨機爆炸的影響,有些磚塊可能會在您扔鳥之前自行掉落。這些事件很少發生,但是當您在每場遊戲的每個級別都達到三星級的時候,您可能會像我一樣幾次見過它。問題,可能與線程有關。我非常確定,如果您進行了一次測試,每個級別加載了十二次並等待三十秒鐘,那麼您至少會得到一次非零分數。根據Pubby的回答,我只能假設“憤怒的小鳥”應用在某個關卡開始時並不總是為Box2D函數提供相同的輸入。
我使用宏錄製器在Facebook上玩。我啟動了錄音機,轉到憤怒的小鳥窗口,然後縮小並播放了前兩隻小鳥。然後我停止了錄音機。每次,鼠標移至精確的像素並以完全相同的力量釋放,等等。這是必須的,因為記錄的鼠標移動每次都以像素為單位進行相同的操作。每次我得到不同的分數,而不是每次殺死相同數量的豬等。此遊戲都不一致
我做了10次測試,每次都拉到同一點(也像Agent86的測試一樣,也是Chrome憤怒的小鳥,級別1)。
我從未收到儘管小心翼翼地拉到了相同的位置,並且在開始遊戲之後就馬上進行了兩次相同的得分。我相信《憤怒的小鳥》在很大程度上不是確定性的。
這很容易解釋:它旨在在小型觸摸屏上工作。如果是確定性的,由於輸入設備的精度有限,用戶可以輕鬆地重複移動。這可能是不好的,因為他們的設備實際上可能沒有針對他們想要的精確角度和功率所必需的精度。通過略微改變結果並由於“手指”的輸入,用戶不會注意到精度不夠,也不會因無法做出理想的拍攝而感到沮喪。