2011-10-02 94 views
5

创建随机数字的c#/ XNA过程非常快速简单,但是,它可能是我见过的最差的分布随机数生成器。是否有更好的方法可以很容易地为c#/ XNA实现?C#/ XNA伪随机数字创建

rand.Next()只是不适合我的需要。

from:

static private Random rand = new Random();

我随机将对象放在我的程序中。有时是10,有时是200.

当调用随机对象(x val和y val在二维平面上都是随机的)时,它们将进行分组。代码是干净的,并称它们很好,迭代干净,并为每个值抽取一个新的随机数。但是他们分组显然很糟糕,毕竟随机数字并不是很好。我是c#的中级技术,我从as3移交过来,似乎更好地处理随机性。

我很清楚它们是伪随机的,但在Windows系统上的C#,分组是怪诞的。

+0

你指的是哪一个随机数生成过程? 'System.Random'? –

+0

您有什么需求? – PostMan

+0

我更新了一些信息。并强制呻吟+抱怨。 – SimpleRookie

回答

2

您能使用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); 
} 
+0

如何设置该方法的最小值和最大值? – SimpleRookie

+1

你能举一个你最小/最大值是什么的例子吗? –

+0

0-10,1-200,-100-100,标准物。 – SimpleRookie

1

它也可能取决于你如何使用System.Random。作为一般规则,创建Random的新实例并不是一个好主意,因为Random几乎同时创建的对象很可能会使用相同的随机数播种(默认情况下,时间用作种子。)相反,创建一个Random的实例,并在整个程序中使用该实例。

除非目标是安全,这可能不是这种情况,您最好使用System.Random