2015-05-26 3 views
0

Я генерации случайного числа в моей игре с помощью:псевдо генерации случайных чисел

System.Random rnd = new System.Random(); 
int TileType = rnd.Next (0, 8); 

Проблема заключается в том, что номера слишком случайны. Цифры относятся к плиткам, и я не получал отдельную плитку за 20 рулонов.

Мне нужно руководство по созданию функции, которая генерирует «поддельные» случайные числа. Поэтому в основном я хотел бы удостовериться, что я генерирую каждый тип плитки в x рулонах. Я полагаю, 12 может быть хорошей отправной точкой для x, но хотелось бы настроить x.

Если кто-нибудь может указать мне в правильном направлении, было бы весьма полезно.

Update

Вот что я в настоящее время думает. Спасибо @Golo за то, что указал мне так. Мысли?

  1. Создайте список номеров, которые я хочу.
  2. Добавить еще несколько случайных чисел.
  3. Перемешать список -var shuffledList = unshuffledList.OrderBy (x => rand.Next()). ToList();
  4. Возьмите первый элемент и удалите из списка.
  5. Восстановить список, когда пуст.

Это должно означать, что все числа будут появляться часто, но у вас все еще есть повторы, чтобы он сохранял случайное чувство.

+0

Вы ищете "перетасовки" ИЛИ "взвешенных случайных чисел" (в зависимости от ваших предпочтений). –

ответ

4

Создайте список с номерами, которые вы хотите иметь, а затем произвольно выберите элемент из этого списка и удалите его.

Повторяйте это, пока ваш список не будет пустым и начните заново.

Таким образом вы получите каждое число раз в n попытках, но их заказ будет случайным.

+0

Ницца. Единственное (если я правильно понял OP), что n (8) отличается от x (12). – publicgk

+0

Или использовать любой другой код в случайном порядке (выбор и удаление легко кодировать, но может иметь очень сомнительную производительность для больших списков из-за большого количества операций копирования). –

+0

Приблизьтесь, за исключением того, что я не увижу значение n снова до тех пор, пока не будут свернуты все остальные значения. Я не думаю, что я был бы доволен этим. –

2

Мне нравится ответ @ Golo, но только для того, чтобы добавить к нему другое вращение. , ,

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

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

После каждого выбора, вы можете 0 из веса выбранного элемента (уменьшая вероятность его выбирает следующую, и увеличивая вероятность выбора «старых» невыбранных значений.)

Они не являетесь в .Net, но вы должны начать с алгоритма.

http://www.perlmonks.org/?node_id=242744
http://peterkellyonline.blogspot.com/2012/02/weighted-random-selection-in-php.html

Смежные вопросы