创建随机数的c#/XNA过程非常快速和简单,然而,它很可能是我见过的最糟糕的分布式随机数生成器。对于c#/XNA,有没有更好的方法可以轻松实现呢?
rand.Next()并不能满足我的需要。
发自:
静态私有随机数= new Random();
我随机放置对象,遍及我的程序。有时是10,有时是200。
当调用随机对象时(x val和y val在2d平面上都是随机的),它们组合在一起。生成代码是干净的,调用它们是好的,干净地迭代,并为每个值提取一个新的随机数。但它们是分组的,显然很糟糕,毕竟对于随机数来说,这并不是很好。我是c#的中级技能,我从as3过渡过来的,它似乎更好地处理随机性。
我很清楚它们是伪随机的,但在windows系统上,分组是奇怪的( C# )。
发布于 2011-10-03 08:07:42
你能在XNA中使用System.Security.Cryptography.RandomNumberGenerator吗?
var rand = RandomNumberGenerator.Create();
byte[] bytes = new byte[4];
rand.GetBytes(bytes);
int next = BitConverter.ToInt32(bytes, 0);要获取最小/最大范围内的值,请执行以下操作:
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);
}发布于 2011-10-03 08:46:47
对于我的项目,我使用简单的XOR算法。我不知道它分发数字的效果如何,但它很容易实现:
http://www.codeproject.com/KB/cs/fastrandom.aspx
发布于 2011-10-04 05:57:39
这也可能取决于您使用System.Random的方式。一般来说,一遍又一遍地创建Random的新实例不是一个好主意,因为在大约同一时间创建的Random对象很可能会以相同的随机数作为种子(默认情况下,使用时间作为种子)。相反,创建Random的单个实例,并在整个程序中仅使用该实例。
除非目标是安全性(这里可能不是这样),否则使用System.Random会更好。
https://stackoverflow.com/questions/7629895
复制相似问题