游戲設計---游戲中戰斗力計算方法(整理)


游戲設計---游戲中戰斗力計算方法(整理)

一、總結

一句話總結:用初始戰斗力除以各項初始屬性得到各屬性的權重,然后加權得出戰力計算公式

 

1、設計戰斗力計算公式的兩種思路?

主要是以屬性投放為基礎和真實戰斗狀況模擬兩種思路

屬性投放為基礎用初始戰斗力除以各項初始屬性得到各屬性的權重(權重得到可以通過不同屬性比例砍倒對方的時長相同來確定,其實也就是下面的真實戰斗狀況模擬為基礎),然后加權得出戰力計算公式

真實戰斗狀況模擬為基礎:用多個實例

 

2、怎么解決屬性投放為基礎的戰力計算方式的“不能精確反應玩家的真實戰斗力”的缺點?

通過 戰力碾壓公式來保證高戰力玩家的戰斗能力

低戰VS高戰:低戰玩家對高戰玩家有效輸出按戰力差縮減

高戰VS低戰:高戰玩家對低戰玩家有效輸出按戰力差增加

 

3、真實戰斗狀況模擬為基礎的戰力計算方式中,怎么知道哪個玩家戰力強?

兩個人互砍,誰先砍死對方,或者說誰砍死對方用的時間少

其實也就是戰斗時長

 

4、真實戰斗狀況模擬為基礎的戰力計算方式中,最重要的兩個屬性承受傷害的能力def,制造傷害的能力atk是靜態的還是動態的

都是動態的

承受傷害的能力def,制造傷害的能力atk,都是動態的,這兩個數值的結果會隨着遇到的對手變動而變動。

 

5、在屬性投放為基礎的戰力計算方式中,怎么得到每個屬性的權重?

采用分別遞增兩個不同的屬性,其它屬性一樣,讓他們戰斗,讓他們同歸於盡,就能知道兩個屬性之間的對應的比例關系。

 


說明:我方敵方對應行是互為敵手的,而且在這個模擬過程中,結果全部是同歸於盡(滅敵時間一致)

兩方的屬性雖然不同,但是干掉對方的時間是一致的,這說明我們可以近似的認為防御2的我方和生命25敵方戰斗力相同;防御5的我方和生命50的敵方戰斗力相同。

 

6、在最簡單的戰力計算模型中(只有HP和APK兩個屬性),戰力的計算公式是怎樣的?

HP*APK大着戰力大

 

 

二、策划基本知識:游戲中戰斗力計算方法

文無第一,武無第二,嚴格意義上來講戰力的評估說到底就是反應參評對象戰斗勝率的一個指標,誰的贏面更大,那么他就應該擁有更加高的戰斗力數值。

但是這個參考指標只能在一定程度下影響戰斗的最后結果,而實際的結果還要看實際操作對象的差別。因為戰斗情況復雜多樣,在游戲設計中,戰力的指標往往無法精確定位為玩家真實戰斗力,當下大部分游戲中玩家的戰力高低實際上是反應的玩家所獲取的戰斗數值(攻擊,防御等)的綜合指標。

總結來看,游戲數值中的戰斗力數值需要滿足的需求如下(根據側重點不同而選擇優先滿足不同的需求,一般情況下戰力數值很難完美滿足所有要求):

戰斗參考:好的戰力評估數值,應該最大限度的趨近於玩家真實戰斗力,應該對對戰雙方對戰結果有比較精確地預估性(戰力數值高低和戰斗結果應該具備一致性


·屬性指標:玩家戰斗力數值應該是對玩家進攻能力(攻擊,穿甲,百分比加成),承受能力(生命,護甲,格擋,閃避)各項數值的一個綜合評估結果。玩家獲取的任何數值都應該在戰斗力上有所反饋。

試想一下如果玩家努力的獲取了游戲數值而看不到自己戰斗力的提升,那會是怎樣糟糕的數值體驗。游戲數值的投放說到底完全取決於你所希望提供給玩家怎樣的體驗


成長指示:玩家的戰力數值會隨着玩家的游戲進度變化而發生變化,會跟隨着玩家各項屬性的提升而提升。這是比較容易滿足的需求。


動態變化:戰力的相對性是戰力數值公式設計中的一個難點,我們在設計戰斗力計算公式時,往往會因為戰斗公式本身的復雜性,使我們在對某個個體戰力進行評估時需要用到對手的信息。

比如用木頭人法標准模板法等都需要有一個固定的指標來作為戰力評判的標准,因此根據標准模塊計算的戰力在反應兩個復雜個體對戰情況時會有偏差。


從這里開始,我將根據上面我提到的指標來探討設計戰斗力計算公式的思路(主要是以屬性投放為基礎真實戰斗狀況模擬兩種思路),如有謬誤,請別拍磚!

1.1   以屬性投放為基礎的戰力公式設計


實際上目前國內的大部分游戲戰斗力的計算都是以此為模板的,這種計算方法的核心思想大概是這樣的:

確定一個基礎數值模板:(難點:模板的確定)


然后嚴格控制各項數值的投放比例,這樣游戲的任何階段玩家的角色數值大概如下:


而各項屬性的價值換算直接根據各項數值的獲取難度來進行計算(投放比例)

即各項數值的戰力價值如下:


經過整合處理后即可得到簡單的以屬性為基礎的戰斗力計算公式



對該類戰力計算公式持懷疑態度的朋友請自行驗證《龍之谷》,《全民無雙》等游戲中的戰力計算方式。驗證方法,用初始戰斗力除以各項初始屬性得到各屬性的權重,然后得出戰力計算公式。改變屬性再來驗證這個公式即可。

為什么?

為什么國內很多游戲會以此為基礎來計算玩家的戰斗力?他到底有什么優點?使用起來又會遇到哪些困難?

1.1.1  屬性加權戰力計算的特點


·優點:直觀,簡單,粗暴

千萬不要小看直觀的作用,實際上游戲玩家,特別以國內游戲玩家為主,他們在玩游戲的時候大多數是受數值體驗驅使,而他們的游戲核心追求也是游戲數值,戰斗力作為評估玩家戰力指標的重要數值,必然會受到玩家的追逐。

一個能夠直觀的展示玩家游戲進度,游戲屬性的戰力計算系統會是刺激玩家提升游戲屬性重要指標(說得委婉一點,說白了就是賣屬性的時候比較好吹噓



·缺點:不能精確反應玩家的真實戰斗力

可能由該方法計算出的戰斗力不一定能真實的反應玩家的戰斗能力,(評估兩個玩家戰力高低最正確的方法是讓兩個玩家對砍,砍翻對方用時更少的戰力更高

為了保證戰力數值的價值,一般情況下可以通過其他方式來保證該方法計算出的戰斗力的指示作用。(一般這類游戲的戰斗系統中,會有戰力碾壓公式,通過戰力碾壓公式來保證高戰力玩家的戰斗能力


通過戰力公式,能夠在一定程度上保證屬性加權戰力的指示價值,這也是大多數游戲中都會采用的方法。

·難點:怎么確定數值模板和權重?

用屬性加權求和來計算戰力最大的難點就是各項權重的確定,很顯然,在任何游戲中角色屬性的基礎模板肯定不會是策划一拍腦袋就能決定的,當然也不排除確實有拍腦袋決定數值的情況,但是大多數正規一點的游戲研發團隊中,游戲的各項數值雖然不一定經過嚴格的學術推導,但是肯定會是基於某種需求下的數值建模

實際上,在大多數MMORPG中,角色的初始屬性,各項數值的投放比例的參考都基於想要給玩家提供一個合理的戰斗體驗。

問題來了,什么是合理的戰斗體驗?


上圖已經說明了這個合理需要保證的一個核心指標:戰斗時長即結束戰斗的合理戰斗時長,當然這個合理的時長會因為需求的不同而不同,而時長的計算方式也會因為戰斗公式的不同而不同。

關於戰斗時長和戰斗公式的表述,我會在下一篇文章中詳細介紹。(下一篇文章我會詳細介紹1V1簡單的戰斗模擬器制作和戰斗模板的確定)

到這里,以屬性投放為標准的戰力計算公式就告一段落了,下個部分再來探討以真實戰斗能力為基礎來計算戰斗力的情況。

1.2斗模擬為基礎的戰力計算公式


以戰斗模擬為基礎的戰力計算公式,一般來說,一個個體的戰斗力體現在兩個方面:承受傷害的能力def,制造傷害的能力atk

在知道兩方的各項屬性的前提下,我們是能夠精確地對雙方戰力進行評估的,比如下面這個例子:

事例1:一個100血的戰士,看到了一只血為90野豬,戰士上去砍野豬,野豬同時開始反擊。戰士每秒的傷害是20(先略去戰斗公式和秒傷的換算),野豬每秒的傷害為10。那么整個戰斗過程可以用函數圖像表述:


從這個圖,我們可以看到一些規律:

戰士和野豬的初始血量是整個曲線的起始點,整個戰斗過程就是從起始點回到某個坐標軸的過程。整個戰斗過程沿着直線移動,這條直線的斜率,就是戰士和野豬的輸出速度之比。

在這個過程中,我們可以看到,作為互相斗爭的雙方,都至少存在兩個因素,一個是生命,用以保證自己的生存。這個值在有些戰斗情況下是人數/耐久等等,也即是前面我所說到的承受傷害的能力def。另一個則是傷害,用以破壞對方的生存,也就是前面提到的制造傷害的能力atk。

而衡量勝負的唯一標准:其實是時間,誰能在最短的時間內破壞對方的生存條件,誰就會獲得勝利。所以我們可以得到一個最簡單的結論:戰斗的結果,取決於一個值:


顯然,通過上面的分析,可以得出結論,玩家的戰斗力實際上是玩家死之前輸出對時間的一個積分。而輸出時間正比於玩家承受能力。

所以,在多數情況下可以近似的認為:戰斗力=輸出*承受,如果以單位的承受作為橫坐標,輸出作為縱坐標,那么輸出與承受所組成的圖形面積,就是一個單位的戰斗力。如下圖:


知道了戰斗力在真實戰斗過程中的衡量指標,那么是否我們就能如願的得出一個通用的戰斗力計算公式?


舉個例子說明找出這樣的戰力計算公式有多么蛋疼!

事例2:

已知戰斗公式:有效輸出=己方攻擊-敵方防御(一大堆修正巴拉巴拉)

好了,這就意味着在這個公式下玩家的承受能力def=HP+ Arm(護甲)

而輸出能力在不知道敵方護甲的前提下輸出能力=玩家atk(戰力計算在遇敵之前,所以只能用自身攻擊數值代替)

這樣,看看下面這組圖就明白這樣的計算方法有多蛋疼。


為什么會這樣?

原因只有一個,不管怎么分析,想要得到靜態計算戰力的公式在基於戰斗模擬的前提下都是不現實的

因為衡量戰斗力的指標承受傷害的能力def,制造傷害的能力atk,都是動態的,這兩個數值的結果會隨着遇到的對手變動而變動

但是這也不意味着我們去做這樣的嘗試沒有意義,可能我們很難找到基於戰斗公式的衡量玩家真實戰斗力計算公式,但是通過一些特殊的手段,我們是能夠得出各種數值之間的等價關系的。

在以如下戰斗公式為基礎的游戲中:


Atk:攻擊
Pen:護甲穿透
Def:護甲
可以通過簡單的戰斗模擬,得出屬性與屬性之間的等價關系;

前提是投放的時候也要按照一定的比例投放各屬性數值,這兩個比例不等價,但是這個原則要遵守,比例關系成立的前提是彼此之間線性相關,而各屬性線性相關的前提是他們的投放成比例


說明:我方敵方對應行是互為敵手的,而且在這個模擬過程中,結果全部是同歸於盡(滅敵時間一致)

兩方的屬性雖然不同,但是干掉對方的時間是一致的,這說明我們可以近似的認為防御2的我方和生命25敵方戰斗力相同防御5的我方和生命50的敵方戰斗力相同

根據戰斗模擬;最后可以得出基於上述戰斗公式,並且以如下模板投放戰力時:


可得各個屬性對戰斗力的貢獻系數(權重):


注意:

1、這個權重並不等於投放比例的倒數

2、想要得出線性相關的權重,必要的前提是各種屬性的投放比例也是接近線性的(即按照一定的模板投放),理由是,當他們按照一定比例投放,戰斗公式可以簡化為只有一個參數的公式

      隨意投放時戰斗公式變量數(多個):


      按比例投放時,戰斗公式變量數(一個):


3、關於怎樣得到這一組數據方法有很多,消元后理論分析也好,拉表取數值后以大量數據為基礎進行回歸分析也好,只要能夠得出大概的比例就行

4、得到這樣的戰斗力計算公式后,還需要對其合理性進行驗證(怎么驗證以后再講)

 

參考:策划基本知識:游戲中戰斗力計算方法-GameRes游資網
https://www.gameres.com/765323.html

 

 

二、如何高效設計游戲——關於戰斗力計算方式的總結

前言

  有關於角色的戰斗力,大家都不會陌生,幾乎每一款游戲都有在計算相關角色的戰斗力。 無論采用何種形式、方法,目的只有一個,就是想讓玩家比較輕松直接的對比出角色的綜合能力。

  在這里,筆者將綜合一些情況,與大家討論一下戰斗力的計算方法與有效性驗證。

  不過在這之前,按照慣例,還是先給大家講一下個人的“扭曲”價值觀與經驗。




  在日常工作中,我們總會發現有一些數值策划,他們的表格做的很漂亮,並且你點擊任何 一個單元格,總會讓你發現一長串讓你無法繼續閱讀下去的公式,長到令人發指!這些數字環環 嵌套,相互關聯,找了半天也很難找到計算的源頭。這就是俗稱【數值表格的關聯性】,並且這 也廣泛被業內定位為數值能力好壞的指標,或者 招聘 面試數值策划的標准

  筆者忍不住要吐槽,不過我想吐槽的不是【數值表格的關聯性】而是這一【自動化】的設 計過程。

  很幸運,我親眼目睹了幾個這樣的表格,均出自大師之手。

  所謂的數值規划,我個人理解的作用是——多人合作的時候,能夠讓其他策划看得懂你在 相關數值設計中的思路,並且也給自己一個總體綱要的規划。但是我看到的一份數值規划表格中, 所有數值全部都關聯化,牽一動百,妄圖將所有數值設計過程全部自動化。每一個層面,每一個 梯度,每一個興奮點,每一個時間點,所有數值都存在着一個硬性的標桿公式強行控制每一個數 值。最后所有角色單位的數值也都與之前的“標尺”硬性關聯,得出最終數值成品(雖然他還有 余力可以“微調”)。

  筆者想說的是,游戲是一件藝術品,那里面承載了設計者的個性結晶。玩家的需求是在游 戲中獲得挑戰,獲得驚喜,獲得心意。不是一套自動化就可以得出的產物。自動化,就意味着里 面許多小細節設計者都忽視了。

  最后那份數值產出,代入到產品中,大家看到了些許問題。他忽視了角色單位的差異性, 因為自動化導致了所有角色數值屬性都是線性相關的;他忽視了關卡難度的興奮感,因為所有關 卡數值全都是線性相關地上升,並且其中還會涉及到關卡的遞進難度是否會超出預料的問題;他

  只關注於武器、等級、緣分 BUFF 等綜合能力占比,卻忽視了這些能力組成在每個階段變化不一, 所以在代入產品后,發現很多數值超出或低於期望。

  筆者認為,一份好的數值規划,首先需要具有良好的易讀性,因為這個不只是給你自己看 的,多數是給別人看的。其次它只起到 規划參考 的作用,而不是標尺的作用,不要被自己的數值 規划限制住游戲數值的無限可能。我們制作數值規划的目的應該不會是讓今后的數值都在規划數 值中乘以一個系數吧?最后代入產品中,發現處處硬坎,處處單一,然后以“數值不可能是一下 子就出來”的名義“微調”到底。 最后“微調”到親爹親媽(那份數值規划)都不認識的地步, 當初何苦花那么長的時間做一份那么華麗的數值規划,意義何在?

  回歸本文正題。




RPG 游戲中的戰斗力計算模型

  我們先考慮一種簡單的模型。

  游戲角色要想進行戰斗計算,首先兩個屬性是必不可少的,HP、ATK。所以我們先模擬一下 只有 HP、ATK 參與計算的兩人對戰模型。定義:UnitName(HP,ATK)為一個戰斗單位。先我 們有兩個戰斗單位,其中 UnitA(200,50),UnitB(400,20)。我們假定雙方的攻擊速度皆為每 單位時間(或者回合)行動一次。那么戰斗過程可能為:

  • 第一回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(180,50),UnitB(350,20)
  • 第二回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(160,50),UnitB(300,20)
  • 第三回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(140,50),UnitB(250,20)
  • 第四回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(120,50),UnitB(200,20)
  • 第五回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(100,50),UnitB(150,20)
  • 第六回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(80,50),UnitB(100,20)
  • 第七回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(60,50),UnitB(50,20)
  • 第八回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(40,50),UnitB(0,20)

  =====UnitB 戰敗======

  我們稍微調整一下 UnitB 的數值,UnitB(400,25),再模擬一次戰斗過程,看看會有什么變 化。(由於先手機制造成戰斗結果不公平,所以在同一回合內,任一方的 HP 先為 0 判定為該方 戰敗,若雙方 HP 同時為 0,則判定平均)

  • 第一回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(175,50),UnitB(350,20)
  • 第二回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(150,50),UnitB(300,20)
  • 第三回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(125,50),UnitB(250,20)
  • 第四回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(100,50),UnitB(200,20)
  • 第五回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(75,50),UnitB(150,20)
  • 第六回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(50,50),UnitB(100,20)
  • 第七回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(25,50),UnitB(50,20)
  • 第八回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(0,50),UnitB(0,20)

  =====雙方戰平======

  我們再來為 UnitB 調整一下數值,UnitB(500,20),再模擬一次戰斗過程。

  • 第一回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(180,50),UnitB(450,20)
  • 第二回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(160,50),UnitB(400,20)
  • 第三回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(140,50),UnitB(350,20)
  • 第四回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(120,50),UnitB(300,20)
  • 第五回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(100,50),UnitB(250,20)
  • 第六回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(80,50),UnitB(200,20)
  • 第七回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(60,50),UnitB(150,20)
  • 第八回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(40,50),UnitB(100,20)
  • 第九回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(20,50),UnitB(50,20)
  • 第十回合 UnitA 攻擊 UnitB,UnitB 攻擊 UnitA【結果為】UnitA(0,50),UnitB(0,20)

  =====雙方戰平=====

  從以上三個結果中,讀者們可能會發現一些規律,現在我們將對這個模型進行數學抽象。

  在只有 HP、ATK 兩個屬性參與戰斗計算的過程中,我們判定一方戰敗的依據是其 HP 為 0。 在一場雙角色 A、B 對砍的戰斗模型中,判定角色 A 勝利的依據是,誰堅挺的時間長(HP 最后 變為 0 的一方)誰獲得勝利:

 

 


  即

 

 


  得

 

 



  由此我們得出,只有當一方角色單位的值 HP*ATK 大於另一方角色單位的值 HP*ATK 才能獲得勝 利。

  因此我們將角色單位的值 HP*ATK 定義為戰斗力。 我們回頭根據上面的 3 場戰斗來驗證一下結論是否一致?

   一個戰斗過程的簡化運用

  兩個戰斗單位的戰斗過程,就是雙方戰斗力相減的過程。舉例:

  有兩個單位 UnitA(200,50),UnitB(300,20),經過戰斗力的計算,得 UnitA:10000,UnitB:6000。根據戰斗力顯示,UnitA 會獲得明顯的勝利。

這里有一個方法,可以直接簡化戰斗過程運算得出結果,我們將雙方的戰斗力相減,的UnitA的剩余戰斗力為4000。按照之前的公式,將這個剩余戰斗力除以UnitAATK屬性,就會獲得UnitAHP屬性。根據計算得,UnitA獲勝,並且剩余HP80。請讀者自行驗證。


  基於基礎戰斗模型引入 SPD(速度)值

  多數游戲對於速度值 SPD 的定義為,該角色單位時間的行動次數 times/time,或者定義為FQR(頻率值)。(對於其他的速度值的定義請向此方向轉換) 那么基於之前的結論,若角色 A 想要勝出,則:

 

 


  即

 

 



  得

 

 



  由此得出,只有一方角色單位的屬性值 HP*ATK*SPD 大於另一方角色單位的屬性值 HP*ATK*SPD 才能獲得勝利。

  同樣的我們將角色單位的值 HP*ATK*SPD 定義為該角色的戰斗力。 由於模型同理,筆者將不在這里贅述驗證過程,請讀者自己驗證。

  基於基礎戰斗模型引入 DEF(防御)值

  在這種情況下,模型變得有些復雜,因為戰斗結果不再那么純粹,一方的戰斗力是受對方影響的,為 相對戰斗力

  這里我們一傷害公式 ATK-DEF 為例進行證明,其他公式所得出的結果雖不同,但是同理。 若 A 勝出,則:

 

 


  即:

 

 



  得


 

 



  到這里,我們可以觀察出,一方的戰斗力是如何受對方影響的。

  在這種情況下,我們稱,該角色的戰斗力是 相對 的,而非 絕對 的。

   如何在相對中尋找絕對(適用環境局限,需待多方驗證)

  從以上的分析中,我們可以看出,在有 DEF 屬性參與戰斗計算的時候,一方的戰斗力不是 一個定值,並且,三個單位的戰斗力也不具有傳遞性。例如:

  我們定義一個戰斗單位,UnitName(HP,ATK,DEF,SPD)。

  有如下 3 個戰斗單位,UnitA(200,30,10,1),UnitB(450,20,15,0.5),UnitC(200,20,5,3)。

  經過計算,我們發現三方的戰斗力關系是,A>B,B>C,但卻 C>A。

  這是由於,UnitC 的攻擊與 UnitB 的防御的差值過小,以至於 UnitC 的每一份攻防差的收益 過低,造成了 UnitC 出乎意料的輸給了 UnitB。

  這種現象不可避免。但是,通過多次試驗以及分析函數圖像得出,當攻擊力遠遠大於防御 力的時候,這種現象發生的機會將會變少,並且有理由相信,在極限狀態下,這種現象將不會存 在。

  因此,我們可以人為的在規划數值的時候,將攻防的差距盡量拉大。從而減少這種現象的 發生

   不過,這種現象也是一種策略性的玩法,因為它符合石頭剪刀布的封閉克制關系

   塔防游戲中的戰斗力計算模型

  筆者在之前的文章中已經較為系統的給出了塔防的數學模型,只是那篇文章寫的較早,以 現在的眼光看來,比較雜亂無章,所以整理好思路,重新總結一遍。

  我們定義防御塔擁有三個屬性,TowerName(ATK,FRQ,RGE),敵方單位 UnitName(HP, SPD)。已知,敵方單位總是穿過防御塔的攻擊范圍與路徑的交集,在這里我們定義為 ELP(The Effective Length of Path)。

  若,我方防御塔剛好能夠殺死敵方一個單位,則用數學表達式抽象為:

 

 


 

 



  由於,在多數情況下,ELP 的長度都與防御塔的范圍半徑相近,所以有

 

 


  得

 

 

 


  這樣,我們得出了一個完美對稱的等式,左邊全都是敵方單位的屬性,而右邊全都是防御塔的屬 性。因此我們定義一個值 SET 作為衡量雙方的戰斗力大小的值。對於防御塔來說,其戰斗力為

 

 


  對於地方單位來說,其戰斗力為

 

 


  當防御塔 ATK*FRQ*RGE 大於敵方單位 HP*SPD 時,則防御塔能夠在無干擾的環境下輕松殺死敵 方一個單位;當防御塔 ATK*FRQ*RGE 等於敵方單位 HP*SPD 時,則防御塔能夠在無干擾的環境 下剛好殺死一個單位;當防御塔 ATK*FRQ*RGE 小於敵方單位 HP*SPD 時,則防御塔很難殺死一 個敵方單位。

   多個防御塔攻擊一個敵方單位

  在這種情況下,由於各個防御塔之間不互相干擾,所以所有防御塔可進行戰斗力的加法運 算來衡量我方總戰斗力是否能夠殺死該敵方單位。

   多個防御塔攻擊多個敵方單位

  在這種情況下,模型會變得稍微復雜,我們將不能簡單的進行加法運算從而對比防御塔與 敵方單位戰斗力的大小。

  這是因為,防御塔的“抬手效應”與敵方單位的隊伍間隔會極大影響戰斗結果,試想一種 極端情況下,10 個敵方單位聚集在一小塊范圍下移動,當防御塔擊殺第一個敵方單位的時候, 再也無力擊殺下一個單位。

  不過,為了考慮到設計游戲的實際操作性,我們通常會合理規划每個敵方單位的間隔距離, 從而使得方便計算。在這種理想狀態下,該模型還是可以良好運行的。

   橫向對比現有的游戲

  之前看到很多游戲都有計算過戰斗單位的戰斗力,但是幾乎所有都采用同樣的一種方法 -------加權多項式。

  這種方法原理是,游戲設計者評估一個戰斗單位的每一項屬性,並且把每一項屬性頂一個 權值,最后以加法運算得出戰斗力。如:

 

 


  但筆者認為這種計算方式利弊並存。壞處是,這種計算方式並不科學,不能較為可觀的衡量該角 色的戰斗能力。好處是,這種計算方式直觀容易理解,並且對比筆者總結的模型有一個最大的好 處,就是數值小,並且數值增長幅度也小。

  所以筆者建議,以上數學模型適用於戰斗平衡的調整以及數值規划。不建議讓用戶觀看理 解。

   結束語

  至此,想要總結的模型都已結束。

  不知道大家有沒有關心這樣一件事情,從以上兩個模型,我們都可以看出數學等式的一種 對稱美,就好像,被人刻意安排一樣。但我認為這並不是一種巧合,我有理由相信對於其他類型 的游戲來說,其戰斗力的計算同樣為因式的基本模型。

  其實游戲中的一些數學模型非常簡單,只是大家很少去關注,去抽象,去總結。非常希望 有識之士能夠一起來總結一些規律,一起來構建起這座大廈。為業內貢獻一份力量。

  注:關於RPG角色數值模型,參考自網易游戲理論研究室的相關資料,但略有修改。

 

參考:如何高效設計游戲——關於戰斗力計算方式的總結 - CSDN博客
https://blog.csdn.net/hany3000/article/details/50231479
 


免責聲明!

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



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