多个对象的随机数生成

时间:2012-01-21 13:52:35

标签: c# random xna

所以我试图用“下雨的绿色代码”来创建一个类似矩阵的程序。在我决定将所有字符串实例放入列表并从中绘制/更新之前,一切都进展顺利。为了实现正确的效果,我需要随机化一些事情。

创建所有字符串并将其存储在for循环中显示的列表中。间隔和速度随机数会改变字符串下降的速度,以及各个字符在精灵表中旋转的速度。

出于某种原因,虽然我只是让一面墙上的文字一下子掉下来,所有的精灵都以同样的速度旋转。这些类及其各自的功能确实有效......所以问题是我的随机数初始化出了什么问题?

for (int i = 0; i < (wWidth / 30); i++)
{
    Random random = new Random(new System.DateTime().Millisecond);
    float randInterval = NextFloat(random);
    int dropSpeed = random.Next(1, 7);
    _msList.Add(new MatrixString(chinese, randInterval, dropSpeed, dropSpeed, 1.0f, xOff, 10));
    xOff = i * 32;
}

2 个答案:

答案 0 :(得分:6)

您需要在random循环之外创建for实例:

Random random = new Random(new System.DateTime().Millisecond);
for (int i = 0; i < (wWidth / 30); i++)
{
    float randInterval = NextFloat(random);
    int dropSpeed = random.Next(1, 7);
    _msList.Add(new MatrixString(  
                chinese, randInterval, dropSpeed, dropSpeed, 1.0f, xOff, 10));
    xOff = i * 32;
}

在短暂的循环中,使用new System.DateTime().Millisecond播种将创建相同的种子值。因此,相同的随机数。

答案 1 :(得分:2)

你的循环是“快速”,因此new Random(new System.DateTime().Millisecond)将始终提供相同的结果,因为每个循环快于1毫秒 - 以下应该有效:

Random random = new Random(new System.DateTime().Millisecond);
for (int i = 0; i < (wWidth / 30); i++)
{
    float randInterval = NextFloat(random);
    int dropSpeed = random.Next(1, 7);
    _msList.Add(new MatrixString(chinese, randInterval, dropSpeed, dropSpeed, 1.0f, xOff, 10));
    xOff = i * 32;
}