2012-07-21 83 views
0

我正在創建一個遊戲,我目前正在研究隨機丟棄系統。生成項目和使用srand

我打算創建一個隨機ID,這反過來是一個項目的設計。如果我將兩個相同的ID傳遞給createItem函數,它應該創建完全相同的項目。

無論如何。當我創建ID時,我計劃使用輸入來讓某些敵人更頻繁地放下某個物品。因此,可以說,該功能看起來像這樣的例子:

void randID(int level, int diff, float wepChance, float armChance); 

如果我設置wepChance至10%(0.1)當我打電話的功能,我真的希望它是掉落的武器有10%的機會。如何將此輸入與rand()srand()一起使用? srand是如何工作的(除此之外沒有發現任何東西就是創造種子)。

我想我可以寫我自己的代碼,使它真的有10%的機會,但我可以使用srand來實現相同的結果嗎?

+0

'srand'真的不是這裏的答案。 – 2012-07-21 09:56:51

回答

2

srand不會幫助你。

如果你想要的東西有10%的機率出現​​,然後使用類似如下:

int x = rand(); 

bool hasOccurred = (x < (RAND_MAX * 0.1)); 

這會不會是正好 10%,因爲RAND_MAX可能不完全除以10 ,但我認爲它足夠接近您的應用程序。

+0

是的,謝謝我想我可能不得不走這條路去創造它。感謝您的快速回復! – Tallkotten 2012-07-21 10:19:46

+0

在此之前有沒有任何理由使用srand? srand不會有所作爲吧? – Tallkotten 2012-07-21 10:26:01

+1

@Tallkotten:一般來說,你在整個程序開始時都會調用'srand' ** once **。 – 2012-07-21 10:27:32

0

srand和rand是'僞隨機數發生器'。 srand意思是'seed random',通常與'time(NULL)'一起使用;''

srand(time(NULL)); //Guarantees, that you won't get the exact same row of numbers twice. 
rand()%100;  //For example. 

關於你的輸入問題:這就像滾動骰子。 假設您假設0-99(%100)的數字,您說'ItemID 1'的結果爲< 10. 在這種情況下,這意味着10%的概率。

rand不是最可靠的隨機數發生器,不應該用於加密問題(因爲這些行在數學上是可預測的),但對於遊戲來說它應該工作得很好。

這有幫助嗎?

啊,是的,用代碼說話。

srand(time(NULL));   //Initializes the random number generator. (Call once) 
randID(1, 5, 0.1, 0.2); //Assuming some parameters here 

void randID(int level, int diff, float wepChance, float armChance) {   
    int Rand = rand()%100; 
    wepChance *= 100; //Maximum dice roll for a weapon 
    armChance = wepChance + (armChance * 100); //Maximum dice roll for an arm. 
    if(Rand <= wepChance) //doWeapon 
    else if(Rand > WepChance && Rand < armChance) //doArm 
} 

這是未經測試,代碼相當粗糙,但我想你知道我在做什麼。畢竟,我並不完全知道你的意思。

+0

你應該添加一個注意,它太頻繁地調用'srand'不是一個好主意。如果在調用'srand'之間時間沒有改變,後續的'rand'調用將返回相同的值。 – 2012-07-21 10:06:46

+0

啊,是的,謝謝你的信息。其實我有點建議在我的編輯中。但是,真的,謝謝你的頭。 – ATaylor 2012-07-21 10:10:37