2012-01-13 88 views
2

我想在iOS平臺上編寫多人遊戲。遊戲依靠動態生成的隨機數來決定接下來會發生什麼。但它是一款多人遊戲,所以這個「隨機數」對於所有玩家來說都應該是一樣的,以便有一致的遊戲玩法。生成可靠的僞隨機數

因此,我需要一個好的可靠的僞隨機數生成器,如果我在它的所有設備(iPad/iPhone/iPodTouch)和所有操作系統版本上先保持相同的隨機數序列,

看起來像srandrand將爲我做的工作,但我不知道rand保證在所有操作系統版本的所有設備上生成相同的號碼?否則是什麼好的僞隨機數生成算法?

回答

7

從C標準(和目標C是基於C的頂部上的薄層,從而這仍然需要在按住):

如果函數srand然後用相同的種子值調用時,順序的僞隨機數字應重複。

沒有保證不同的實現(甚至是不同版本的同一實施的)會給基於種子一致的序列。 ,

// RAND_MAX assumed to be 32767. 
static unsigned long int next = 1; 
void srand(unsigned int seed) { next = seed; } 
int rand(void) { 
    next = next * 1103515245 + 12345; 
    return (unsigned int)(next/65536) % 32768; 
} 

而儘管有大約越好發電機:如果你真的要保證這一點,你可以編寫你自己的線性同餘發生器,如例如,一個在標準本身簡單的線性同餘一般比綽綽有餘,除非你是統計學家或密碼學家。

0

如果你給rand提供了一個種子值,那麼它應該始終提供相同的僞隨機數序列。你也可以嘗試arc4random()。

+0

這對於給定的實現而言並非如此,但並不一定是所有的實現。 – paxdiablo 2012-01-13 07:48:16