为多个对象生成随机数

本文关键字:随机数 对象 | 更新日期: 2023-09-27 18:20:54

所以我正在尝试创建一个类似矩阵的程序,其中包含"正在下雨的绿色代码"。一切都很顺利,直到我决定把所有的字符串实例放到一个列表中并从中提取/更新。为了获得正确的效果,我需要随机化一些事情。

所有字符串都被创建并存储在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;
}

为多个对象生成随机数

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

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进行种子设定将创建相同的种子值。因此,相同的随机数。

您的循环是"快"的,因此new Random(new System.DateTime().Millisecond)将始终提供相同的结果,因为每个循环的速度都快于1ms-以下应该有效:

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;
}