《皇室戰爭》中關於蘭徹斯特方程的應用及數值設計


轉自:http://www.gameres.com/490965.html

皇室戰爭app登錄ios平台后,本人對其產生了強烈的興趣。其獨特的玩法將moba、塔防、集換式卡牌等各種有趣的元素結合在一起,十分有趣。然而對我來說,最令我感到有趣的是皇室戰爭是如何差異化各種卡牌的效果,然后使得卡牌之間相互制約相互克制的,達到游戲相對的平衡。

  短暫的幾天接觸這款游戲之后,發現卡牌的效果差異化主要體現在以下幾點:

  • 群殺傷和點殺傷
  • 近程傷害與遠程傷害的區別(遠程的優勢:先手和集火)
  • 對地傷害和對空傷害的限制


  是否具有攻城特性、是否具有突進特性(可理解成先手優勢)

  其中1、2倆點的差異化,都可以從中找到蘭徹斯特方程的影子,我覺得深刻體會其中的含義,對指導游戲數值的設定是有幫助的。3、4倆點主要是人為的設置區分。所以我更加深刻感受到1、2倆點對游戲數值設計的影響及其魅力所在。

  我就以第一點(群殺傷、點殺傷)談談我的理解。游戲里面有三張卡牌。一張是王子,是個騎士,高氣血高攻擊,近戰單體輸出;一張是骷髏軍團,是一群低氣血低攻擊的近戰單體輸出組成的團隊;最后一張是一位女武士,招牌就是360度無死角的旋風斬(群體輸出),但自身屬性介於騎士和骷髏雜兵之間。這三者形成了簡單的克制關系:王子被骷髏軍團克制,骷髏軍團被女武士克制,女武士單挑卻也打不過王子。下面我們先來看看三者的屬性區別。

根據現有的關於皇室戰爭的一些數值,可以推斷游戲的傷害計算公式應該不涉及防御的減傷效果,無論是加法公式還是乘法公式。因為游戲中根本不存在類似防御值的屬性存在。就是簡單的氣血和傷害,注意到是即時制的游戲,所以我們這里談到的傷害更多的是指dps,即每秒的輸出量(由傷害at和攻擊間隔sp計算所得)。

  我們考慮到倆個單體目標互相pk,判定勝負的關鍵在於角色的輸出和承受能力,易得到戰斗力=HP*DPS。注意這里我們描述的戰斗力僅限於倆個單體互博,很明顯感受到兩個人同時毆打一個人效果更明顯,而不是倆人依次去討人過招。

  我們先研究“王子VS骷髏軍團”:“A_VS_B  骷髏軍團B完勝”

  蘭徹斯特方程平方律:

  基本假設:部隊的輸出火力,正比於部隊的士兵數量,以遠程子彈射擊來模擬最為適合。設部隊A和B的士兵數量為X、Y,單個士兵對對方的減員效率為μ、ν。

  得到微分方程組:

化簡得:

進而有:

注意到:

於是有:

這就告訴我們集群的戰斗力和單個單位的戰斗力成正比,和單位數目的平方成正比。根據此模型可求得1個王子約等於可以和13()個骷髏打平手。但是要注意的是這個結果是建立在連續函數的基礎上計算出來的結果。

  注意到對於此題中,王子生命的衰減並不會影響到王子的輸出能力的衰減。王子的生命(人數)從1到0的漸變過程中,輸出能力一直不變,所以要建立離散的模型來刻畫:

  得到改進后的微分方程組:

其中:

經整理得:

由此公式計算出來1個王子約等於可以和18()個骷髏打平手。

哈哈,我突然發現出矛盾了。因為游戲里1個王子完全干不過20個骷髏啊,被秒殺的份啊,這是為什么呢?因為王子的傷害值Aat=220,而骷髏的氣血值Bhp=30,傷害完全溢出了嘛。實際上王子的Aat應該降到取30算,這樣修正過之后結果是1個王子可以和6.99()個骷髏群毆打平手。

其實我們在處理的過程中由於對傷害采用了DPS的算法,也就是說我們並沒有完全的做離散化的模型,實際上還是有誤差存在的。鑒於此,為了完全模擬離散化的情況,我使用VBA編程,簡單的實現了下,程序跑出的結果如下:

 

程序表明,1個王子只能和7個骷髏打群架,真叫是拳皇也打不過八個小學生。

  (程序實現很粗糙,每隔0.1秒做一次傷害判斷計算,沒有考慮雙方第一次出手前是否有攻擊前搖,比較粗糙,陪同簡歷的還有一份相關的xlsm文件)

  我們接着討論“骷髏軍團VS女武士”:“B_VS_C 女武士C完勝”

  當我玩皇室戰爭時,看到女武士360度無死角的大風車群傷模型,再比較了下女武士C的傷害值Cat=121和骷髏軍團B的氣血值Bhp=30,121>30,想象下那肯定是女武士一轉,轉倒一大片啊。只可能在骷髏數目足夠多(相當多)的情況下,一下子集火掉女武士,這樣雙方均被消滅。仔細想想骷髏軍團的骷髏數目其實是在增加“骷髏軍團整體”一次普攻造成的傷害的大小,且成線性關系(注意與“王子VS骷髏軍團”模型比較,這個模型中骷髏軍團的實力與骷髏的數目的平方成正比)。注意到女武士的群攻傷害,殺死一個骷髏和殺死一群骷髏的難度是一樣的,也就是說對於骷髏軍團而言,數量多帶來了火力的成倍增加,但是數量多在面對群傷技能時候承受傷害的能力反而降低了。對了這正是蘭徹斯特方程第二線性率的基礎假設:

  蘭徹斯特方程第二線性率:

  基本假設:在蘭徹斯特方程平方律的基本假設上增加一條,受擊方的減損率受受擊方士兵數目影響,且成線性關系。

  微分方程組:

這里不再詳細討論第二線性率,因為這樣反而把問題復雜化了,為了理解一個簡單現象偶然發現一個模型,反過來在拿來解釋就沒有大多意思了。或者這里我理解的是,“多人單體傷害VS單人群體傷害”的戰斗過程,等價於“單人單體傷害(但傷害值翻倍)VS單人單體傷害”。因為當大家都是單體時,就不要區分傷害是單體的還是群體的了。

  下面這是程序模擬跑出來的結果:

結果似乎沒什么意思。

  最后我們討論“女武士VS王子”:“C_VS_A  王子A完勝”

  Wait,這需要討論嗎…

  王子笑着說:旋風斬是什么,能吃嗎,來我們站着捅個痛快。

  王子屬性完全碾壓女武士,4.5秒后,女武士卒,王子剩余56%的氣血值。

  (這部分也用VBA編程模擬測試了下,4.5和56%都是跑出來的數據)

分析了許多,該到總結的時候了。如何使得 王子、女武士、骷髏軍團 循環克制,數值上該滿足什么關系。我給出一個比較簡單的判定方法:

  1.骷髏軍團B克制王子A:

  2.女武士C克制骷髏軍團B:

  3.王子A克制女武士:

聯起來就是

同時除去 

這里為什么是,我覺得改成^2也是可以的。畢竟這些結論是從連續函數的模型中得出來的,事實上程序實現的離散的真實的模型可能還是有些誤差的。

 

19樓回復:

樓主忘了算體積了,在3D游戲中,蘭徹斯特的運用要考慮到碰撞體積的,這個再當年別人用蘭徹斯特解碼魔獸爭霸的時候就已經寫過類似的文章,拿你王子與骷髏海舉例,一個王子,與骷髏最多的接觸面也就是8,這里需要考慮雙方模型半徑,計算接觸面的,再考慮遠程圍殺一個士兵的時候,還需要考慮步移,一般遠程AI,假設遠程射程500,如果目的位置有人,會往側面走一步,而不會前進走一步走到480的距離位置輸出,當遠程鋪排達到120度以上,士兵的移動速度很影響輸出。說到這里,你想通過傳統數學知識去解決這個問題,估計你得把Matlab搬出來,還有你的具備相當高深的神經網絡與人工智能知識進行對AI可能性的分析。好了,說了那么多,總結一下,其實沒必要對這類游戲的數值去課本化,科普化,因為根本沒法變通,首先宏觀的策略設計思路明確,才是最重要的,每種卡牌的設計目的是什么,作用目的是什么。搞清楚這些,數值嗎,填一個相對可靠滿足你宏觀策略的粗值就夠了,剩下的學學DOTA的設計思路,不斷的修正數值,來明顯體現你宏觀策略目的的價值。




關於19樓回復我的補充:

第一,作為一個死理性派,希望模型嚴謹完美沒有瑕疵,總希望簡化模型,忽略次要因素,但是文中的確忽視了碰撞體積的因素,而這個因素並非次要因素,影響蠻大。

關於近戰肉搏:
CR中“王子”VS“骷髏軍團”的戰斗過程,的確發生了接觸面不足的情況,同時與“王子”作戰的“骷髏”上限目測10個左右,其他骷髏在外圍打圈無法直接參與輸出。也就是說近戰肉搏碰撞體積嚴重影響了蘭徹斯特平方律的發揮,或者說嚴重影響了近戰輸出的發揮(近戰輸出難以集火敵方目標)。如果考慮更復雜的“多對多的近戰肉搏”,碰撞體積、接觸面積會更大的影響蘭徹斯特平方律的發揮,要想集火目標可能還要考慮陣型、位置、移速等參數,最糟糕的情況是其戰斗過程可能會演變成蘭徹斯特第一線性率的模型。這不禁讓我想起了武俠中武林高手可以在千軍萬馬中縱橫無敵,而那種科幻電影中龐然大物怪獸被群毆干掉的場景(好像電影里面不是這樣的場景,看來還是怪獸太強大了),這不就是碰撞體積、接觸面積在作怪嘛。至於蕭峰一招“亢龍有悔,小羅羅倒一片”不就說的是女武士的群殺輸出效果嘛(這里我大膽的外推下:亢龍有悔對頂級高手效果應該不是很好才對。什么你說蕭峰的降龍十八掌單挑勝過N多武林高手,策划、編劇、導演,你這這是怎么想的~~~~(>_<)~~~~)。
小結:碰撞體積對近戰輸出影響巨大。

關於遠程輸出:
我一直以來,對於遠程輸出的看法就是“由於射程的因素,最容易集火目標”,也就最容易達到蘭徹斯特方程平方律的效果(不考慮玩家拉開殘血兵,找到合適位置,再次參與集火的情況)。在一般簡單AI的設計下,首先遠程弓箭手的確容易同時集火目標,但是如果是“就近原則輸出”很可能就不一定在集火了。再考慮到碰撞體積的影響,層主提到AI設計中遠程輸出還需要考慮步移,這點意味着在存在碰撞體積的影響下,即使是遠程火力對拼,也是很難達到蘭徹斯特方程平方律的效果的。不過可以想象的是,碰撞體積對遠程輸出的影響應當遠遠小於近戰輸出。(大膽預言:CR中應該不會存在“遠程骷髏軍團(軍團人數20左右的)”類似的卡片,,不然就太變態了,出了別打臉,出了費用是10費可好~~~~(>_<)~~~~)
小結:碰撞體積對遠程輸出也有一定的影響,但並不大。


總結:3D游戲中的碰撞體積的設計初衷可能不單單是為了美觀、真實,而且深深地影響着戰斗過程,使得戰斗過程變得更有游戲體驗(有趣)了。蘭徹斯特方程只是理想化的模型。


為什么說層主的回復讓我豁然開朗了呢?
我在原文中提到“卡牌差異化”主要體現的四點,其中第二點描述:“近程傷害與遠程傷害的區別(遠程的優勢:先手和集火)。其中1、2倆點的差異化,都可以從中找到蘭徹斯特方程的影子,我覺得深刻體會其中的含義,對指導游戲數值的設定是有幫助的。”
這是我之前的看法和描述,而現在我終於明白“碰撞體積對 近程傷害、遠程傷害的影響的程度不同,導致 ‘群體近戰肉搏戰斗過程偏向於蘭徹斯特方程第一線性律的模型、群體遠程互射戰斗過程偏向於蘭徹斯特方程平方律的模型’”。對的,這個關鍵因素就是碰撞體積,這是我之前沒有認識到的,所以寫在這里權當做我對第二點差異化的理解吧O(∩_∩)O哈哈~但是要數學化碰撞體積的影響,那真是太難了,這里面還要考慮到AI設計,小的感覺壓力山大,還是偷懶不坑自己了,就用文字闡述代替模型驗證了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM