首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#/XNA伪随机数生成

C#/XNA伪随机数生成
EN

Stack Overflow用户
提问于 2011-10-03 07:22:17
回答 3查看 1.9K关注 0票数 5

创建随机数的c#/XNA过程非常快速和简单,然而,它很可能是我见过的最糟糕的分布式随机数生成器。对于c#/XNA,有没有更好的方法可以轻松实现呢?

rand.Next()并不能满足我的需要。

发自:

静态私有随机数= new Random();

我随机放置对象,遍及我的程序。有时是10,有时是200。

当调用随机对象时(x val和y val在2d平面上都是随机的),它们组合在一起。生成代码是干净的,调用它们是好的,干净地迭代,并为每个值提取一个新的随机数。但它们是分组的,显然很糟糕,毕竟对于随机数来说,这并不是很好。我是c#的中级技能,我从as3过渡过来的,它似乎更好地处理随机性。

我很清楚它们是伪随机的,但在windows系统上,分组是奇怪的( C# )。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-03 08:07:42

你能在XNA中使用System.Security.Cryptography.RandomNumberGenerator吗?

代码语言:javascript
复制
var rand = RandomNumberGenerator.Create();
byte[] bytes = new byte[4];

rand.GetBytes(bytes);

int next = BitConverter.ToInt32(bytes, 0);

要获取最小/最大范围内的值,请执行以下操作:

代码语言:javascript
复制
static RandomNumberGenerator _rand = RandomNumberGenerator.Create();

static int RandomNext(int min, int max)
{
    if (min > max) throw new ArgumentOutOfRangeException("min");

    byte[] bytes = new byte[4]; 

    _rand.GetBytes(bytes);

    uint next = BitConverter.ToUInt32(bytes, 0);

    int range = max - min;

    return (int)((next % range) + min);
}
票数 2
EN

Stack Overflow用户

发布于 2011-10-03 08:46:47

对于我的项目,我使用简单的XOR算法。我不知道它分发数字的效果如何,但它很容易实现:

http://www.codeproject.com/KB/cs/fastrandom.aspx

票数 1
EN

Stack Overflow用户

发布于 2011-10-04 05:57:39

这也可能取决于您使用System.Random的方式。一般来说,一遍又一遍地创建Random的新实例不是一个好主意,因为在大约同一时间创建的Random对象很可能会以相同的随机数作为种子(默认情况下,使用时间作为种子)。相反,创建Random的单个实例,并在整个程序中仅使用该实例。

除非目标是安全性(这里可能不是这样),否则使用System.Random会更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7629895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档