這個戰力數值問題有沒有算錯?怎麼理解?

設傷害=攻擊*(1-對方防禦/(對方防禦+2000))

在除了防禦其他數值都不變的情況下,防禦+1的效益是遞減的,如下圖

然而算對方戰鬥力的話,

對方戰鬥力=對方攻擊*對方生命/(1-對方防禦/(對方防禦+2000))

=對方攻擊*對方生命*(1+1/2000*對方防禦)

無論防禦數值多少,+1的效益總是=對方攻擊*對方生命*1/2000,是線性恆定的

這如何理解呢?還是說是我算錯了?


上面說的一部分,我補上一部分。

你上面有提及減免係數,另外下面又有人跟你說有效生命。

而且整個題目描述公式的部分很臃腫,漢字很多,

我想統一一下,以下全文按照我下面寫的規則來看:

atk=攻擊力,HP=生命值,eHP=有效生命值,def=防禦力,def%=減傷係數,DMG=傷害

DMG = atk * ( 1 - def% )

def% = def / def + 2000

從你的概念延伸,第一層理解是對的,防禦受益是邊際遞減的。

然後引入一個新名詞,叫有效生命值eHP。

eHP代表當前角色距離死亡前實際能承受多大的傷害,

比如你有100 HP,20% def%。

根據你的公式,實際上你能承受125 DMG。

這個125點傷害經過20%的減傷,大於你本來的100點HP上限。

通常叫做有效生命值 eHp。

eHP=HP / ( 1-def% ),根據你的公式,其實戰力=atk*eHP。

有效生命值的意義在於描述等效防禦。

就剛剛我的例子來說:

假設你明確知道將要面對一個125點傷害的來臨。根據你的描述,假設我有兩個方案。

一、至少擁有100的血,20%的減傷。

二、至少擁有125的血,0%的減傷。

這兩種情況所提供的防禦效果是等效的,就是我能挨過這一下125點傷害的攻擊。

上述兩種情況的有效生命值都是125。

把eHp拆開,得到 eHP = HP * ( def + 2000 ) / 2000

這時def對於eHP是線性增長的。

atk、eHP兩個線性函數得出得出的結局都是線性的。

得到第二個結論,戰力與有效生命值是線性關係,與防禦力本身不是線性關係。


你算的結果是對的,其解釋:

1.雖然每點防禦帶來的減免(1-防禦/(防禦+n))的邊際收益是非線性遞減的

2.但是生命/減免,(也即1/減免的)這個函數的邊際收益是線性遞增的

3.問題出在減免這個函數和減免的倒數的函數,它們的導數(當然的)不一樣

4.生命/減免這個數值概念叫做有效生命值,根據你的減免公式(實際war3也是這類)意思就是每點防禦帶來的有效生命值是線性增加的


防禦減免帶來的效果必須要帶入到實際的戰鬥中才會有效果。

下面的戰鬥力計算方法是正確的。

上面的1點防禦帶來的防禦減免百分比從數學上是正確的,但是如果帶到戰鬥裡面,起到的效果是1/(1-防禦減免)而不是1-防禦減免。


你缺少一個概念:有效生命。


把數值公式單獨提出來看都是耍流氓。

做遊戲數值需要的是能夠最貼合遊戲需求的數值 而不是所謂最合理的數值。


雖然戰鬥力絕對值增長是恆定的,但是增長的百分比的遞減的,所以你前後的計算不矛盾


占坑


推薦閱讀:

如何自動生成lua綁定C++的代碼?
文明5渲染分析:樹林
3D遊戲開發團隊使用git進行版本控制時,怎麼處理二進位文件?
為什麼遠程合作的遊戲項目不好做(1)
ActionScript3現在是否還值得學?

TAG:遊戲設計 | 遊戲開發 | 遊戲設計師 | 遊戲策劃 | 遊戲數值策劃 |