數值設定——公式篇

數值設定的步驟很多,本文只講公式類型、特點及應用;牽涉到數值設定中常遇到的幾種類型的設定:機率、經驗、屬性、技能;

本文由簡入煩,主體以公式的類型、特色來劃分章節,穿插幾種類型的設定講解。

OK,Let’s Begin。

 

一、加減乘除

線型爲線性,變化穩定,比較容易找到規律,預期後面的發展;

舉幾個例子:

1, 每加一點力量,近戰物理攻擊加1;每射擊一次,子彈數減少1;

2, 每使用一次冰箭術,熟練度加1,達到2000時,升級爲2級;

3, 寵物近戰物理傷害=寵物物理攻擊-目標物理防禦;寵物近戰物理傷害=寵物物理攻擊*目標物理吸收比;近戰物理技能傷害=((武器傷害+技能附加)*技能增幅)*目標物理吸收;

4, 血擊(技能):在HP <50%時,將自己所有HP化爲傷害,攻擊目標,使用後生命值爲1;傷害=(基本傷害+當前HP)*(1+技能等級調整值+10*當前HP/最大HP);

 

總結:

Ø  加減的運算最爲直觀,一眼就可以發現規律,甚至潛意識;

Ø  乘除的運算容易簡單、直接的對數據造成跳躍性,而常常是有意識、有規律的跳動;

Ø  混合運用時,可以實現很多有特色的功能;

 

二、冪函數

冪函數f(x)=x^i;對比函數g(x)=x;

當0<i<1時,[0,1]區間內,f(x)>g(x);[1,∞]區間內,f(x)<g(x);先急後緩;

當i>1時,[0,1]區間內,f(x)<g(x);[1,∞]區間內,f(x)>g(x);先緩後急;

當i<0時,[0,1]區間內,f(x)逼近無窮大;[1,∞]區間內,f(x)逼近無窮小;

 

示例曲線圖如下:

 

舉例應用:

1, 升級經驗=ceiling(1000*等級^(2/3),1);(ceiling=向上取整)

2, 消除類休閒遊戲(如寶石迷陣),COMBO得分=100*本次寶石個數*2^combo次數;

3, 魔法攻擊=智力值+[int(智力值/10)]^2;(int=向下取整)

4, f(x)=1/x的應用:

ü  血擊傷害Ver2.0=(基礎傷害+當前HP)*[14*技能等級調整值*當前HP/(最大HP-當前HP)];

ü  攻擊速度=50/{200 -[(250-敏捷-靈巧/4)/50*(200-基本速度)]};

5, 命中率=100/[1+(150-敏捷)];

6, 魔法回覆(點/秒)=2+(2+精神/50)^2;

 

總結:

0, 前期容易後期難是普遍的經驗值遞加設計原則,i<1時具有這種特性;

1, i>1造成的連鎖遞增效應是用來獎勵的上好措施,但缺點是有限區間內拓展;

2, 某些需要積累到一定程度才能體現出優越性的屬性設定往往要用到f(x)=x^i(i>1)的先緩後急的特性。

3, f(x)=1/x常常以a/(b-x)的形式出現,常常用來實現具有臨界值的屬性設定,且x多有取值限制,需要很好的前期規劃;

4, 接上,1/x的x取值區間常定義在[1,max],有時也會進入[0,1]這一段,一般都是通過將[1,max]區間進行除算,得到新的[1/a,max];可以產生新的臨界點;

5, 冪數的計算相對複雜,不適合做心跳計算;指數函數極少應用;

 

三、數組、數列

有限個具有相同變量名的相同類型的下標變量的有序排列,叫做一個數組;

一元數組:{a1,a2,…,ai,…,an}

二元數組:{a(1,1),a(1,2),a(1,3),a(2,1),a(2,2),a(2,3),…,a(3,3)}

 

按一定次序排列的一列數,叫做數列;有窮數列;無窮數列;n項合Sn

等差數列:ai-a(i-1)=n,Sn=(a0+an)n/2

等比數列:ai/a(i-1)=n,Sn=a0(1-q^(n-1))/q,q=ai/a(i-1)

斐波那契數列:a(i+1)=ai+a(i-1),a0=1,a1=1

{1,1,2,3,5,8,13,21,34,55,89,144,233,…}

ü  假設一對初生兔子要一個月纔到成熟期,而一對成熟兔子每月會生一對兔子,那麼,由一對初生兔子開始,12 個月後會有多少對兔子呢?144對。

ü  二叉完全樹的葉子數按斐波那契數列增長;

ü  連續 10 個斐波那契數之和,必定等於第 7 個數的 11 倍。

數列是函數的離散形式;數組是離散的值的集合;

 

舉幾個例子:

1, 1~5級升級每次獲得3點屬性點,而後每5級多獲得1點,即6~10級4點,11~15級5點……,50級後,每4級一個跳躍;

2, 本級升級所需經驗=上級所需經驗+本級等級數*10000;

3, 休閒小遊戲COMBO得分Ver2.0:Combo1=寶石數*c1,Combo2=寶石數*c2,Combo3=寶石數*(c1+c2),…,Combo(i)=寶石數*(c(i-2)+c(i-1));其中c1=2,c2=3;

 

 

總結:

Ø  對於一些不方便、不必要用公式來表達的數值,採用數組直接存取方便快捷;(你也可以說這是索引表)

Ø  對等差、等比這種最基礎的數列進行一些細節的改變,往往可以產生微妙的變化。例2就是一個遞歸的例子,曲線走勢類似f(x)=x^2;(當然,你也可以說這本來就是遞歸)

Ø  數組、數列其本身並不是什麼公式,更多的是一個看問題的角度;

 

 

四、正態分佈

正態分佈的應用非常深、廣,筆者實在是能力有限,只探討下在機率問題上的正態分佈;

Random[]:在[0,1]上隨機取數;

Random[Integer,{1,100}]:在[1,100]上隨機取整數;

1d8=Random[Integer,{1,8}]:投一次8面骰;

2d4=Random[Integer,{1,4}]+ Random[Integer,{1,4}]:投2次4面骰;

xdy= Random[Integer,{1,y}]+ Random[Integer,{1,y}]+…:投x次y面骰,設結果爲s,結果s的機率爲p′,那麼,設p= p′*y^x,則爲受x,y,s影響的3元函數,p(x,y,s):

Ø  1/(y^x)爲p′的最小單位;

Ø  s∈[x,xy],s爲整數;

Ø  x=1時,分佈曲線爲平行線y=1/y;x=2時,分佈曲線爲折線,示例圖如下(實際爲散點圖):橫軸爲s,縱軸爲p;

Ø  x>2時,s的出現機率p(s):( B[n,m]爲Binomial[n,m]的省略,爲組合;n≥m)

p(x,y,s)={B[x,1]*p(x-1,y-1,s-y)+B[x,2]*p(x-2,y-1,s-2y)+…+B[x,3]*p(x-i,y-1,s-i*y)}+{B[x,1]*p(x-1,y-2,s-y)+B[x,2]*p(x-2,y-2,s-2*y)+…+B[x,i]*p(x-i,y-2,s-i*y)}+…+B[x,i]*p(x-i,y-j,s-i*y)+…

(i,j,x,y,s∈integer, 1≤i<x, 1≤j<y;)

Ø  上式中,B[x,i]*p(x-i,y-j,s-i*y)有解的條件是:

x≤i*(y-j)+x-i≤s-i*y

Ø  曲線總爲對稱圖形,s=(xy+x)/2時的p(x,y,s)值最大,s爲整數,唯一最大,爲小數,上下取整,兩個最大值;

Ø  必須注意的是,x,y是一常量,i,j是變量;請勿混淆;

Ø  給出示意圖一張(5d4) ,橫軸爲s,縱軸爲p:

Ø  p(a,b,a)=1,p(a,b,ab)=1;∑p′=1;

Ø  另外一種計算p的方式較爲容易理解,我稱之爲冒泡法;見示意圖,講述的是p(5,4,7)的求解過程;

於是,這個問題轉化成:將s-x個球放入x個口袋中,每個口袋最多能裝y-1個球,有多少種分法?

 

舉幾個例子:

1, 某盜賊的閃躲爲20%;即Random[integer,{1,100}]≤20時,閃躲成功,否則失敗;

2, 某盜賊的閃躲爲20%,格擋爲10%,兩者優先級等同;即 Random[integer,{1,100}]≤20時,閃躲成功,21≤Random[integer,{1,100}]≤30時格擋成功;

3, 某盜賊的閃躲是20%,格擋是10%,完全閃躲是25%,優先級完全閃躲>閃躲=格擋;即Random[integer,{1,100}]≤25時,完全閃躲,否則,Random[integer,{1,100}]≤20閃躲,21≤Random[integer,{1,100}]≤30格擋;

4, 弓的攻擊是2-10,弩的攻擊5-7;便是2dy1和5dy2(y1>y2)的簡化應用;(當然,實際效果是1d9+1和1d3+4);

5,  

 

總結:

Ø  我將例1、2中的隨機數稱爲部分隨機數,因爲存在部分的無用數;

Ø  骰子是隨機數的一種特殊情況,總是有解,我稱之爲完全隨機數

Ø  機率都可以用p(x,y,s)表達;

Ø  p(x,y,s)中的x控制曲線的坡度,y控制曲線的左右跨度,s決定機率大小,x*y決定曲線的成長性;x:y決定曲線的整體走勢;

Ø  接上,當1←x<y時,趨於平緩;y<x→xy時,趨於陡峭;

Ø  任意一種隨機數的隨機事件都受到收益遞減的影響,見下圖,表示的是在閃躲提高時,閃躲成功:不閃躲的比例:

Ø  p(3,y,s)在s∈[3,y+3-1]上遞歸增長(一元遞歸),規律如下(x=3):

1,x,2x,3x+1,4x+2,…,ix+(i-2),…,

或者表達爲(將上式看做一個數列)

{p2-p1,p3-p2,…,pi-p(i-1),…}爲等差數列,首項p1=2,等差d=1;

Ø  p(4,y,s)有類似規律,爲二元遞歸;依次類推;

Ø  若y1<y2,p1(3,y1,s)在s∈[3,y1+3-1]和p2(3,y2,s)在s∈[3,y2+3-1],p1和p2在s∈[3,y1+3-1]上相等;

Ø  [3,y+3-1]區間存在一個遞歸減少的對稱區間,對稱軸s=(xy+x)/2;

 

五、作者的話

對於數值設定是一項龐大的過程,需要很清晰的思路和邏輯,工作流程不多螯述,做過的基本都知道;不想對哪部分重要、哪部分次要做評價,個人覺得這是混泥土和鋼筋的關係,一個發揮不了作用,結合纔是正道。

作者的信條是:條件決定結果,儘量簡化過程,懂的取捨,懂的輕重;

本篇是第一彈,正在努力推出其他部分的一些東西;因爲公式的內容相對比較具體,有很多前人的經驗在鋪路(雖然正態分佈部分的內容完全是自己總結出來的,汗啊,高數學的差的結果,覺得有這麼個東西,但就是想不起來)。

特別申明一下,正態分佈部分的內容因爲沒有太多實際的操作經驗,所以不太好胡亂舉例,避免引起誤解。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章