數值策划分享:幾個經典的戰斗力計算公式


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

戰斗力是怎么計算的?

  1.1. 定義戰斗力

  借鑒中學物理里關於能量的定義:

  一個物體能夠做功.我們就說這個物體具有能.能量是表示物體做功本領大小的物理量, 能量可以用能夠做功的多少來衡量.一個物體 "能夠做功 並不是一定 "要做功.也不是 "正在做功 或 "已經做功.如 : 山上靜止的石頭具有能量.但它沒有做功。

  在游戲里,我們可以這樣定義戰斗力:

  一個單位能戰斗,我們就說這個單位有戰斗力,戰斗力是衡量一個單位的戰斗能量大小的量。戰斗力越高,該單位在作戰時能夠取得的優勢就越大——作戰能力越強。

  早期的游戲中,是沒有戰斗力的概念的。玩家們通常以等級和裝備水平來判斷實力,這種判斷很依賴對游戲的理解:

數值策划分享:幾個經典的戰斗力計算公式 ...

 


  早期的網絡游戲,《萬王之王》(中國第一款圖形網絡游戲,2000年7月在大陸正式上市),有一個評估對手的交互功能:

數值策划分享:幾個經典的戰斗力計算公式 ...

 


  《萬王之王》的評估,在跨職業對玩家操作時,准確性較差,記得當時比我高2級,裝備豪華的巫妖,在對我使用評估時,顯示的是“對方比你強多了,小心為是“,可能是由於我的職業聖騎士的防御和血量屬性,在作為戰斗力的參考時,這2項屬性影響更大。

  1.2. 影響戰斗力的因素

  按上述定義,影響一個作戰單位戰斗力的因素有很多,選手(玩家)狀態、選手策略、作戰單位的狀態(buff、debuff)、作戰單位的屬性、作戰單位的技能等等。

  我們沒有辦法面面俱到,而且那樣做也是沒有意義的——不能簡化就不是模型。所以,我們只考慮一些和作戰單位本身相關的、相對比較穩定的因素作為戰斗力的參考因素——作戰單位的屬性。

  略有爭議的是,有的策划主張把技能也計入戰斗力,而另一些策划則選擇不這么做。出於數值設計模塊化的考慮,以及技能釋放的一些不確定性(如wow副本中技能釋放次序、九宮格對戰時技能的發動頻率),大多數的游戲里,技能是不計入戰斗力的,但這並不是絕對的。

  在戰斗力不計入技能時,技能作為一個獨立的模塊,代表的是戰斗力的發揮水平。這樣的好處是,戰斗力的構成模塊——屬性和戰斗力的發揮模塊,可以分別計算保證各自的平衡性和成長性。

  以最簡單的例子,角色/卡牌的等級、裝備、科技/奇門/經脈(或其它什么叫法)等的成長提高戰斗屬性的數值,技能的提升,增加技能傷害系數——攻擊或技能時,發揮的攻擊力(或其它屬性)的數值的%。

數值策划分享:幾個經典的戰斗力計算公式 ...

 

(我是mt的卡牌進化,屬性增加、技能升級)


  1.3.戰斗力的計算

  在定義了戰斗力,確定了影響戰斗力的因素之后,我們可以開始計算戰斗力了。

  計算戰斗力也有2種方法,1種是找一個統一的參照物,如某草人,攻擊力為1,生命值無限,在計算某個單位的戰斗力時,以該單位被殺死時,草人損失的生命值來衡量該單位的戰斗力;另1種,則是找到一個能較准確的描述屬性變量和戰斗力的函數關系式,將公式簡化,得到玩家方便理解的戰斗力計算公式。

  1.3.1.參照法

  這個計算方法的關鍵之處,在於找到合適的草人,比如上文描述的,攻擊力為1的草人,在 傷害 = 攻擊 - 防御的減法公式里,並不能准確的反應戰斗力。在除法公式,值為1的攻擊力,在被防御的%減免后,也體現不出防御提升帶來的戰斗力變化。

  我們在設計職業時,通常先選擇一個標准模板,比如說戰士,以其攻擊、防御、血量等屬性作為參考,各屬性方向分別拉伸或縮減,以構成新的職業。以這個標准模板,作為草人的屬性模板,修改其血量為無窮大,這樣可以得到更好的結果。

  若提高1點的攻擊力,最終反映到草人的損失生命值上是10,我們可以認為每點攻擊力提高了10點的戰斗力;同樣的,我們可以確定防御力、生命值等其它各屬性對戰斗力的提升效果,得到戰斗力的計算公式。這個公式是一個各屬性的加權求和計算:

  如,戰斗力 = 攻擊力*2 + 防御力*1 + 生命值*25 + …備注:這種算法,有可能各職業的戰斗力公式不一致,即,有可能戰士的1點攻擊增加2點戰斗力,而盜賊則增加1.5戰斗力。

數值策划分享:幾個經典的戰斗力計算公式 ...

 


  1.3.2.公式法

  在有些時候,我們可能會較容易的找到一個准確描述戰斗力的函數關系式。比如:

  為引入概念,先簡單的假設,當戰斗的屬性只有攻擊和血量時,我們知道 戰斗力 = 攻擊力 * 生命值。

  在此基礎上,我們再引入除法公式和防御力屬性,那么 戰斗力 = 攻擊力*生命值*(1+防御力*k),k為1點防御力等效提高的生命值的比例。

  類似的,也可以引入暴擊、回避等各類屬性,戰斗力 = 等效攻擊 * 等效生命值,幾何上,戰斗力的值等於邊長分別為等效攻擊和等效生命值的矩形的面積。

  我們先以只有攻擊力和生命值2種戰斗屬性的情況來介紹如何用這種方法找到合適的戰斗力公式,簡單的模型更能反映問題的本質。設若有若干個職業,每個職業的戰斗力相同,意味着攻擊力和生命值的乘積相等—— p = x*y。考慮到理解成本的高低,這里我們仍以加權求和的簡單公式計算戰斗力。

  參考下表:

數值策划分享:幾個經典的戰斗力計算公式 ...

 


  其中p1是按照p=攻擊力*生命值計算的精確戰斗力,而p2則是找到的近似加權求和公式(p1’和p2’則表示職業拉伸后以攻防屬性比例4:6或6:4計算的戰斗力)。

  可以看到,隨着屬性的增加(如等級提升時,各屬性等比例提升),p1和p2的差距越來越大。但這實際上並沒有問題。從p1’/p1和p2’/p2的比值穩定可以不那么直觀的看出,職業的偏差並沒有隨着等比放大被拉伸。這意味着,隨等級的提升,職業模型的差異,相對的位置並沒有變化,采用加權求和公式,只是被壓縮到相對更狹窄的區間內,為了具象化一些,可參考下圖:

數值策划分享:幾個經典的戰斗力計算公式 ...

 


  (上圖為攻擊力和生命值之和隨機在一定范圍內的戰斗力的展示)可以看到橙黃色的點和藍色點,在各自的區間內相對位置的比例不變(點的分布形狀沒變,如紅框里的4個點的相對位置為例)接下來的問題,是如何找到接近程度較高的各屬性的權重值,也有3種做法:

  按基礎的戰斗模型,如10攻擊、100生命時,10刀砍死的戰斗節奏,1點攻擊力就等於10點生命值。這個做法足夠簡單,但是戰斗力與實際戰斗能力的接近程度往往不是最佳的。偏差程度取決於你制定的戰斗節奏。這個偏差,通常並不大。所以這也是?         隨機的生成一些數據,比如{攻擊x,生命20-x,戰斗力x(20-x)},然后回歸。通常需要借助一些工具來實現,excel的擬合只能對單變量函數使用。

  還有一種名叫Boosting的方法(數據挖掘的課里聽來的),先給定初始權重值(各屬性權重為1),對每次迭代后生成的新模型在上次錯分的訓練樣本上提高權重,最后將所有模型疊加得到最后的模型。下面是課上偷的圖:

數值策划分享:幾個經典的戰斗力計算公式 ...

 


  最后,還有2種計算戰斗力的做法,也值得推薦:

  參考《論減法公式》http://gad.qq.com/article/detail/75601.4.      如何提高戰斗力公式的准確性

  戰斗力的計算公式,總是或多或少的存在誤差,尤其在戰斗力和技能模塊化設計后,可能因為技能的隨機性、技能策略的運用上,出現以弱勝強的情況。在1.3的計算中,10%以內的誤差,已經是比較良好的戰斗力公式了。但是有的時候,這並不容易做到。

  這種情況下,我們應當提醒自己,策划是規則的制定者。很多時候,附加以簡單的規則,可以節省掉大量的計算,而這個規則卻並不會影響玩家的體驗時。

  在戰斗力的計算公式設計時,我們就可以通過添加一個小的輔助規則來提高戰斗力的准確程度——戰斗力碾壓規則。即當雙方戰斗時,對戰斗力數值占優的一方,提供額外的傷害或防御補正;或對戰斗力處於劣勢的一方,進行相反的debuff操作。

  因規則較簡單,這里就不細說。

  1.5. 幾個戰斗力計算公式


  1.5.1. 神仙道的戰斗力計算

  改版前,3 點絕技 = 1 戰斗力, 1 普通攻擊/1 法術攻擊 = 1 戰斗力,1武力(法術)=8戰力,1絕技=8/3戰力。以下屬性不加戰斗力:生命,防御(3種),暴擊,格擋,閃避,命中,氣勢。

  改版后,生命*0.12 + (普攻 + 絕攻)*0.24 + (法攻 + 普防 + 絕防 + 法防)*0.12 + (命中 + 閃避 + 格擋 + 破擊 + 守護 + 必殺 + 暴擊)*1.2 + 先攻*3.68可以看到,即使成功的游戲,戰斗力的計算公式,也可能極馬虎,改版前的公式,感覺比等級/裝備目測法都有所不如。

  1.5.2. 神曲的戰斗力計算

  1點攻擊= 1.2戰力,1點防御= 1 戰力

  1點暴擊= 1 戰力,1點格擋= 1 戰力

  1點力量= 5.8戰力,1點護甲= 8 戰力

  1點智力= 5.8戰力,1點生命= 0.244戰力

  1點體質= 4.88戰力

  其中1點體質=20生命,1點護甲=4點防御和4點魔防。計算時,體質和體質所增加的戰斗力不會重復的引入計算。

  1.6. 熱血高校的戰力偏差值

數值策划分享:幾個經典的戰斗力計算公式 ...

 


  這個並不是游戲,之所以牽強附會的放在這里,是因為熱血高校的戰力偏差值的計算,有點小意思,相信有心的同學一定有辦法將其運用到自己的設計中去。

  偏差值公式為:

  [(個人成績-平均 成績)/標准偏差]*10 + 50

  為了更應景,我們以人類去脂體重指數的計算公式,來作為實戰戰斗力的計算參考值。

  去脂體重指數是這樣計算的,去脂體重指數 = BMI*(1-體脂率),以一個身高1.78,體重122斤,體脂率15%的消瘦型體格為例來計算他的戰斗力。

  BMI = 體重(KG)/身高(M)^2

  則上述對象BMI=61/1.78^2=19.2526,去脂體重指數=BMI*(1-15%),結果為16.3647,戰斗力極為低下。

  再來測算一下李啊噠的,體重=64kg,體脂1%,身高1.72(數據僅供參考),去脂體重指數=21.417,所以李啊噠可以輕松的戰勝上述的消瘦小伙。

  我們隨機的生成100個去脂體重指數在10~24之間的選手們,來計算他們的戰力偏差值:

  Data={13,15,15,11,24,20,21,20,24,19,15,13,10,24,21,17,21,21,20,12,24,23,24,13,21,21,11,17,14,14,16,18,17,20,22,15,17,23,13,23,20,20,23,12,18,10,15,20,24,19,15,14,23,11,24,19,20,18,10,13,20,22,11,22,23,17,19,18,16,11,16,11,20,12,20,11,19,10,22,11,16,16,18,22,18,20,20,14,20,23,21,23,15,18,17,17,23,14,22,14}

  先計算標准偏差sd=4.21177,平均值17.72,計算這些選手們的戰力偏差值是這樣的:

  {38.7933,43.5419,43.5419,34.0447,64.9106,55.4134,57.7877,55.4134,64.9106,53.0391,43.5419,38.7933,31.6704,64.9106,57.7877,48.2905,57.7877,57.7877,55.4134,36.419,64.9106,62.5363,64.9106,38.7933,57.7877,57.7877,34.0447,48.2905,41.1676,41.1676,45.9162,50.6648,48.2905,55.4134,60.162,43.5419,48.2905,62.5363,38.7933,62.5363,55.4134,55.4134,62.5363,36.419,50.6648,31.6704,43.5419,55.4134,64.9106,53.0391,43.5419,41.1676,62.5363,34.0447,64.9106,53.0391,55.4134,50.6648,31.6704,38.7933,55.4134,60.162,34.0447,60.162,62.5363,48.2905,53.0391,50.6648,45.9162,34.0447,45.9162,34.0447,55.4134,36.419,55.4134,34.0447,53.0391,31.6704,60.162,34.0447,45.9162,45.9162,50.6648,60.162,50.6648,55.4134,55.4134,41.1676,55.4134,62.5363,57.7877,62.5363,43.5419,50.6648,48.2905,48.2905,62.5363,41.1676,60.162,41.1676}

  對比看看發生了什么

數值策划分享:幾個經典的戰斗力計算公式 ...

 


  (沒錯,和上面的圖是一樣的,前面偷了個懶,但概念相通)為什么要費這么大勁,進行這個變換操作呢?

  這是因為,根據某個選手的偏差值,我們能很容易的找到他在樣本中的位置,具體做法如下:

  先求出一個x值,x =(偏差值-50)/10l         可以根據這個表查出自己的比例:http://site.ntvc.edu.cn/jxcg/KJ/Bernoulli/N_table.htm比如,某個選手的偏差值為60.162,求出x=1.0162,查表,得到11

  查到這樣2個值,這表示該選手比樣本中84.38%~84.61%的選手要強。

  在excel中對上面的數據篩選出比60.162大的數據並計數,有84個值。

  參考正態分布曲線看更直觀一點:

數值策划分享:幾個經典的戰斗力計算公式 ...

 


  累積概率密度:

數值策划分享:幾個經典的戰斗力計算公式 ...

 


  在游戲里,我們經常使用一個關卡的戰斗力數值作為玩家挑戰pve關卡的成長程度的參考標識。如普通難度——火燒博望坡——雜兵1,推薦戰斗力1000。

  這種時候,如果某個玩家戰斗力只有9000,會稍有點糾結,上次我6000挑翻了6500的戰斗力的關卡,這次我應該也能過吧?但是實際結果,很可能該玩家就在這折戟沉沙了。

  但是如果我們通過記錄最近若干次首次挑戰成功這個關卡的玩家的戰斗力,依上述算法,先計算出標准差和平均值,然后代入該玩家的戰斗力,計算其偏差值,作為關卡相對於該玩家的一個動態的戰斗力。玩家的困擾可能會減少很多,輔助配合顯示一個玩家在這些記錄中所處位置(如,高於84%挑戰成功的玩家的戰斗力)。提示效果可能更好,而且由於這個值是動態的,不會由於開啟新的數值成長線而干擾這個提示的有效性。

  最后,偏差值的這種應用,目前還是空想階段,我自己也沒在項目中實際運用過,但求拋磚引玉,給各位看官提供一可能的額外參考,這段文字的目的就達到了。


免責聲明!

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



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