2011-05-08 154 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)];