2016-02-08 69 views
0

我正在嘗試爲我的在線遊戲創建一個「隨機數」發生器。我的隨機數發生器產生小數字

我想純粹根據玩家的位置和屬性創建數字,並且基於一個小型計數器,該計數器在控制器中每增加一步就會增加一個。

這裏是我的代碼來創建一個「種子」和其他功能使用的種子來生成隨機數從0 - >最大非包容性:

function generate_seed(){ 
    var num = 1; 
    for(var i = 0; i < number_of_players; i++){ 
     var prevNum = num; 
     num++; 
    } 

    num+=obj_controller.randStep; //randStep is a variable that gets incremented by 1 in my controller object each step 

    //Loops through all players 
    with(obj_player){ 


     if(x % 2){num+=x;} 
     else {num-=x;} 

     if(y % 2){num+=y;} 
     else {num-=y;} 

     if(hp % 2){num+=hp;} 
     else {num-=hp;} 

     if(randStep % 2){num+=randStep;} 
     else {num-=randStep;} 

    } 

    return abs(num); 
} 

function random(var max){ 
    //Generate synced random number from 0 -> max, does not include max 
    var seeder = synced_random_generate(); 

    seeder+= max * 5; //Make sure the seed is greater than max 

    return seeder mod max; 
} 

的事情是,這類作品,但如果我這樣做: random(20000);

它通常會返回一個相對於最大值(20,000)的相當小的數字。

我從來沒有見過它返回一個大於3000的數字。這很奇怪。

有沒有人知道什麼是錯的或一個可能的更簡單的方法來產生一個隨機數基於玩家的位置/統計和在我的控制器增加計數器?

+0

您使用JavaScript,如果是再加入JavaScript代碼來 –

+0

這其實只是僞代碼。它適用於任何語言。 –

回答

0

找到一個真正偉大的解決方案在線:

int rand1(int lim) 
{ 
     static long a = 100001; 
     a = (a * 125) % 2796203; 
     return ((a % lim) + 1); 
}