Rise-of-Nations

如果同時建造兩個奇蹟會怎樣?

  • July 25, 2013

在《國家崛起》中,當兩個相同的奇蹟同時完成時會發生什麼?這發生在我的一場比賽中,在我完成奇蹟之前我贏了。但是會發生什麼?

我在這里以程序員的身份發言,儘管我從未參與過 RoN 的開發。


當一名玩家完成建造奇蹟而另一名玩家仍在建造時,會發生什麼情況,尚未完成建造的奇蹟將被摧毀。

從統計學上講,兩個玩家不可能同時完成一個動作,僅僅因為一台電腦每秒能夠處理數百萬條指令(現在的電腦甚至可以處理數十億條指令),所以即使看起來你們都執行了一個動作同時,您之間的時間間隔通常從幾納秒到幾毫秒不等。

但是,假設在同一個遊戲循環中,您設法與其他玩家同時完成了建造奇蹟,那麼會發生什麼?

好吧,事實是;你仍然沒有同時完成建造奇蹟,但為什麼呢?

電腦真是了不起的機器。他們可以同時執行這麼多任務。事實上,他們做不到。

就像我之前提到的,電腦真的快速地。當像 RoN 這樣的遊戲需要處理單個遊戲循環時,它會遍歷所有可用的玩家,更新他們的軍隊和城市的狀態,查看玩家在鍵盤上按下的鍵,或者處理 AI 的下一步動作. 所有這一切都發生得如此之快,以至於我們產生了一種錯覺,即所有這些任務都是同時完成的。

奇蹟建造完成的那一刻,遊戲邏輯會將該事實保存在記憶體中,並在更新其他玩家的奇蹟狀態時觸發取消。

如果這種情況發生,哪個奇蹟會完成,哪個奇蹟會被取消?好吧,在這種情況下,玩家 1 總是會獲勝,因為循環通常從 0 處理到 n-1(n == 玩家人數)。顯然,玩家 2 將戰勝玩家 1 以外的任何其他玩家,依此類推。

好的,但讓我們假設遊戲使用多個核心並且可以同時處理多個玩家。

現在我們正在進入並行計算的晦澀世界。在這種情況下,任何事情都可能發生;遊戲可能會崩潰(競態條件),或者您最終可能會遇到兩個具有相同奇蹟的玩家(也是競態條件),或者遊戲可能會正常執行(執行緒 1 比執行緒 2 快;您很幸運),或者您可能甚至出現相同的奇觀出現在地圖上的兩個不同位置但沒有玩家真正受益於奇觀效果的情況(一致性問題)。確切的行為很大程度上取決於遊戲程式的好壞,即使知道原始碼,效果也可能完全無法預測。由於這種不可預測性,與多執行緒有關的錯誤因極難檢測而臭名昭著,更不用說修復了。

由於並行計算是一個相當複雜和浪費的主題,我不打算更詳細地解釋它。


TL;博士

不會發生什麼特別的事情。電腦認為誰先完成了奇蹟,誰就會有奇蹟,而另一個玩家最終只會因為白白浪費時間而憤怒。

引用自:https://gaming.stackexchange.com/questions/125321