我随机做错了什么?

时间:2012-05-24 10:36:57

标签: xna c# random

我有一些代码使用随机数来确定对象是否特殊。我在每个经常重置的4个对象中使用此代码。

Random rand = new Random();

int i = rand.Next(1, 25);

if (i == 1)
{
    thiss.typer = "boulder";
    thiss.texture = Content.Load<Texture2D>("rock");
}
else if (i == 2)
{
    thiss.typer = "ice";
    thiss.texture = Content.Load<Texture2D>("ice");
}
else if (i == 3)
{
    thiss.typer = "bomb";
    thiss.texture = Content.Load<Texture2D>("bomb");
}
else
    thiss.typer = "normal";

但每次执行此代码时,当它创建4个对象时,当它使其中一个特殊时,它会因为某些原因使它们全部特殊。这段代码有什么问题,或者我是否需要展示更多的代码来阐明它?

1 个答案:

答案 0 :(得分:14)

我可以想到为什么会发生这种情况的两个原因。

首先,也许您不小心在对象之间共享引用,以便thiss.typer在所有4种情况下引用相同的对象。

其次,更有可能的是,您创建的Random对象共享相同的种子,因此rand.Next在所有4个实例中返回相同的数字。 当您在没有参数的情况下执行new Random()时,种子将基于当前系统时间。如果你连续多次这样做,种子可能是相同的。

您可以尝试使用相同的Random对象,而不是每次使用它时都创建一个新对象。这样您也可以避免不必要地创建大量对象。