C# - 从序列中获取种子
Posted
技术标签:
【中文标题】C# - 从序列中获取种子【英文标题】:C# - Get Seed from Sequence 【发布时间】:2012-06-06 03:07:14 【问题描述】:是否可以在 c# 中从 Random() 序列中获取种子?
我的目标是创建一种编辑器,玩家可以在其中创建自己的角色,就像他可以选择一组不同的眼睛,放置它们,然后是头发等。最后它会输出一个具有不同数字序列的数组。
我想获得种子,因为我的目标是能够与其他人分享这个角色。我只要给他们种子,他们就会拥有我创造的角色。
【问题讨论】:
+1 用于编写问题的“我真正想要实现的”部分,因为事实证明您需要的东西与您提出的问题完全不同(很常见,如果没有就无法检测到“想要实现”部分)。 感谢您编辑了我的信息。在我看来,这很清楚,虽然哈哈。但现在我重读了它,确实这个问题结构不合理,与我想要达到的目标完全不同。这个网站似乎有可以解码新手思想的成员,这很酷(但不会再因为问得不好的问题而打扰你了)。祝大家有美好的一天,再次感谢。 【参考方案1】:另一种方法是让用户选择预先生成的特征集(即基于具有已知种子的随机序列)。这样,您只需为您的序列存储小种子(可能使用自定义伪随机生成器)。
【讨论】:
哦,我刚刚看到你的评论,对不起。这是一个非常有趣的想法!我会记住的。【参考方案2】:根据您对@SLaks 的cmets,我认为您提出的问题与您要解决的问题无关。
您要解决的问题是:如何获取一组用户定义的属性和值,并将它们变成朋友之间可以轻松传递的东西?
这与遇到的问题完全相同:如何将一个又长又复杂的 URL 变成一个短 URL?
因此,我会看看这个著名的问题:URL 缩短器:How to code a URL shortener?
在那里你会看到Bijective Functions 的使用和一个很棒的算法描述,你可以用它来解决你自己的问题。这可用于将您的示例序列(例如23,56,45,78,80
)转换为一或两个字母代码。
【讨论】:
非常感谢!这正是我一直在寻找的。我只是没有很好地表达自己(可能是因为我不是以英语为母语的人并且头脑混乱)。 要弄清楚如何对属性进行编码,您还有很多工作要做。剩下的最简单的方法是将用户属性存储在一个表中,使用算法对行 ID 进行编码,然后将其分享给他们。 好的,我会慢慢来,努力把它做好。 :) 但现在至少我知道该去哪里了。【参考方案3】:为什么不只存储角色的属性而不是种子?这很简单,也很有意义。
此外,如果用户创建自己的序列,它不会有“种子”。
【讨论】:
嗯,是的,我很愚蠢,因为用户要指定自己的序列,而 Random() 使用非常具体的计算,它们永远不会相等。【参考方案4】:没有办法直接从现有的 Random 类实例或生成的序列中撤销种子。但是,当您创建 Random 类时,您可以使用 constructor that allows you to specify the seed。如果您随后保存此种子,您可以将其传递给其他人。
如果您希望构建是随机的,但保存该种子,则一种选择是使用 2 个 Random 实例。第一个可用于创建种子,然后使用该种子编号构建第二个(您将保存并传递给其他人)。
【讨论】:
谢谢你们的回答,我很感激。我已经知道了,我想知道的是,例如,如果玩家创建自己的序列,它可以输出一个种子,然后 Random(seed) 将使用该种子来输出玩家在创建特点。这有意义吗? @Heatith 请参阅我的第二段 - 您可以随机生成种子,然后让他们保存该种子并将其发送给其他人。 问题是我不想随机生成它。我只是认为,如果用户指定他自己的序列,它可以输出一个种子,然后可以由 Random(seed) 使用,该种子将输出相同的序列。但这只是不可能的。我很笨。不过感谢您的快速回答!在问愚蠢的问题之前,我应该了解更多。这是一个我不会再犯的错误,对不起。 @Heatith 是的 - 这是不可能的。您必须让它随机生成才能正常工作。 +1 回答所写的问题,但结果发现 OP 想要一些完全不同的形式“我想要实现的”部分问题。【参考方案5】:您应该在第一次创建种子时存储它。
【讨论】:
我可能没有正确解释自己。我的代码,来自种子(所以随机(种子))将输出一个序列(比如 23、56、45、78、80),因此将基于这个序列创建一个字符。但我也希望玩家在编辑器中创建自己的序列,并从中获取种子,其他人将使用该种子输出相同的序列,因此相同的角色 对不起,我编辑了,我在完成我的帖子之前按了“发送”。 (用ipad写不容易)以上是关于C# - 从序列中获取种子的主要内容,如果未能解决你的问题,请参考以下文章