複習 : 虛擬亂數產生器(PRNG; Pseudo Random Number Generator)
亂數(Random number)很有用,特別是設計遊戲時, 我們經常會需要使用到亂數決定一些事情:
(1)命運 還是 機會 ?
(2)何時何地要出現大力丸、大力丸的有效時間?
(3)何時該出現精靈、怪物、牠們的魔法強度 ? (通常其魔法種類不用亂數決定)
(4)何時該出現陷阱 ?
(5)甚至一拳打下去(攻擊)的效果也可用亂數決定一個範圍(數值) !
各種程式語言中都有提供 PRNG 函數(亂數產生器函數);
PRNG = Pseudo Random Number Generator (請注意 Pseudo 的 P 不發音)
(1)關於 processing 亂數的 processing 程式,
** 要生出一個整數亂數, 可以這樣寫:
int gg = (int)random(101); // 0 .. 100
int yy = (int)random(1, 7); // 1 .. 6 注意不是 7 喔
** 要生出一個實數(float)亂數:
float abc = random(101); // 0 .. 100.99999999999
(2)電腦語言提供的亂數產生器(函數)稱 PRNG (Pseudo Random Number Generator), 因為其實是亂中有序!
Pseudo 意思是假的, 再說一次, 這裡 P 不發音喔 !
如果希望每次執行的亂數序列相同, 這樣寫:
randomSeed( mySeed ); // 這裡 mySeed 是你希望的亂數種子, 例如 0 或 38
如果要真的亂, 可在程式碼一開始抓時間來當亂數種子:
randomSeed( System.currentTimeMillis() );
通常遊戲用的亂數(Random number)屬於均勻分布(Uniform distribution;齊一分布)的亂數,
意思是每個亂數出現的機會是一樣的。
但是,如果亂數是用在遊戲以外的其他領域,則通常不是用這種機會均等的齊一分布的亂數!!
另一種最常見的亂數是常態分布(Normal distribution; 鐘形分布):
例如,你會聽到說大考中心公布平均 70分, 標準差 8,
這意味著 70-16 ~ 70+16 之間的有 95%;
70-8 ~ 70+8 之前的大約有 68%
如果要模擬人的身高、體重等, 也要使用常態分布的亂數才正確。
(關於常態分佈可以用 Google 查詢 68 95 99 看看)
|
|
|