雖然遊戲中用了亂數,而隨機實際上是一種概率模型。遊戲中,陸軍戰鬥中,會取 1~4 的亂數來計算每回合(小時)的傷害。而1~4的隨機是等概率隨機,也就是理論上roll 10000次,roll到1、2、3、4的次數是相同的。均為2500次。因此可以很簡單做一個計算:(1+2+3+4)÷4 = 2.5。
它的意思就是隨機1~4,多次積累下來的總數,平均每次為2.5。
本文針對的是組織度的計算,針對強度是同理的,無非將這個為2.5的亂數變為1.5再進行計算。
名詞解釋
名稱 | 解釋 |
軟攻 | 對軟度部分的攻擊能力 |
硬攻 | 對硬度部分的攻擊能力 |
防禦 | 防禦方的防禦力 |
突破 | 進攻方的防禦力 |
護甲 | 護甲>穿甲則受到傷害×50%,並且對於裝甲部隊來說會有額外傷害加成 |
穿甲 | 穿透護甲的能力 |
組織度 | 組織度為0則會退出戰鬥 |
硬度 | 軟度 + 硬度 = 1。影響部隊受到攻擊類型的比例 |
傷害計算
1、戰鬥時分為攻擊方與防禦方。
2、攻擊力:無論攻擊或防禦,都會用到軟攻、硬攻來計算攻擊力。
3、防禦力:進攻方的防禦力是突破,完全用不到防禦。防禦方的防禦力是防禦,完全用不到突破。
4、根據單位的軟度/硬度分別計算受到的軟攻/硬攻傷害部分。
模型
一個模型可以有很多種表達方式,在此使用一種便於想像的模型來表述
將攻擊力看作攻擊次數,防禦力看作防禦次數。雙方每小時(稱為回合)進行一次交火,會執行相應次數的攻擊與防禦。假設具體數值如下:
攻擊力 | 防禦 | 突破 | |
進攻方 | 100 | 0 | 100 |
防禦方 | 40 | 20 | 200 |
進攻方造成組織度傷害
00_defines.lua 中有如下定義:
LAND_COMBAT_ORG_DICE_SIZE = 4
LAND_COMBAT_ORG_DAMAGE_MODIFIER = 0.05
BASE_CHANCE_TO_AVOID_HIT = 90
CHANCE_TO_AVOID_HIT_AT_NO_DEF = 60
進攻方攻擊力為100,攻擊了100次,而防禦方防禦只有20,只進行了20次有效防禦,另外80次攻擊受到無防禦時傷害。
有防禦時傷害:有效防禦發生時,每次攻擊受到的傷害為 (亂數1~4可以當做期望值為2.5):
亂數×有效防禦時被命中率×基本係數= LAND_COMBAT_ORG_DICE_SIZE×(1-BASE_CHANCE_TO_AVOID_HIT)×LAND_COMBAT_ORG_DAMAGE_MODIFIER=2.5×10%×0.05=0.0125
無防禦時傷害:當防禦次數耗盡時會受到無防禦攻擊,此時傷害為:
亂數×無防禦時被命中率×基本係數=LAND_COMBAT_ORG_DICE_SIZE×(1-CHANCE_TO_AVOID_HIT_AT_NO_DEF)×LAND_COMBAT_ORG_DAMAGE_MODIFIER=2.5×40%×0.05=0.05
因此防禦方受到傷害為
20×0.0125+(100-20)×0.05=0.25+4=4.25
防禦方造成組織度傷害
1、防禦方攻擊力僅40,進攻方突破為100。因此防禦方對進攻方的攻擊是全部處於有效防禦範圍內的。
2、一回合內40次攻擊總傷害為:40×0.0125=0.5。
裝甲單位傷害額外加成
defines中有一個參數
LAND_COMBAT_ORG_ARMOR_ON_SOFT_DICE_SIZE=6
遊戲中單位分為裝甲單位和非裝甲單位。被分為裝甲類型的單位,在攻擊時在軟攻方面有額外加成。
觸發此加成有個條件:敵方的穿甲值不高於本方護甲值。
無視目標單位類型,無論是裝甲單位還是非裝甲單位,只要滿足上面這些條件,就可以觸發加成。
效果是: 傷害計算公式中的亂數最大值從4變為6。 但此傷害只作用於目標的軟度部分。
亂數1~6的期望值為3.5。
我們繼續使用之前的例子,並添加一些參數:
1、進攻方使用的是裝甲單位。
2、防禦方使用的是軟度100%的單位。
3、防禦方的穿甲不能穿透進攻方的護甲。
此時進攻方的傷害能力產生了變化:
1、每回合有效防禦傷害:3.5×10%×0.05=0.0175。
2、每回合無防禦時傷害:3.5×40%×0.05=0.7。
3、實際就是 有裝甲單位傷害額外加成的單位 對非裝甲部分能造成1.4倍的傷害。
軟度/硬度
為了便於理解,只考慮一方的進攻力與另一方的防禦力。
軟攻 | 硬攻 | 防禦 | 硬度 | |
攻擊方 | 1000 | 200 | ||
防禦方 | 500 | 70% |
軟攻攻擊硬度70%的單位,只有30%的攻擊有效,即1000×30%=300 次。
硬攻攻擊硬度70%的單位,只有70%的攻擊有效,即200×70%=140 次。
此時總攻擊次數為:300+140=440 次。
因為防禦方防禦為500,因此所有傷害均為有效防禦傷害:0.0125。
總傷害:440×0.0125=5.5。
若防禦方防禦為200有效防禦傷害+無防禦傷害200×0.0125+240×0.05=2.5+12=14.5
若進攻方有裝甲傷害額外加成,防禦方防禦依然為200
此時需將軟攻造成的傷害和硬攻造成的傷害分開計算。
軟攻傷害部分+硬攻傷害部分14.5×(300/440)×1.4+14.5×(140/440)×1=13.84+4.61=18.45
或從頭計算
( 有效防禦軟傷害+無防禦軟傷害 )×1.4+(有效防禦硬傷害+無防禦硬傷害)×1[300/440×200×0.0125+300/440×(440-200)×0.05]×1.4+[140/440×200×0.0125+140/440×(440-200)×0.05]×1