随机和种子,生成相同的值

本文关键字:种子 随机 | 更新日期: 2023-09-27 18:08:01

我正在开发一款小型XNA游戏,

 for (int birdCount = 0; birdCount < 20; birdCount++)
            {
                Bird bird = new Bird();
                bird.AddSpriteSheet(bird.CurrentState, birdSheet);
                BIRDS.Add(bird);
            }

上面的代码在Load函数下运行,BIRDS是保存所有Bird的List。

bird构造器随机自定义该鸟。如果我一个断点一个断点地运行代码,随机函数会生成不同的值,但是如果我不停止代码并让程序运行,所有的随机值都会变得相同,这样所有的鸟都会变得相同。

我该如何解决这个问题?

随机和种子的代码:

 private void randomize()
    {
        Random seedRandom = new Random();
        Random random = new Random(seedRandom.Next(100));
        Random random2 = new Random(seedRandom.Next(150));
        this.CurrentFrame = random.Next(0, this.textures[CurrentState].TotalFrameNumber - 1);
        float scaleFactor = (float)random2.Next(50, 150) / 100;
        this.Scale = new Vector2(scaleFactor, scaleFactor);
        // more codes ...
        this.Speed = new Vector2(2f * Scale.X, 0);
        this.Acceleration = Vector2.Zero;
    }

随机和种子,生成相同的值

您可能会在代码中重复创建一个新的Random对象-而不是创建Random对象一次(即通过使其静态或将其作为参数传递)

由于Random默认构造函数使用当前时间作为初始种子,并且具有相同种子的Random的所有实例创建相同的数字序列,以快速的顺序创建新的Random对象可能会产生相同的数字序列。