你如何在C#中获得Random的当前种子?

Ted*_*Ted 15 c# random

在我的游戏中,我将使用随机值来选择玩家从胸部获得的奖励.问题是你可以快速保存并快速加载,这意味着他们可以继续重新加载以重新随机化,直到他们得到他们想要的东西.有没有什么方法可以获取我的Random对象的当前种子值,并可能在加载时返回到同一点,以便它们不会滥用随机化?

SLa*_*aks 19

这是不可能的.

相反,您可以Random使用二进制序列化序列化实例.
Random是的[Serializable],种子和内部状态将持续存在.

但请注意,保存随机种子可让您的玩家预测未来,如果您允许在战斗中保存,这非常有用.

另请注意,用户仍然可以保存,打开胸部,加载,执行生成随机数的动作,然后从胸部获取不同的项目.

  • 在加载关卡时,您可以预先生成所有箱子(和类似物品)的内容.创建一个新的随机实例,仅用于级别加载,并确保以一些明确定义的顺序初始化箱子.加载后抛出实例,但记住savegame的初始种子. (2认同)
  • +1.您还可以考虑将多个Random对象用于不同类型的"随机"事件.即眼睛糖果的东西在一个随机物体上,而战斗结果在另一个上,并在另一个物体上掠夺. (2认同)

Tie*_* T. 11

获取种子时不确定,但您可以保存为Random对象提供的值.请记住,有两个构造函数.第二个是Random(Int32),所以如果你自己设置种子(一个足够简单的值Random),你可以在将它传递给构造函数之前将其存储在某处.如果您尚未阅读,请查看MSDN文档,网址http://msdn.microsoft.com/en-us/library/system.random.aspx.

  • 如果查看[Random的源代码](http://referencesource.microsoft.com/#mscorlib/system/random.cs,bb77e610694e64ca),则会发现以下内容:`public Random():this(环境。 TickCount){}`因此,您要做的就是获取Environment.TickCount`将其存储在类字段中,并将其提供给构造函数。**您去了,您已经保存了种子。:)** (2认同)