2011-10-02 22 views
5

rasgele sayılar oluşturmak için C#/XNA süreci ancak, büyük olasılıkla gördüğüm rasgele sayı üreteci dağıtarak kötüsü, oldukça hızlı ve kolaydır. C#/XNA için uygulanması kolay daha iyi bir yöntem var mı?C#/XNA sözde Rastgele sayı oluşturma

rand.Next() sadece benim ihtiyaçlarına uygun değildir. dan

:

statik özel Rastgele rand = new Random();

Tüm programım boyunca rastgele nesneleri yerleştiriyorum. bazen 10, bazen 200

rastgele nesneler (x val ve y val 2d düzlemde rasgele her ikisi de) çağrısında, bunlar grubudur. Üretim kodu temizdir ve iyi arar, temiz şekilde yinelenir ve her değerle yeni bir rasgele sayı çeker. Ama onlar, her şeyden sonra rastgele sayılar ile çok iyi değil, belirgin derecede kötü, grup. Ben C# ile ara beceri yaşıyorum, ben daha iyi rastgele ele almak görünüyordu, as3 üzerinden geçti.

Onların sözde rastgele olduğunu iyi farkındayım, ancak bir windows sistemde C#, gruplama grotesk olduğunu.

+0

hangi rasgele sayı üretme sürecine atıfta bulunuyorsunuz? System.Random? –

+0

İhtiyaçlarınız nelerdir? – PostMan

+0

Biraz daha fazla bilgi güncellendi. Ve zorunlu inleme + sızlanan. – SimpleRookie

cevap

2

Eğer XNA dan System.Security.Cryptography.RandomNumberGenerator kullanabilir miyim?


var rand = RandomNumberGenerator.Create(); 
byte[] bytes = new byte[4]; 

rand.GetBytes(bytes); 

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

bir min/max aralıkta bir değer elde etmek için: Benim proje için

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

Biri bu yöntem için min ve maks değerini nasıl ayarlayabilir? – SimpleRookie

+1

Min/max değerlerinin ne olduğuna dair bir örnek verebilir misiniz? –

+0

0-10, 1-200, -100-100, standart şeyler. – SimpleRookie

1

. Genel kural olarak, Random'un yeni örneklerini oluşturmak için iyi bir fikir değildir. Aynı anda oluşturulmuş olan Random nesnesi aynı rasgele sayı ile aynı anda ekilebilir (varsayılan olarak, zaman tohum olarak kullanılır) .) Bunun yerine, tek bir Rastgele örneği oluşturun ve programınızda yalnızca bu örneği kullanın. Amaç Muhtemelen burada durum böyle değil güvenlik, olmadığı sürece

, sadece System.Random kullanarak daha iyi olacaktır.

İlgili konular