如何計算戰力?

一款手機遊戲,有攻擊、防禦、生命三屬性,傷害值=攻擊-防禦。該如何科學地計算戰力呢?具體來說,如果戰力=x攻擊+y防禦+z生命,這裡如何確定係數x,y,z?有沒有什麼科學嚴謹的方法?還是憑感覺定?

PS:因為傷害用的是減法公式,所以可能存在不破防的情況,如果攻防碾壓對手,那對手生命值再高也沒用。那是否意味著x和y的值應比較高,z值應較低?但具體該怎麼定?


-

@柯冠群的思路是對的,但算早了一步:遊戲中戰鬥力相等意味著兩單位戰鬥回合數相等,所以戰鬥力確定應在模型差異化之後進行。

我舉個反例來說明一下:

這是你的原生模型。

這個模型平衡的條件是:兩兩對A的戰鬥回合數必須是三回合。例如這樣

但如果是6回合呢?就會變成這樣

減法公式,經典戰鬥模型總會遇到這個問題。非限定戰鬥回合數的戰鬥可造成戰鬥力估值的偏差。而且在沒有單回合美術表現時間作為設計依據的情況下,這個3回合是拍(腦袋)出來的。

但,這還不是最虐的……最虐的是做三職業以上平衡的話,就會出現這樣的情況……

模型對K戰鬥時長平了,但戰鬥力平不了。三組戰鬥回合數你最多保兩組就不能再多了,剩下一組一定極其奇葩……附模型平衡九宮格(九宮格數字是回合數):

=============================坑爹分割線==========================

所以說,這個戰鬥力平衡的定義,很重要。我目前想到的有以下四個標準:

1,戰鬥力以不同模型之間的戰鬥平衡為基礎條件,先建立平衡再破壞平衡。

2,戰鬥力是戰鬥數值中的一般價值量,即把所有戰鬥數值統一轉換成一個代表角色實力的數值,恆定值方面最後得到的是一個連等式。

3,戰鬥力分兩種:一種是數值計算時用到的一般價值量,一種是給玩家看的戰鬥參考;前者要求非常精確,後者可以不精確但必須讓玩家容易理解。(下面例子是數值計算)

4,一個屬性在不同模型中的戰鬥力可能是不同的,必要時可嘗試手調。

所以,根據以上四個標準,我的數值流程一般是這樣的

1,建立原生模型(圖1)

2,拆分差異化模型(圖4)

3,九宮格戰鬥配平(圖5)

4,設「戰力=x攻擊+y防禦+z生命」,可得以下方程組

frac{720*z}{140*x-20*y}=frac{240*z}{60*x-20*y}

frac{288*z}{60*x-20*y}=frac{720*z}{120*x-20*y}

frac{240*z}{120*x-20*y}=frac{288*z}{140*x-20*y}

解之得XYZ值為三項屬性戰鬥力。

但這裡需要注意的是:

1,方程一定寫對,否則可能實數範圍內無解

2,技能型模型的生存能力部分是經過特殊處理的。別的模型中「1攻擊 = 1防禦 = 6生命」,但技能型模型中是「1攻擊 = 1防禦 = 4.8生命」所以最後成型的平衡模型是這樣的

九宮格配平如圖5。

兩兩對沖全平,戰鬥力全等。

二,暴擊等數值的戰鬥力換算

三,技能效果等戰鬥力測定(相對戰鬥力VS絕對戰鬥力)

四,給玩家看的戰鬥力

PS:這個模型是以對沖模式寫出來的,所以看起來可能會比較擰巴,但實際玩起來很好理解:防禦都一樣,血多的就是T,攻高的就是DPS;這個也可以寫成循環模型,例如「A克B,B克C,C克A」的形式,也能達成平衡。但這種模型個人感覺在應用層面很容易失控,其中一環倒掉經常產生連鎖反應。

PS2:其實這個模型還可以再次簡化,去掉防禦,看起來更直觀一些。因為防禦也是你的有效生命嘛,先要有最小模型,防禦已經算擴展了

PS3:三職業九宮格平衡是有最優解的(沒記錯的話用到了積分),但那個最優解在感受上也比較奇怪,因為其實你要求的並不是三職業兩兩對沖的時候六個回合數完全相等。

-


可以搜索下蘭切斯特方程相關領域最新的研究成果,數學和軍事領域肯定比遊戲研究的清楚的多。


初級數值策劃一枚,對類似的簡易戰鬥系統有過了解,分享點心得,拋磚引玉。

設計思路很簡單,和題主描述的一樣,每個戰鬥單位的核心屬性只有:攻、防、血。

戰鬥系統中的傷害公式為:理論傷害值 = 攻方的攻擊力 - 守方的防禦力。

當理論傷害值&>0時,實際傷害值 = 理論傷害值;

當理論傷害值≤0時,實際傷害值 = 1(不破防時的最小傷害);

先高度概括下我是怎麼計算戰力的:

第一步:預設戰鬥回合數

第二步:戰力 = 預設戰鬥回合數 × 攻擊+預設戰鬥回合數 × 防禦 + 1 × 生命

======================分割線=======================

一、預設戰鬥回合數

顧名思義,該步驟就是設定你希望這個戰鬥系統中單局戰鬥持續的時長,這一步很重要,是整個戰鬥體系的根基,它會直接影響到後面戰力的計算、數值成長的設定、戰鬥單位類型的設定等等。

預設戰鬥回合數為【3回合】(也可以是其他回合數),即:戰鬥會在3回合內結束。

二、戰鬥形式

前提設定:戰鬥單位只有攻、防、血三種屬性,無攻速、閃避、暴擊、技能等屬性。

有兩種常見的戰鬥形式可供手游選擇:

  1. 戰鬥單位面對面互扇耳光,出手順序不分先後;(腦補對象:ARPG)
  2. 戰鬥單位根據設定好的出手順序,循環交替發起進攻;(腦補對象:卡牌手游)

兩種形式本質上區別不大

三、戰鬥單位數值模型

前提設定:預設的戰鬥回合數為3回合

以3回合為依據,設定戰鬥單位初始屬性以及成長係數:

攻:80 攻係數:3

防:20 防係數:1

血:180 血係數:6

如上數值模型中係數的含義:戰鬥單位每提升1級,對應的屬性提升值。

戰鬥單位數值模型並不是唯一的,滿足如下等式就成立:

1) (攻 - 防)× 預設戰鬥回合數 - 血 = 0

2) (攻係數 - 防係數) × 預設戰鬥回合數 - 血係數 = 0

在做好了所有設定之後,於是就能得到下圖中的表格:

戰鬥單位1-20級(拉升至100級or1000級也一樣)的屬性符合兩個結論:

1) 同級別的戰鬥,在3回合結束;

2)不同級別的戰鬥,在3回合內結束(高級別單位屬性全面碾壓低級別單位);

四、戰力計算

經過前面一系列設定,到這裡就比較容易得出結論了:

戰力 = A×攻 + B × 防 + C × 血(只有這三種屬性)

接下來就是找出A、B、C。這三個係數就是三種屬性在戰力中的權重,也可以理解為是三種屬性在戰鬥系統中的價值

預設的戰鬥回合數為3,意味著每1點攻擊力能在單局中發揮3次作用,設定價值為3。

同理,每1點防禦力的價值也為3。

生命值的價值則和預設回合數無關,因為每1點生命值只能在1個回合內生效,只要掉血了,在當前的戰鬥體系下就無法回血,即生命值的價值為1。

於是:戰力 = 3 × 攻 + 3 × 防 + 1 × 血,與答案第一段對應。

五、擴展

截至第四段已經基本可以推出一個可用的戰力計算公式了。

但大家心裡肯定會想,這個戰鬥系統未免太簡單了,要知道現在的頁游or手游,圍繞戰鬥系統的周邊系統多如牛毛 ,比如:裝備、技能、符文、強化、升星、鑲嵌寶石、進化等等等等,怎樣保證戰鬥能按照預設的回合進行呢?

解這兩個問題的思路還是圍繞【預設戰鬥回合數】【戰鬥單位數值模型】

以裝備系統舉例,假設我們設計了一把佩戴等級要求為10的武器,附加屬性30點攻。那麼同時我們也會設計一件佩戴等級要求為10的盔甲以及飾品,分別附加10點防和60點血。

有了裝備系統自然少不了強化系統,強化的思路同理,每強化1次武器提升3點攻,那麼強化1次盔甲和飾品,則分別提升1點防和6點血。

總結:無論增加什麼周邊系統,圍繞【預設戰鬥回合數】【戰鬥單位數值模型】進行周邊系統數值設計,就能保證戰鬥系統穩定運行。

六、特殊情況處理

當周邊系統越來越多,玩家不按照設定的劇本走,他們只把錢花在防和血上面,而傷害公式又是減法公式會導致無法破防,難道兩個戰鬥單位互扇耳光到世界末日?

解:設定最長單局戰鬥時間 or 最大戰鬥回合數,超出時長範圍則判定某一方獲勝。此時失敗的那方必然會去尋找獲勝的方法——在保證防與血和對面差不多的情況下,花錢提升攻擊去破防(OK,回到劇本,只要按照劇本走,戰力公式就成立)。

寫在最後的最後,以上僅為很初級的研究,拋磚引玉,歡迎交流。


承蒙錯愛,這是個很有意思的問題。暫時說說我的思路,能力有限,歡迎指正。

由於戰力是反應戰鬥能力的高低,那麼我們可以認為戰力高的戰勝戰力低的概率會很大。(在當前題設建立的模型下為100%)

那麼我們假定有a,b兩個角色,且a生命/b傷害 &> b生命/a傷害,那麼我們就是說a的戰力比b高。由於我們討論的都是正常情況所以他們的取值都應該是大於零的。那麼就有a生命*a傷害 &> b生命*b傷害。

又由於傷害 = 攻擊 - 防禦 ,帶入上式,有a生命*(a攻擊 - b防禦) &> b生命*(b攻擊 - a防禦)

現在我們就得好好審視這個不等式了,由於傷害是大於零的,所以我們必須保證a攻擊&>b防禦,要不然這個等式就不成立。又由於b防禦不屬於a的屬性,所以我們將它看做一個常數,一個基準點。

由此我們得出一個論點:每提升一點防禦,就相當於減弱了所有其他人的戰鬥力,而且是減少 「生命」 這麼多的戰鬥力。而當減少的戰鬥力大於當前被減少角色的戰鬥力時,也就是說我的防禦已經超過他的攻擊。這時候我必定是可以戰勝他的。

那麼有這麼一個公式:生命*防禦變化,其中生命並不是指自己的攻擊,而應該是生命的上限,也就是說我提高了一點防禦就相當於離最厲害的那個人更近了一步。

那麼最終的公式是這樣的:生命上限* 防禦 + 生命*(攻擊 - 1),後半部分代表著自身相對於他人提升的戰鬥力。

以上便是我個人的思路,不少拍腦袋的地方請見諒,有機會我自己驗證一下,也希望你也能批判性的驗證下。


假設A 攻擊 防禦 生命 分別為 20 5 10

假設B 攻擊 防禦 生命 分別為 10 10 10

假設C 攻擊 防禦 生命 分別為 10 5 40

那麼最終結果是 A勝B ,B勝C,但是C勝A。

這個戰鬥力排名好難。。。

我想到一個方法,就是用能擊敗某角色的最少點數和,定義為該角色的戰鬥力。

比如能擊敗10 10 10的最少點數應該是 11 10 0,那10 10 10的戰鬥力就為 21。

公式用線性相加肯定是不行的。極限來思考,一個攻擊力為0的角色註定戰勝不了任何人,肯定是戰鬥力為0。

剛才我去演算了一下,最少點數和 = 攻擊+防禦+1。

總之這個體系就蛋疼的很。算個毛的戰鬥力啊。。。要是現在讓我去玩這個遊戲,我肯定報復社會的把所有點數全加在防禦上!!


呃,減法公式擴展很蛋疼的,很多都是戰鬥模擬做的,但是不是沒有科學的方法。

這個方法有個假設,就是所有不同特色的單位或角色,被選擇概率是一樣的。

=================================

常見的減法防禦公式為:

傷害=攻擊-防禦,當攻擊-防禦&<1時,傷害=1

Dam=Att-Ar,當Att-Ar&<1時,Dam=1

很顯然,不同攻擊攻擊不同防禦傷害比例是不一樣的,不像除法公式比例由防禦確定。

對於這種情況,可以借鑒一下常見的傷害-護甲類型表:

其中傷害收益為傷害比例的平均數

並且,每個護甲類型對每種攻擊有對應傷害比例,比如受到130%傷害率相當於100血量對這種傷害只有100/1.3的有效血量。按照3種傷害和3種護甲類型設計上有對等的出場地位,那麼期望上此種護甲的血量比例加成為傷害比例的倒數的平均數。

同樣的對於減法公式,我們也可以列出類似的表格:

在這裡,每一個防禦數值相當於對應一個防禦類型,每一個攻擊數值相當於對應一個攻擊類型。在用標準的生命*攻擊力計算出基本效能之後,要使單位之間達到平衡,就要調整攻擊速度來調整DPS使實際攻擊平衡,調整血量使實際血量達到平衡:

這樣在計算好基本的攻擊血量平衡之後,再增加防禦屬性,按照攻擊力查表調整攻速,按照防禦查表調整血量,就能達到期望上的平衡。

注意,任意新增加的攻擊值和防禦值都會改變其他所有單位的攻擊和防禦收益,所以減法公式擴展起來非常的蛋~~~疼~~~~

順便補一下,這種方法可以讓計算出的所有單位戰力保持一樣,就是:

戰力=血量*攻擊*攻速*攻擊收益期望*防禦收益期望


看看大家思路都挺好的,我再補充一下實際應用上的想法

戰力數值化是把角色的各項能力用一個綜合數值來量化,最終給予玩家一個直觀的感受和比較的基礎。戰力無論用什麼方式去計算,只要保證戰力高的在與戰力低的戰鬥過程中能夠得到一個合理的勝率即可。

麻煩在於這個勝率得要看戰力使用的環境,用在不同的遊戲類型和情境下,戰力所需要的承擔的功能和可允許的範圍完全不同。

當年七龍珠裡面出現過類似經典對話,XX碰到了敵人,然後說沒想到你的真實戰鬥力竟然有50005之類的,一番戰鬥之後,實際打下來XX竟然贏了。在這個環境下,戰力完全是為了營造一種不可能戰勝的錯覺,然後又依靠著意志力(操作)戰勝了之後的快感。

所以,戰力用什麼公式計算不重要,還得看你想要戰力達成的目的。如果戰力對你的目的就是玩家能力比拼的體現,那麼就算用純粹的加法把所有屬性都加起來都可以,反正我屬性高我戰力就強。


  • 戰鬥能力的衡量

今有角色1和角色2,各有生命值和傷害能力兩項屬性,分別為[{hp}_{1},{dps}_{1},{hp}_{2},{dps}_{2}]

令角色1和角色2相互戰鬥,假設角色1勝,即角色1在角色2的攻擊下能存活的時間長於角色2在角色1的攻擊下存活的時間,也即

[frac{{hp}_{1}}{{dps}_{2}}>frac{{hp}_{2}}{{dps}_{1}}]

等價於

[{hp}_{1},{dps}_{1}>{hp}_{2},{dps}_{2}]

也就是說,二者相鬥,hp*dps高者勝,可將之視為角色的戰鬥能力的衡量。

  • 屬性價值

設角色有多項屬性[{a}_{1},{a}_{2},...]戰鬥能力可記為[mathrm{f}left( {a}_{1},{a}_{2},...
ight)]

屬性價值的含義為,當該項屬性發生改變時,戰鬥能力相應地改變了多少,也即[frac{partial ,mathrm{f}left( {a}_{1},{a}_{2},...
ight)}{partial ,{a}_{i}} ]

  • 「戰鬥力」

記屬性價值為v_{i} ,一般所謂戰鬥力即為:sum_{i}{a_{i} v_{i} }

  • dps和對方的防禦有關?

這時候戰鬥能力hp*dps與對方的屬性有關,也就是說,面對不同屬性的敵人,我方的各項屬性的價值是不固定的。

以 @胡擺平 答案中的三個職業為例,在他所給出的屬性數值下,這三個職業是平衡的,但如果給這三個職業的某項屬性都增加相同的數值(比如都加20點防禦),結果就不再平衡了——可能非常不平衡。

在傷害 = 攻擊力 - 防禦力的情形下,這個問題無法避免。

於是我們「假裝」對方的防禦是某個值,據此算得各項屬性的價值,再按前文所述計算「戰鬥力」。

事實上除此之外也沒有別的辦法。


單憑給出的已知條件來看(比較簡單和理想化),xyz的取值都為1是精準的。

戰鬥力計算的根本依據是戰鬥結果,極端情況下,9999戰鬥力的角色打不贏10000戰鬥力的角色,當然在實際應用中,戰鬥力無法計算得那麼精準(比如技能釋放很難折算成戰力),也會有概率的影響(閃避、爆擊、格擋等)

通常的做法是將所有參與戰鬥計算的數值,折算成HP,如果最終數值太大可以加個係數,用這種方式來表示戰鬥力。


。。。戰鬥力就是扯,就是為給玩家攀比,對比而生的。

要是在乘法傷害公式體系下,戰鬥力還具備一定的數值演算意義。

要是在減法傷害公式下,由於邊際效應,1點攻擊在不同的階段價值他媽的不一樣的。

當然,要實現戰鬥力高能打敗戰鬥力低的大概率體驗也不是不可以,但是要換個思維做。

一。屬性的價值肯定是公式體系體現的。在減法傷害公式下,假如雙方血和攻擊力的基礎值都是一樣或者大致一樣的,那麼,1點攻擊力的效果其實和1點防禦的價值是一樣的,他們對戰鬥時間的影響差不多,因為攻-防嘛,數值比較大的時候,差不多,而血的就是攻擊價值/標準時間,因為hp=(atk-def)*t嘛

二。但是第一點的成立是建立在屬性大致一樣且偏向差不多的時候,那麼,你就要考慮以下幾個問題了:

1雙方屬性整體相差太大怎麼辦?答:沒問題,反正是碾壓。戰鬥力肯定是準的

2雙方屬性相近,但偏向差太遠咋辦?答:如果是非自由加點的,盡量在投放上作限制。如果是能自由加點或投放較為自由的,做單屬性戰力累加修正,即假如50級你設定的標準人物的攻擊力是50,玩家50級的攻擊力超過50達到60時,他的攻擊力所帶來的戰力不是正常60點攻擊戰力了,你還要給他加修正。原因是邊際效應的變化:(設標準人物50atk20def1000hp)

所以大家看啊,當偏向不一樣時後,攻擊力和防禦力的價值壓根不一樣啊。。。。做個修正公式吧,分階段。但豈不是玩家看到的戰鬥力會亂變?

你問我這個?那你有沒有想過角色除了屬性還有技能啊還有相剋還有百分比增益效果啊?這些你算到戰鬥力里沒啊?

減法公式下的戰鬥力就是扯啊。。。。各種不科學啊。。。。


@胡擺平 給出的答案非常棒,很詳盡,數學模式上如果基於科學的解釋,越多的屬性將考慮越多的曲線,基本上感覺沒有比這個簡化點的模型了。

未入行,謹表想法。

戰鬥力數值不應當完全由數據決定。

個人覺得戰鬥力應該是作為玩家對自己提升的一個反饋。

直觀的獲得成績的感覺,和小紅花類似。

偶爾兩朵花,打敗三朵小紅花就覺得超有成就感。

至於精確的指導玩家對戰,好像沒這個必要。

數值挖掘出來是給玩家破解的。

玩家通過不斷的摸索,精確的得出屬性的優劣。

至於遊戲數值策劃,應當把這個精確指導對戰的屬性藏的越深越好。

所以我認為,戰鬥力和等級是一個東西,完全是給玩家看的!

滿足:

1.玩家換了裝備,學了技能能明顯看見自己的提升,獲得一個良性的反饋。

2.必須要存在逆襲的可能性,服從正太分布。為了體驗。

戰鬥力的設立。

與遊戲內對應裝備數據層次掛鉤。

比方說遊戲內非R玩家,大眾玩家可以獲得的屬性在

100G 100F 1000hp

那麼在這之前的功防血,可以用上面幾位的模型來模擬。

a功加b防加c血

然後月卡族或者小R,獲得的層次

abc更換為def。

def都比對應的abc大一點。

之後神豪什麼的。

以此類推。

戰鬥力是給玩家看的,是拿來提升刺激激勵消費的,不需要存在科學,只需要爽就好!


欣賞到了兩種思路,一種是微觀建模,基於各項屬性和假設去調配;一種是結果導向,根據天梯分數設定戰力高低。如果兩者結合起來,即從一個簡單的模型出發,然後不斷根據天梯結果反饋調整迭代,最終的戰鬥力模型會比較接近真相。


推薦閱讀:

GTA里直接在街上搶車的方法可行嗎?為什麼現實里很少有人這麼做?
為什麼玩了夢幻就突然很厭惡神武?
想送男朋友一個禮物,男朋友喜歡玩遊戲,最近在玩守望先鋒,送什麼比較好呀?
如何看待魔音糯米被官方確認使用外掛?
為什麼現在競技體育仍然採用單敗淘汰賽制,而反觀一些電競比賽則更多採用雙敗淘汰賽制呢?

TAG:遊戲 | 遊戲開發 | 手機遊戲 | 遊戲策劃 | 遊戲數值策劃 |