遊戲數值策劃 傷害計算公式問題,求大神指導

時間 2021-05-30 00:03:56

1樓:神秘教諭

不太理解題主究竟想問什麼。

如果僅僅是問現在的戰鬥公式是否可用,那答案是沒問題呀。想要30次普攻乾掉對方,不需要調公式,調HP就夠了啊。

2樓:千雨

自從開始寫博文,已經一年之久了,其中受到很多讀者的認可,也有很多讀者發出許多不同意見,筆者全都感激。

這篇博文是應一位讀者的要求而寫。內容上可能會比較基礎且坑長。但是就筆者觀點,就算是資深遊戲設計者,我們也可以就此一些概念進行一下想法的交流。

按照傳統,我先來吐槽一下業內的一些認識。

傷害公式在邏輯上的發展歷程

傷害公式是什麼?

業內的東西,又不是學術研究,所以沒什麼明確定義。就是看誰講的有理,誰概括的全,誰認同誰了。所以這裡筆者也斗膽嘗試給出乙個傷害公式的定義:

傷害公式:就是為了能夠實現定量或者按照一定的邏輯規則扣除目標一定HP的計算方式。

這就是傷害公式,我覺得我的設計意圖達到了!我就是想要設計出乙個能夠按照預期的效果扣除目標HP的一種規則。

傷害公式是如何在邏輯上演化發展的?

在講傷害公式之前,我們先來看看常用的角色基本屬性是如何演化發展的。

以下內容可能會有點流水化

起初,我們先有了角色的概念。若我們想要兩個角色在遊戲中發生戰鬥,那遊戲設計師就需要組建乙個裁判組,其中計算機充當裁判,遊戲設計者來制定遊戲規則。就像幾個小夥伴用猜拳的方式來角逐一樣,我們在遊戲軟體中會採用一些更加細化並且量化的形式來制定規則。

這時我們通常會引入HP(Health Point)來描述該角色所能夠承受的最大傷害,這時我們能夠做到的規則就是每次發生攻擊,傷害為恆值,直到一方HP為0為止。但是這樣做顯然會出現維度太少而帶來的結果恆定化,並且也顯得無聊。

下一步,我們引進ATK的概念,來形容該角色對目標所造成的傷害。這時,我們可以制定的規則是targetHP-a*ATK,或者有好事者可以這麼幹targetHP/(a*ATK),未嘗不可。因為ATK已經成為角色的屬性了,我們也可以在遊戲中對ATK進行成長。

至此戰鬥結果還是顯得無聊。

接著,我們引進DEF這一屬性,來形容該角色對所受到的傷害的減少量。這時我們可以指定的規則有這種targetHP-(a*ATK-b*targetDEF),有這種targetHP-(a*ATK/F(b*targetDEF)),還有這種targetHP-F(ATK,DEF)等繁多種類(無窮無盡,無法列舉)。剩下的就要看讀者們想用那種,或者需要那種了。

至此,我們的戰鬥規則稍有起色,但是總感覺還是稍有欠缺,因為這場戰鬥不是那麼的刺激。原因可能是少了那麼乙份「驚喜感」,因為每次戰鬥結果都一樣。為此我們我們需要在前者的基礎上加一點未知元素。

於是我們有targetHP-DMG*Random(a,b)或者targetHP-DMG+Random(a,b)(其中DMG則為之前通過ATK與DEF計算出來的傷害),通常使用前者較多。這樣會對結果產生更多隨機的未知的處理,使得這場戰鬥更加趣味化。

神馬?!覺得還不夠刺激?!!!那好吧。

我們為此引入Critical%的概念。此屬性無法在傷害公式層面上存在,只能安排到戰鬥邏輯上。例如,我們投乙個骰子,如果這個骰子的值落在(0,Critical%)區間內,則系統判定該角色攻擊為暴擊,傷害大量提高為a*DMG。

神馬?!還不夠刺激?!這樣唯有引入Dodge%的概念了。

同樣的,此屬性也無法存在於傷害公式層面上,只能安排到戰鬥邏輯上。例如,我們投乙個骰子,如果這個骰子的值落在(0,Dodge%)區間內,則系統判定為該角色閃避此次攻擊,所受到的傷害為0。

在此注意一件事情。在遊戲的戰鬥傷害公式與邏輯上有很多對立的屬性存在,其中我們已經介紹了ATK與DEF的演化發展思路。同樣的也有Critical屬性與Anti-Critical(部分遊戲可能叫做暴擊與韌性)以及Dodge與Anti-Dodge(閃避與命中)等一些列對立屬性。

我們從設計目的來看,之所以存在對立屬性,是因為可能從某種商業化或者趣味的角度出發,我們需要Critical以及Dodge無限增長或者可增長的空間較大,為了能使這一設計決定不失偏頗,才會想辦法去引入另乙個屬性來進行壓制。這在行業內來看是一種包裝概念來做收入的手段。

傷害公式的種類

下面來介紹一些常用的傷害公式。

DMG=a*ATK-b*targetDEF類(俗稱加法公式,或減法公式)

適用情況

俗話說,最簡單的反而是最好用的。此公式特點,形式最為簡單,結果最為直接,但是需要設計者在整個遊戲數值架構內花更多的心思去搭建。這類公式最適合所有ATK與DEF的成長空間有限,並且ATK與DEF成長比例一定的情況下。

當然不排除特殊處理過的情況,可能會帶來意想不到的效果。

問題處理

這類公式通常會遇到乙個問題,就是當b*targetDEF > a*ATK時,所得傷害是負數,如果直接扣血會發現越扣血越多。此時我們需要在戰鬥邏輯中補乙個漏洞。

如果(a*ATK – b*targetDEF)≤0,則DMG=1。

公式變式

使用這種公式可能還會遇到乙個問題。戰鬥雙方如果實力差距較大時,會發生極端壓制情況,既所謂的秒殺。這樣,我們可以適當的構造乙個減函式F(X),最終修正公式為

DMG=(a*ATK – b*targetDEF)*F(Diff(ATK,targetDEF其中Diff為形容ATK與DEF差的函式)

DMG=a*ATK*F(targetDEF)類(俗稱乘法公式,或者除法公式)

如果把上一種公式形象描述為「抵消傷害」的話,那麼這種公式可以形容為「折損傷害」。這種公式比較適合ATK與DEF的成長空間無限大(就是那種街頭氾濫的網友,無限砸裝備,無限成長的那種)。

問題處理

這類公式需要注意F(X)的處理。通常F(x)都會構造出乙個帶有下界且下界大於0的函式,如圖。

或者構造乙個關於ATK與DEF的函式F(ATK,DEF)並且也需同樣造成上圖的效果。

其他類公式DMG=F(ATK,targetDEF)

由於已經歸類為其他,所以實在是太繁多了,所以不列舉了。在這裡只是提乙個常用的一種公式DMG=ATK^2/(ATK + targetDEF)。

如圖所示,紅線代表傷害關於攻擊力的函式曲線,橙黃色代表傷害關於防禦力的函式曲線。從這兩個函式分析得出,當攻擊方攻擊力大於防禦方防禦力時,曲線接近直線既每點攻擊力帶來的傷害增益為1點。當防禦方小於攻擊方攻擊力時,曲線接近直線既從普遍情況來看,每點防禦力帶來的傷害減少為0.

5點。所以使用這種傷害公式,我們再設計角色屬性以及屬性的成長的時候,盡量控制ATK大於DEF的情況,這樣結果看起來比較好看。

如何量身定做自己的傷害公式

我們按照目標導向型思路來分析。

1.我們遊戲需不需要傷害公式,能否直接扣除固定量的HP,或者ATK的值,通常這種設定適合休閒類遊戲,或者塔防遊戲。

2.遊戲中參戰角色的基本屬性有哪些,這些屬性是如何定義的?戰鬥時需要用到哪些屬性?

3.有沒有Critical%,有沒有Dodge%,有沒有Anti-Critical%,有沒有Anti-Dodge%

4.傷害結果需不需要帶有波動性?

5.屬性的成長空間是否有限?決定選擇哪種型別的公式。

6.戰鬥節奏的要求?調整ATK與DEF的係數,以及規劃HP、ATK、DEF的成長。

7.公式初步選定之後。用控制變數法來觀察ATK與DMG的關係以及DEF與DMG的關係,畫出曲線圖來分析是否達到需求。

8.有沒有需要新增戰鬥邏輯來達到某種目的?

9.最後看運算效率如何。計算機執行冪函式的效率遠遠低於多項式函式。

總結其實本文所講的戰鬥公式都是基礎。如果想要達到特殊的目標或者更好的體驗還需要在邏輯層面上下功夫。公式結合邏輯,可能會造就出無限多的優良戰鬥系統。

本文一再強調目標導向型的設計思路,是希望設計者們掌握這一成熟的方法,從而達到以不變應萬變。

Einsphoton

2013.07.21

3樓:萊牧

傷害=攻擊力*(1-傷害減免百分比)*隨機數(0.9~1.1)全裝:31.4次~32.3次的普通攻擊次數,可以使對方死亡上下10%的傷害算出來次數上下只有1次

你很可能算錯了

4樓:明少俠

係數包括且不限於以下幾個方面的乘積:

1. 防禦減傷率:根據受擊方的護甲/防禦力而產生的乙個減傷的係數

a) 這個係數設計的基本思路有:

i. 護甲越高,防禦減傷率越高。

ii. 護甲越高,所帶來防禦減傷率的邊際收益越低。

iii. 護甲值趨向於無限大的情況下,防禦減傷率趨向於小於1的乙個定值。

b) 具體的一些思路/例子:

i. 基本的反比例函式,構建乙個滿足上述條件的反比例函式。以DotA普攻為例,這個減傷率=護甲*0.

06/(1+護甲*0.06),在護甲值趨向於無窮大的情況下,減傷率趨向於1,由於遊戲特性,這個值一般不會超高100,模擬出來的函式曲線是這樣的:

ii. 分段函式:對於數值比較大,不斷引入新系統投放防禦屬性的遊戲(頁遊/端遊),單純的乙個函式便不能滿足需求,這時候需要根據屬性投放制定分階段的防禦減傷率函式。

下面拿之前專案的公式舉個栗子:

階段1:當0≤數值防禦≤500時

防禦免傷率=1-1/(1+數值防禦/4500)

階段2:當500《數值防禦《7000時

防禦免傷率=1-1/(125/117+數值防禦/11700)

階段3:當7000《數值防禦《30000

防禦免傷率=1-1/(108/69+數值防禦/69000)

階段4:當數值防禦》30000

防禦御免傷率=0.5+0.1*((數值防禦-30000)/30000/((數值防禦-30000)/30000+1)

模擬出來的曲線是這樣的:

a) 隨機數:純粹的使得在特定的攻擊者和攻擊物件的情況下,多次傷害值在較小範圍內浮動。產生這個隨機數的常用做法有:

i. 固定傷害值*單純的在1左右隨機,例如:Random(0.9~1.1),一般大數值的遊戲常用這種做法。

ii. 固定傷害值+數字數*骰子面數:DnD規則,後來魔獸爭霸也沿用了這個設定,即為特定的單位定義骰子數,骰子面數,最終的值是拋擲骰子數次所得骰子面數的總和。

例如使用3D9,即3個9面的骰子,攻擊的浮動下限為3,上限為27。這種做法一般用在小數值的遊戲裡面。

b) 暴擊、格擋、破擊、傷害加深/傷害減免等,這些係數的特點是有乙個前提判定,如果判定成功,則乙個係數生效:例如暴擊成立,則傷害*2;格擋成立,則傷害*0.5;破擊成立,則傷害*1.

5;傷害加深,則傷害*(1+加深係數);受擊方傷害減免,則傷害*(1-減免次數)。這些係數一般都是相乘的關係,對於判定的做法一般是這樣的:

計算公式為:產生概率

— 抵抗概率 = 理想概率

Random(1%—100%)得出實際概率

實際概率 ≤ 理想概率,判定生效

實際概率 > 理想概率,判定無效

最後,如果隨機數用的是隨機係數的話,攻方傷害就是這樣的:

攻方傷害=攻方攻擊力*(1-防禦免傷率)*隨機數*暴擊係數*格擋係數*破擊係數*(1+攻方傷害加深)*(1-守方傷害減免)

如果隨機數用的是骰子的話,攻方的傷害就是這樣的:

攻方傷害=攻方攻擊力*(1-防禦免傷率)*暴擊係數*格擋係數*破擊係數*(1+攻方傷害加深)*(1-守方傷害減免)+骰子數*骰子面數

那麼來回答下題主的問題吧:

我算了下,1-60級,同職業,同等級,同裝備

裸裝:30次~40次的普通攻擊,可以使對方死亡

全裝:31.4次~32.3次的普通攻擊次數,可以使對方死亡

我現在期望的次數是普攻30次(可能以後會改變這個次數),就這個公式來說,這樣算,可行嗎?我認為是可以實現的(實現方案後續補上),但是體驗會很不好:從裸裝到全裝的次數差異只有十次左右,裝備獲取所帶來的成長感會很不平滑:

攻防雙方均獲取一件裝備只帶來了1次左右的攻方減少,這對於30次這個基數來說體驗太微弱了。好的體驗是讓攻防雙方都能感受到明顯的成長,即攻方攻擊次數較明顯減少,守方承受傷害較明顯增加,這樣才能帶來成長感嘛!而且在「1-60級,同職業,同等級,同裝備"都是相近的戰鬥體驗不會太枯燥了嗎?

最後要說的是:做數值始於公式與拉表,但好的數值從來都不是表一拉就成了的。

遊戲數值策劃的推薦書單有哪些?

我來挖個墳.正經點回答.首先推薦兩本工具書 EXCEEL應用大全 中文EXCEL2013高階VBA程式設計寶典 然後是 數學指南實用數學手冊 工作過程中發現,其實數值策劃是個跑步的過程,有時候乙個函式能讓你的效率高得飛起來。所以那兩本工具書真心有用。後一本手冊是用來隨時檢視一些可能忘記了的數學知識。...

遊戲數值策劃對演算法的了解至少應該達到怎樣的程度呢?了解原理,熟練原理,能實際操作,還是更深入呢

策劃 不僅限於數值策劃 了解資料結構的必要性比較高,盡可能用最簡單的結構來表達複雜的需求。但對演算法的了解不用很深吧,我覺得多留意一下以下幾點即可 1.大多數情況下,要程式對記憶體或者資料庫做 遍歷 時要謹慎,少用。但也得搞明白,哪些場景並沒有效率問題所以即使用一些遍歷也無所謂 2.大多數情況下,對...

能把遊戲做到千萬級流水的數值策劃值多少錢?

假設1000萬吧蘋果分30 安卓50,如果有ip分10 發行撇一半,研發25 左右,實際還會低一些。也就是250萬,除去稅,人員方面如果20人做到千萬穩定流水還可以,50人的話就廢了。身邊例子近億的主數值大幾十吧。 草田 千萬流水現在太普通了,薪資跟其他策劃沒啥區別,就是找工作的時候比較有面試機會。...