为多个对象生成随机数
本文关键字:随机数 对象 | 更新日期: 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;
}