數值設定的步驟很多,本文只講公式類型、特點及應用;牽涉到數值設定中常遇到的幾種類型的設定:機率、經驗、屬性、技能;
本文由簡入煩,主體以公式的類型、特色來劃分章節,穿插幾種類型的設定講解。
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;
五、作者的話
對於數值設定是一項龐大的過程,需要很清晰的思路和邏輯,工作流程不多螯述,做過的基本都知道;不想對哪部分重要、哪部分次要做評價,個人覺得這是混泥土和鋼筋的關係,一個發揮不了作用,結合纔是正道。
作者的信條是:條件決定結果,儘量簡化過程,懂的取捨,懂的輕重;
本篇是第一彈,正在努力推出其他部分的一些東西;因爲公式的內容相對比較具體,有很多前人的經驗在鋪路(雖然正態分佈部分的內容完全是自己總結出來的,汗啊,高數學的差的結果,覺得有這麼個東西,但就是想不起來)。
特別申明一下,正態分佈部分的內容因爲沒有太多實際的操作經驗,所以不太好胡亂舉例,避免引起誤解。