是否可以从 C# 中的 Random() 序列中获取种子?
我的目标是创建一种编辑器,玩家可以在其中创建自己的角色,就像他可以选择一组不同的眼睛,放置它们,然后是头发等。最后它会输出一个带有不同数字的序列。
有了这个,我想得到种子,因为我的目标是能够与其他人分享这个角色。我会给他们种子,他们就会拥有我创造的角色。
根据您对@SLaks 的评论,我认为您提出的问题与您要解决的问题无关。
您要解决的问题是:如何获取一组用户定义的属性和值,并将它们变成朋友之间容易传递的东西?
这与遇到的问题完全相同:如何将一个又长又复杂的 URL 变成一个短 URL?
因此,我会看看这个著名的问题:URL 缩短器:如何编写 URL 缩短器?
在那里,您将看到双射函数的使用以及可用于解决您自己的问题的出色算法描述。这可用于将您的示例序列(例如23,56,45,78,80
)转换为一个或两个字母代码。
没有办法从现有的 Random 类实例或生成的序列中直接退出种子。但是,当您创建 Random 类时,您可以使用允许您指定种子的构造函数。如果你保存这个种子,你可以把它传给另一个人。
如果您希望您的构造是随机的,但保存该种子,则一种选择是使用 2 个 Random 实例。第一个可用于创建种子,然后使用该种子编号构建第二个(您将保存并传递给其他人)。
您应该在第一次创建种子时存储它。
为什么不只存储角色的属性而不是种子?这很简单,而且很有意义。
此外,如果用户创建自己的序列,它不会有“种子”。
另一种方法是让用户选择预先生成的特征集(即基于具有已知种子的随机序列)。这样,您只需为您的序列存储小种子(可能使用自定义伪随机生成器)。