Как использовать случайные числа в C #? - PullRequest
5 голосов
/ 10 июля 2010

Я работаю над понгом в C # с XNA.

Я хочу использовать случайное число (в пределах диапазона) для определения таких вещей, как, например, отскок мяча прямо или под угломи как быстро мяч движется при падении в весло.

Я хочу знать, как его реализовать.

Ответы [ 6 ]

14 голосов
/ 10 июля 2010

Используйте класс Random . Например:

Random r = new Random();
int nextValue = r.Next(0, 100); // Returns a random number from 0-99
7 голосов
/ 10 июля 2010

Если вам не нужны криптографически защищенные номера, Random вам подойдет ... но есть две ошибки, о которых нужно знать:

  • Вы не должны создавать новый экземпляр каждый раз, когда он вам нужен. Если вы создаете экземпляр без указания начального числа, он будет использовать текущее время в качестве начального числа - это означает, что если вы создадите несколько экземпляров в быстрой последовательности, многие из них будут производить одинаковую последовательность чисел. Обычно вы создаете длительный экземпляр Random и повторно используете его.
  • Это не потокобезопасно. Если вам нужно генерировать случайные числа из нескольких потоков, вам следует подумать о наличии одного экземпляра на поток. Прочитайте этот пост для получения дополнительной информации, но также обязательно прочитайте комментарии, поскольку они содержат очень полезную информацию.
1 голос
/ 10 июля 2010

Хотя вы можете использовать класс Random, как и все остальные, класс Random использует только генерацию псевдослучайных чисел. RandomNumberGenerator, который находится в пространстве имен System.Security.Cryptography, создает реальные случайные числа.

Как использовать:

RandomNumberGenerator rng = RandomNumberGenerator.Create();
byte[] rand = new byte[25]; //Set the length of this array to
                           // the number of random numbers you want
rng.GetBytes(rand);

Подробнее: http://msdn.microsoft.com/en-us/library/system.security.cryptography.randomnumbergenerator(v=VS.80).aspx

1 голос
/ 10 июля 2010

Используйте метод Next объекта Random, который принимает мин и макс и возвращает значение в этом диапазоне:

var random = new Random();    
int randomNum = random.Next(min, max);
1 голос
/ 10 июля 2010
Random rnd = new Random();
rnd.Next(minValue, maxValue);

т.е.

rnd.Next(1,10);
0 голосов
/ 10 июля 2010

Вот мой генератор случайных чисел

 private static Random rnd = new Random(Environment.TickCount);

 private int RandomNum(int Lower, int Upper)
{

 return rnd.Next(Lower, Upper);//MyRandomNumber;

}
...