2011-10-02 5 views
5

난수 생성을위한 C#/XNA 프로세스는 매우 쉽고 빠르지 만, 지금까지 본 난수 생성기를 배포하는 데있어 최악의 경우입니다. C#/XNA를 구현하기 쉬운 더 좋은 방법이 있습니까?C#/XNA 의사 난수 생성

rand.Next()가 내 요구에 맞지 않습니다. 발

:

정적 전용 랜덤 랜드 = 새로운 랜덤();

내 프로그램 전체에 무작위로 개체를 배치합니다. 때로는 10, 때로는 200입니다.

무작위 객체 (x val과 y val은 둘 다 2 차원 평면에서 임의 임)를 호출 할 때 그룹화됩니다. 생성 코드는 깨끗하고 호출을 좋게하고 반복적으로 반복하며 각 값으로 새로운 난수를 가져옵니다. 그러나 그들은 눈에 띄게 나쁘다. 결국 무작위 수는 그다지 좋지 않다. 나는 C#으로 중간 스킬이고 as3에서 넘어 섰다. 이것은 임의성을 더 잘 처리하는 것처럼 보였다.

나는 의사 랜덤이지만 윈도우 시스템에서는 C#이 그룹화된다는 점을 잘 알고있다.

+0

난수 생성 과정을 참조 하시겠습니까? 'System.Random'? –

+0

귀하의 필요 사항은 무엇입니까? – PostMan

+0

조금 더 많은 정보로 업데이트되었습니다. 그리고 의무적 인 신음 + 징징. – SimpleRookie

답변

2

System.Security.Cryptography.RandomNumberGenerator을 XNA에서 사용할 수 있습니까?


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

나는 간단한 XOR의 algorythm을 사용합니다. 나는 번호를 배포하는 방법을 잘 모르겠지만, 구현하기가 쉽다 : 그것은 또한 당신이 System.Random를 사용하는 방법에 따라 달라질 수 있습니다

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

1

합니다. 일반적으로 Random의 새로운 인스턴스를 만드는 것은 좋은 생각이 아닙니다. 왜냐하면 같은 시간에 생성 된 Random 개체가 동일한 난수로 시드 될 가능성이 높기 때문입니다 (기본적으로 시간은 시드로 사용됩니다) 대신 무작위의 단일 인스턴스를 만들고 프로그램 전체에서 해당 인스턴스 만 사용하십시오.

여기에 해당되지 않는 보안 목표가있는 경우가 아니면 System.Random을 사용하는 것이 좋습니다.