Сделать поддельное случайное распределение?


8

Иногда «реальное» случайное событие кажется несправедливым и расстраивает игроков. Например, вероятность того, что противник с вероятностью 20% нанесет двойной урон («критический удар»). Таким образом он мог сделать 4 критических удара подряд с вероятностью 1/725. Это не так мало, как кажется.

Я надеюсь, что вероятность может быть скорректирована после каждого удара. Если игрок только что получил критическое попадание, вероятность следующего удара уменьшается. В противном случае оно увеличивается.

Есть ли математическая модель для такого поведения?


Ответы:


9

Возможно, вы захотите полностью переосмыслить, какие «критические попадания» делают в вашей системе и почему вы их используете. «Ну, другие РПГ используют их!» не является уважительной причиной. Одним из предупреждений о перекосе является необходимость применять все больше и больше специальных правил.

Любой случайный бонус лишает прямого тактического навыка игрока и добавляет к стратегическому планированию (разгрузка предметов РПГ, расстановка приоритетов в статистике снаряжения и т. Д.). Из-за этого смещения фокуса вы должны решить, о чем ваша игра, прежде чем беспричинно применять старые стандарты, такие как критические и беспорядочные.

Мое предложение состоит в том, что если вы хотите, чтобы случайность принимала какое-либо участие в вашей игре, тогда слава в ней, пусть она будет случайной.

Но если вы действительно хотите добавить больше произвольных правил, вы можете просто начать обратный отсчет, когда произойдет первый критический момент , и во время этого обратного отсчета все дополнительные критические значения уменьшатся до 50%, а затем до 25% и так далее. Каждый критический, конечно, сбрасывает обратный отсчет . Это дает вам два места для настройки ваших произвольных правил: сколько времени занимает обратный отсчет и сколько накоплений накапливается при каждом критическом событии. Комбинация этих двух элементов управления позволяет вам четко избежать невысказанной проблемы «что если босс получает критическое, то нормальное, а затем второе критическое значение?» что простая проверка цепочки не исправит.


5

В Dota 2 используется PRD (псевдослучайное распределение), которое не оказывает существенного влияния на ожидание, но уменьшает шансы на полосу, например полосу ударов. Посмотрите на это, объясняет все подробно. http://www.youtube.com/watch?v=KdS-K_rosCI


На самом деле это не так. Это просто вводит понятие без каких-либо подробностей об этом алгоритме.
Лай Юй-Сюань

@ LaiYu-Hsuan Да, видео базовой версии может немного облегчить понимание: youtu.be/yR7BcWfBCsc
aaaaaaaaaaaa

3

Я думаю, что это тот случай, когда попытка быть слишком умной приведет к спирали настроек и настроек генератора случайных чисел, что сделает его очень сложным.

Ответ может быть в вопросе: если игрок может расстроиться из-за слишком большого количества критических ударов подряд, ну, прямо уменьшите шансы на это. Если ГСЧ получает 4-й критический результат подряд, вы можете, например, перебросить его. Или даже обеспечить соблюдение critical = false.


3

Один довольно распространенный подход, который вы можете использовать, который должен дать результаты, к которым вы стремитесь: вместо того, чтобы бросать кубик каждый раз, вместо этого выбрать карту: предположим, у вас есть шанс 1/10 «критического отказа», шанс 4/10 отказа, шанс 4/10 успеха и шанс 1/10 «критического успеха». Тогда вместо того, чтобы бросать (метафорический) d10 и обрабатывать результат, вместо этого перетасуйте стопку из десяти (виртуальных) карточек результатов и раздайте их одну за другой всякий раз, когда вам нужно получить такой результат. Когда у вас кончатся колоды, просто перетасуйте и начните разыгрывать снова. Это все еще может генерировать спина к спине критических сбоев, но это гарантирует, что будет успех (и критические успехи) в течение некоторого разумного промежутка. Если вы хотите, чтобы все было не так очевидно (и не возражаете против небольшого шанса последовательных экстремальных результатов), вы всегда можете «удвоить» свою колоду; собрать стопку из двадцати карт, которая содержит две копии каждого результата, и перемешать их вместо этого.


Это отличный ответ. Это эквивалентно: если вам нужно 10 случайных чисел от 0 до 100, а не получить случайное число 10 раз, вы просто генерируете массив со всеми возможными опциями (0, 1, 2, ..100) и перемешиваете его, затем используйте первые 10. Это позволяет избежать повторений, поэтому это не совсем эквивалент, но во многих случаях это гораздо лучшее решение.
Зэ

1

Байесовский вывод имеет дело с ситуацией совсем немного. Вы начинаете с распределения вероятностей для происходящего события, а затем, когда это происходит, вы обновляете эту вероятность до новой. Это априорная и последующая вероятности соответственно. Часто наиболее полезно просматривать это в виде дерева (взял это из интернета).

введите описание изображения здесь

В дереве ветви представляют вероятность принятия этой ветви, а узлы - это событие. Итак, в вашем случае давайте сделаем A, B, C событиями критического удара с помощью атак A, B и C соответственно. Тогда P и NP будут события получения другого или нет. Мы замечаем, что в точке (B -> P) есть шанс 25% получить еще один критический удар, учитывая, что вы получили один последний ход. Конечно, ваше дерево не будет выглядеть так, но это лучшее, что я мог сделать за 5 минут.


1
Вывод Байса не имеет к этому никакого отношения!
Звездный

@starwed, тогда ты хотел бы предложить другой термин, а не просто кричать на меня?
Джемми

@ Джереми, ты должен ответить, как решить проблему ОП. Вы только что перефразировали его вопрос математической иллюстрацией. Но это не говорит OP, как сделать RNG более увлекательным.
kurtzbot

1

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

Когда игрок наносит критический удар, вы даете ему небольшую награду, чтобы побудить к дальнейшей игре. Вроде как, как наркоман будет оставаться за покерным столом «чуть дольше» после выигрыша руки. Когда враг получает удар от критического удара, это может вовсе не увеличивать игровой опыт, а просто вызывать чувство несправедливости, особенно если это заставило его проиграть бой.

Таким образом, мое предложение было бы просто сохранить криты для игрока и вообще не использовать их для врагов. Ведь игрок является героем и должен быть благосклонен самими богами для достижения величия :)


0

Вот случайные, но не полностью случайные методы, которые я использую.

1) Сумка в случайном порядке. Положите все действительные результаты в сумку, выберите один случайным образом и удалите его из сумки. Повторяйте до тех пор, пока пакет не опустеет, затем снова наполните пакет. Чтобы добавить обратно в случайности, пополните сумку, когда в ней осталось только Х предметов.

2) Прогрессивные проценты. Первый бросок X% вероятности, если неудача, второй бросок X + Y%, затем X + 2Y% и т. Д. Сбросьте до X% в случае успеха. И начальное значение, и прогрессия могут быть скорректированы (даже нелинейные).

3) Внутренние перезарядки. Бросьте X & шанс, если успех, не бросайте в течение следующих N секунд или M попыток или чего-либо еще. Может сочетаться с другими методами. Чтобы добавить больше случайности, сделайте несколько проверок событий с разными клоунадами, то есть сделайте 2 броска по 25% с внутренним временем восстановления 3 и 7 секунд, в отличие от 1 броска с 50% с icd 5 с (не совсем такая же вероятность, но вы можете вычислить и сопоставьте, если это важно).

4) Предварительно свернутый интервал. Вместо проверки процента по каждому событию, просто выберите, когда события происходят. Например, «этот босс атакует каждые 1d4 + 4 атаки». Работает хорошо, когда вы хотите, чтобы что-то происходило относительно последовательно и в некоторой степени случайно, но вы не хотите возвращаться назад к событиям. В некоторых случаях частный случай методов (2) плюс (3). Опять же для большей случайности вы можете иметь 2 или более перекрывающихся последовательностей.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.