2011-05-08 158 views
0

我正在製作一個小遊戲,根據隨機數獎勵獎品。所以當一個任務完成並且獎勵必須發出時,我想隨機產生獎品。目前,我正在獲得1到500之間的隨機數,然後使用巨大的嵌套if-else語句根據結果分配獎品。對我來說,這顯然是錯誤的做法,但我不確定這可能會採取什麼其他方式。根據隨機數選擇物品

有什麼建議嗎?

+0

是否有500份不同的獎品,或將幾個號碼映射到相同的獎品? (爲了歪曲他們之間的概率,我的意思是) – 2011-05-08 16:43:34

+0

是的,大約有300個獨特的,但它們存在三個不同的稀有度。所以1-300是常見獎品,301-450是不常見的,451-500是罕見的。 – BigPete 2011-05-08 17:01:58

+0

除了有更多的常見獎品之外,獲得常用獎品或其他獎品的機會有多大?如果答案是肯定的,那就改變了方法。 – 2011-05-08 17:48:41

回答

2

您可以使用獎品數組來保存您的價格,使用隨機值作爲數組中的指標來挑選獎品。

var prizes = new Prize[500]; 
//fill prizes 
//randomly select index within prize array 

如果有間隙或只有幾個數字贏過,使用字典映射,從一個整數獎品(或什麼,如果鍵不存在的話)來代替。

1

你可以做很多事情。例如,您可以使用array來存儲獎品,並使用隨機數作爲數組的索引。那麼獎品就是在索引中存儲在數組中的任何東西。如果您想要更多控制權,您可以使用List

1

使用一個列表,其中每個項目具有唯一的「最小值」和有關相關獎品的信息。然後找到列表中具有最高值的項目,但仍低於您的隨機數。或相反亦然。

最小值允許您在不使用具有所有數字條目的巨型數組的情況下賦予不同的概率。概率由不同獎品之間的距離來定義。

1

在這個例子中,我假設你的獎品是字符串(但它也適用於對象)。 創建列表和您的所有獎品添加到它,以下列方式:

//using System.Collections.Generic; 
var prices = new List<string>(); 
//Add all of your prices here 
var random = new Random(); 
var price = prices[random.Next(0,prices.Count)];