1. 程式人生 > >隨機數生成器,隨機種子

隨機數生成器,隨機種子

遊戲中經常要用到隨機數,但如果一個沒有隨機種子的的生成器,就沒法重複之前的隨機數了。js的Math.random就用不了隨機種子,只好自己弄了一個,有了隨機種子,每次只要傳入相同的種子,都會得到同樣的隨機數。直接程式碼:
function seededRandom(seed, min, max) {
    seed = (seed * 9301 + 49297) % 233280;
    var rand = seed / 233280;
    return min + rand * (max - min);
}

這是一種偽隨機數生成器,叫做線性同餘生成器。
如果你傳入相同的種子,確實會得到一樣的結果,但是隨機種子怎麼變化比較好呢,如果只是單純的遞增,或有些規律,會發現得到的結果也是有規律的,所以我們的種子也得隨機的變化。程式碼:
var randomSeed = 0;
function random(min, max) {
    var seed = randomSeed;
    min = min || 0;
    max = max || 1;
    var result = seededRandom(seed, min, max);
    randomSeed += Math.floor(seededRandom(seed, 1, 100000));
    return result;
}

這樣就很隨機了,並且只要一開始randomSeed是一樣的,每次得到的序列都是一樣的。那麼在遊戲中,只要記錄一開始的randomSeed。比如是當前時間,如果想得到之前的隨機序列,只要設定randomSeed為之前的記錄就行了。

參考:http://www.jb51.net/article/88848.htm

相關推薦

隨機數生成器,隨機種子

遊戲中經常要用到隨機數,但如果一個沒有隨機種子的的生成器,就沒法重複之前的隨機數了。js的Math.random就用不了隨機種子,只好自己弄了一個,有了隨機種子,每次只要傳入相同的種子,都會得到同樣的隨機數。直接程式碼:function seededRandom(seed,

OpenCV中的隨機數隨機種子

我們先從在C/C++中的隨機數與隨機種子說起。 rand()、srand() rand()可以生成一個0~RAND_MAX之間的一個隨機數,返回值是一個unsigned int型別值。rand函式

Java生成隨機數隨機種子

一般常用的:0~n      範圍的        new Random().nextInt(n)m ~ n 範圍的(閉區間)   new Integer ((int)(Math.random()*(n - m + 1) + m))Java裡面有一個隨機函式——Random,

Unity 隨機數隨機種子

隨機數幾乎應用於遊戲開發的方方面面,例如,隨機生成的地圖,迷宮,怪物屬性等,在Unity中,使用隨機數非常方便: 1 // 2 // 摘要: 3 // Return a random integer number between min [inc

C++中的srand(time(null))利用時間設定隨機種子產生隨機數

   首先需要宣告的是,計算機不會產生絕對隨機的隨機數,計算機只能產生“偽隨機數”。其實絕對隨機的隨機數只是一種理想的隨機數,即使計算機怎樣發展,它也不會產生一串絕對隨機的隨機數。計算機只能生成相對的隨機數,即偽隨機數。    偽隨機數並不是假隨機數,這裡的“偽”是有規律的

BZOJ 3122 SDOI2013 隨機數生成器

color false std ros == d+ eal eof close 公式就不推了.hzwer上的很清楚. 值得註意的一點是,如果最後答案成0,需要加上mod.否則400ms wa. 1 #include<cstdio> 2 #incl

robot framework 下生成隨機數或是隨機字符串(萬能的evaluate)

cli val line src inf detail ora ati 軟件 今天剛剛學到生產隨機數或是隨機字符串的知識。記錄一下(轉發自WHACKW的專欄) 1、生成隨機數 首先在第一個用法的同時,介紹一下這個關鍵字。Evaluate有2個參數,一個是表達式,一個是模塊。

bzoj3671 [Noi2014]隨機數生成器

col cin lan return clu ... class www src 傳送門:http://www.lydsy.com/JudgeOnline/problem.php?id=3671 【題解】 貪心從1...n*m取,開兩個5000*5000的數組就夠了,可以重

【BZOJ3671】[Noi2014]隨機數生成器 暴力

put noi2014 noi get ems amp name light urn 【BZOJ3535】[Noi2014]隨機數生成器 Description Input 第1行包含5個整數,依次為 x_0,a,b,c,d ,描述小H采用的隨機數生成

【bzoj3671】[Noi2014]隨機數生成器 貪心

方法 geo light 隨機數生成器 turn ring 表示 交換 復雜 題目描述 輸入 第1行包含5個整數,依次為 x_0,a,b,c,d ,描述小H采用的隨機數生成算法所需的隨機種子。第2行包含三個整數 N,M,Q ,表示小H希望生成一個1到 N×

數組除重和應用隨機數進行隨機點名

其中 bmi 建立 action put html script eth orm 數組除重: 主要是建立一個新的空數組,然後利用中間狀態。在遇到相同的數字時其中間狀態為1此時跳出循環,若沒有相同數字則將其壓入空數組中。其代碼為: <script> va

python隨機數隨機選擇……random

clas ack 排序 amp dom choice nts imp clu import random from random import random, uniform, randint, randrange, choice, sample, shuffle li

【編程珠璣】【第一章】生成隨機數隨機取樣的問題

當前 rand 可用 生成 奇數 sel 浪費 print 運行時 一、利用隨機數函數生成隨機數 問題1(《編程珠璣》習題12.1後半段): 給定一個rand(),可以產生從0到RAND_MAX的隨機數,其中RAND_MAX很大(常見值:16位int能表示的最大整數3276

[Noi2014]隨機數生成器

區間 esp 隨機數生成器 每次 gis [] com mem getch 題面 傳送門 Sol 這道題卡空間。。。 先模擬出T,大力貪心,每次選最小的走顯然最優 那麽選了\((i, j)\)它上面都只能選第\(j\)列以前的,它下面都只能選第\(j\)列以後的 每次選最小

隨機數生成器

pos post pan 分享 () div 隨機數生成器 隨機數 png int x; do { x=RANDOM() || (RANDOM() << 1) || (RANDOM() << 2); } while(x >

bzoj3122: [Sdoi2013]隨機數生成器

typedef its names 隨機 pre efi IT 由於 %d 3122: [Sdoi2013]隨機數生成器 Description Input Output HINT $ 0 \leqslant a \leqslant P-1,0 \leqslant b

BZOJ2875: [Noi2012]隨機數生成器

problem nbsp mem clu mat HR tex AI pre 【傳送門:BZOJ2875】 簡要題意:   給出m,a,c,x[0],並且x數組滿足x[i]=(a*x[i-1]+c)%m(i≠0)   給出n,g,求出x[n]%g 題解

Luogu3600 隨機數生成器

markdown 表示 pla gis cal esp source long 並且 題面 傳送門 Sol \(sto \ \ \) \(fdf\) \(sto \ \ \) \(fateice\) 顯然,如果一個區間包含了另一個區間,那麽它的最小值不會有貢獻,直接去掉 考

bzoj2875隨機數生成器

name long pro ret div 隨機數生成 https ID nbsp 題目:https://www.lydsy.com/JudgeOnline/problem.php?id=2875 矩陣乘裸題。 如果直接乘的話會爆long long,所以用加法代替乘,過程中

BZOJ3671 [Noi2014]隨機數生成器 【貪心】

n) 隨機數 lag 直接 memset ++ oid putchar esp 題目鏈接 BZOJ3671 題解 模擬題意生成矩陣貪心從小選擇即可 每選擇一個,就標記其左下右上矩陣 由於每次都是標記一個到邊界的矩陣,所以一旦遇到標記過就直接退出即可,可以保證復雜度 還有就是