使用相同的种子重置随机数生成器(C#)

时间:2015-04-27 17:41:46

标签: c# random random-seed

这是我的情况:

我在C#中制作游戏,每当你开始一个新关卡时,它会随机化屏幕上所有对象的位置。要做到这一点,我刚刚宣布了

random r = new Random();

然后我决定,即使我想在新级别开始时随机化,我希望每次每个级别都相同。换句话说,级别1上的事物的位置将始终相同,每次你开始游戏,等等所有其他级别。

为此,我在生成器中添加了种子:

random r = new Random(mySeed);

这很有效 - 当我退出游戏并再次启动游戏时,等级1中的随机位置每次都会相同。

然而,问题在于: 我理解当你给Random对象一个种子时,它使用那个种子来生成它的数字列表,这显然是无论我重新打开程序多少次,我的所有r.Next()都是相同的。但是,似乎我必须完全重启整个程序才能重置它并再次回到列表中的第一个项目......

换句话说,如果玩家在第1级死亡,你会回到主菜单..但是当它调用r.Next()时,它当然不会给我正确的等级1个职位。

我试图通过简单地在你死后重新构造对象来解决这个问题,例如:

//other death code in here
r = new Random(mySeed);
//back to main menu

但这似乎没有什么区别 - 它仍然会继续以前的序列。

那么有没有人知道我怎么能指回随机列表的开头而不必重新启动整个程序?

谢谢!

1 个答案:

答案 0 :(得分:1)

好吧,看来Pierre-LucPineault是正确的。

我确实设法通过重新构建我的Random对象来修复它 - 我之前只是在错误的地方进行修复。

之前,我在做     r = new Random(mySeed) 在死亡时,由于某种原因,这没有用。但是当我点击主菜单上的新游戏时,我转而调用那段代码,现在它可以工作了!?

我之前添加了一个断点,代码肯定会被执行..所以然后我做了整个,逐步完成每一行,输入调试... 原来当时我和r.Next()之间再次开始游戏时有一个点,这样整个序列就搞乱了!

所以是的,重新构建对象的工作完全正常,下次我确实要做的时候我会更加小心;)