Рандом
Вкратце
Генератор случайных чисел в играх.
x: Кто такой Рандом?
y: Рандом Намбер Генераторович (Random Number Generator) — про этого великого субъекта знает гугл, его и спрашивай.
z: А ещё у него есть бабка Ивентия, которая радует нас уже целую неделю.
Рандом (Random) — понятие, которым в информационных технологиях обозначают функции, выдающие случайные величины. При этом в большинстве случаев эти величины являются на самом деле псевдослучайными и фактически зависят от некоторых параметров системы, но на практике в большинстве случаев этого достаточно (также обычно для приближения к настоящим случайным величинам применяется добавление в формулу факторов, повторение которых маловероятно, вроде Unix-времени или показаний датчиков процессора).
Суть[править]
В большинстве настольных и компьютерных игр без случайности скучновато. Во-первых, очень сложно разработать правила, при которых игра будет просчитываться с большим трудом, чтобы в большинстве ситуаций было хотя бы два в равной мере выгодных для игрока хода, или хотя бы кажущихся таковыми; очень быстро находится идеальная стратегия, позволяющая достичь наивысшего результата, которого невозможно достичь никаким другим способом. Самым известным примером, наверное, являются крестики-нолики. Во-вторых, если игрок хочет играть в шахматы, он, внезапно, может поиграть в шахматы, а не в жалкую пародию на них. Ведь за шахматами тянется продолжительная история их развития из банального варгейма до абстрактной, но динамичной игры. Большинство же игроков просто хочет с интересом убить время.
Но стоит добавить перетасованные карты или бросаемый кубик, как всё сразу становится разнообразнее: например, персонаж стреляет по врагу, но промахивается. Или корабли управляемого игроком флота не получают попутного ветра. Или наоборот, игрок «прикупил» два туза, или попал прямо в голову супостату.
Всё это называется рандóм, от англ. random — «случайный». Понятие «случайный» означает «непредсказуемый, но укладывающийся в статистику» — другими словами, выпадение кубика случайно, принятое противником решение — нет. Разумеется, только если речь идёт об идеальном или хотя бы достаточно опытном противнике, конечно; новичкам свойственно принимать необдуманные, не обоснованные ничем решения, ставящие порой профи в тупик.
Несмотря на то, что фактор случайности применяется почти во всех жанрах, кроме файтингов и шутеров (КХГМ, КХГМ), влияние, в основном, самое незначительное.
Но есть исключение — MMORPG. Когда разработчики поняли, что некоторые фанаты жанра готовы тратить там свою жизнь, всё понеслось. Задроты готовы фармить десятками часов, чтобы выбить редкую вундервафлю. Иногда, не смыкая глаз несколько дней. Сабж — главная причина зашкаливающего задротства жанра: без него гринд почти невозможен. Из этого можно сделать вывод, что рандом и наплевательский геймдизайн подарил тысячи часов виртуальной жизни тем, у кого её нет.
Также случайный фактор используется и в настольных играх. Иногда для придания действию реалистичности, а геймплею пикантности, иногда и жгучей остроты. Когда Варвар ударом топора с вероятностью попадания 25 % спасает всю команду на последнем издыхании, случается момент, ради которого люди и готовы играть в подобные игры. Но, не стоит и забывать и казуальные настолочки. В лучшем случае, всё зависит наполовину от рандома, наполовину от стратегии, в худшем — любого игрока может заменить любой другой предмет, занимающий пространство и умеющий обращаться с шестигранником. Такие игры созданы для менее серьёзного веселья, чтобы все хорошо провели время и никто не обиделся.
Но всё вышеперечислённое — хрень, где Фортуна является главным фактором победы. Ни умение играть, ни важные вне игры качества не решают. Пример хорошей, годной игры, основанной на рандоме — большинство азартных карточных игр, где всё решается блефом, актёрской игрой и, самое главное, умением адекватно оценивать свои возможности.
История[править]
Первые попытки получения случайных результатов в целях жеребьевки и т. п. появились еще в древности: броски кубиков, вытаскивание случайных карт предполагаются как полностью случайные (предсказать заранее нельзя, если вес кубика распределен равномерно и если на картах нет специальных отметок для жульничества).
После появления компьютеров сразу же были сделаны функции для генерации случайного результата, хотя на деле множество из них представляют собой псевдослучайные генераторы чисел. Например, в игре Герои меча и магии 3 действия противников в определённых ситуациях определяются рандомом, равно как и выпадение морали или удачи (есть определённый известный шанс). В то же время, если на одной и той же клетке напасть одной и той же армией, то при повторении ходов действия оппонента и случайные срабатывания будут теми же, так как применяется рандом на основе состояния игры. Для борьбы с подобным обычно добавляют в алгоритм различные факторы, меняющиеся со временем, самое простое это время с точностью до миллисекунд (может повториться, но шанс очень мал).
Для полноценного рандома необходимо использовать абсолютно случайные источники вроде космического излучения, однако на практике это сделать сложно — необходимо иметь реальный детектор такого излучения, что представляет дополнительные статьи затрат. В то же время часто использование таких источников в качестве зернышка для ГСПЧ, так что сочетается и высокая степень случайности, и возможность при необходимости воспроизвести последовательность при знании зернышка (seed). Например, интеловская технология для генерации случайных чисел используется шумы токов в системе.
На практике многие алгоритмы страдают и от недостаточной случайности части или всей последовательности, наличия закономерностей, что не позволяет использовать их в серьезных задачах вроде криптографии, где необходима как можно более приближенная к настоящей случайность (иначе появляется возможность шифр взломать).
Интересно, что в России имеется целый набор спецификаций, отражающий набор требований к генераторам случайных чисел для использования в государственных лотереях (фактически, официальных азартных играх, в своё время довольно популярных среди людей из-за недостатка каких-то ещё зрелищ).
Рандом до цифровой эпохи[править]
Является сочетанием законов физики и ограниченности вычислительных мощностей человеческого мозга.
Прародителем великого рандома стала игра в кости — один из самых древнейших способов просрать бабло скоротать время. Главной особенностью игры являлось то, что в ней все игроки, вне зависимости от стратегических талантов и ума, были равны и имели равные шансы как на победу, так и на поражение. То есть, всё в игре зависело от рандома. После этого, кости перекочевали и в другие настольные забавы, те же нарды, где тактический элемент перемешивался с рандомом, тем самым, привнося нестабильность в игру, что вызывало интерес: у менее опытного игрока есть возможность победить, а у матёрого игреца — проиграть.
Но не подумайте, древние люди взывали к Великому Рандому не только для того, чтобы проиграть себя в анальное рабство хорошо провести время. В древности, люди думали, что все случайности — воля божья. Поэтому анон мог подкинуть монетку, чтобы посовещаться с Б-гом насчёт насущных вопросов.
В средние века, особенно в Италии, тоже совещались с богом, правда, немного с другим. Для этих целей использовались карты Таро. Каждая карта имеет своё значение, достаточно абстрактное, чтобы можно было интерпретировать его как ответ на любой вопрос. Практикуется и по сей день, правда, в коммерческих целях.
Много времени спустя, в шестидесятых, когда один нёрд игрался с корабликами, чтобы рассчитать успешность попадания, кидал уже привычный всем шестигранник, но вот незадача: вероятность считается в процентах, следовательно, нужен другой кубик. Так и был придуман d20. А потом уже другому нёрду надоели кораблики, и он решил вместо них поставить фентизийных приключенцев, которых ожидали фентезийные приключения. И всё заверте...
Большинство старых РПГ, были основаны на или вдохновлялись D&D, в которой для выполнения большинства действий надо кидать кубик. Короче, каждый раз, когда твой варвар не добил скелета с шансом попадания 80 %, благодари Гэри Гайгэкса.
Источники случайности в настольных играх[править]
Чаще всего используется игральная кость. Роль игральной кости обычно играют правильные многогранники или близкие к ним геометрические тела.
- Основная статья: Нестандартные кости
- Один из двух — кубики удобнее монеты, поэтому обычно используют чёт или нечет на бóльшей кости.
- Один из трёх или пяти — т. н. «чиж», призма со скруглёнными основаниями (ибо упасть она должна на бок).
- Один из четырёх — тетраэдр. Тетраэдр падает вершиной вверх, поэтому помечают не грани, а вершины. Или рисуют по три числа у рёбер, берётся то, которое стоит прямо. Реже октаэдр, у которого одной цифрой помечена пара граней — это удобнее (лучше катается), но в DnD есть и обычный октаэдр d8.
- Один из шести — куб. Тот самый игральный кубик. Куб — самый удобный из многогранников: прост в изготовлении, хорошо катается, быстро успокаивается, читается, даже если наедет на препятствие. Поэтому геймдизайнеры стараются подстраивать механику под кубик.
- Также могли встречались варианты куба, обеспечивающие один из трех, один из четырех. Если один из трех, то было по две грани с каждым значением. Производились и в СССР, например в игре «Ягодки» из набора «Три цыпленка» (Изд-во «Малыш», 1982 г.). В вариантах «один из четырех» (из пяти) добавлялись либо грани «переброс», либо два (одно) значения дублировались. В СССР/России изредко встречались в журнальных играх «кинь-двинь» в виде развертки. То есть для изготовления самостоятельно.
- Один из восьми — октаэдр.
- Один из десяти — так называемый пятиугольный дельтоэдр: неправильный додекаэдр, у которого две грани стянуты в точку. Реже икосаэдр, у которого одной цифрой помечена пара граней.
- Один из двенадцати — додекаэдр.
- Один из двадцати — икосаэдр.
- Один из ста — два десятигранника, на одном написано «00, 10, 20…», на другом — «0, 1, 2…» Некто Зокки придумал 100-гранник «зоккиэдр», однако он больше показуха: очень большой, долго не успокаивается[1], непонятно, как считать результат, если уткнулся в препятствие[2], и нет гарантии равномерного распределения.
- Нечасто встречаются полуправильные многогранники: берут правильный и делят грань на меньшие куски. Чаще всего — чтобы получить неравномерное распределение с заданными характеристиками (Formula D).
Также используют колоду карт или вертушку (волчок, рулетку). Настольные ролевые системы Deadlands и Savage Worlds, в частности, известны использованием карт; а в первой кастование заклинаний вообще моделируется покерными комбинациями.
Поскольку даже в неслучайных играх приходится выбирать, кто начинает или в какие ворота играть, используют бросание на пальцах, монету, «угадай, в какой руке» или «угадай, с какой стороны секундная стрелка».
«Труъ-» и «Псевдо-»[править]
Есть два RNG: «аппаратный» и «машинный». Далее будут употребляться два понятия: TRNG и PRNG, генератор истиннослучайных чисел и генератор псевдослучайных чисел соответственно.
Истиннослучайные числа от псевдослучайных отличают метод генерации и надёжность (читай — непредсказуемость, или более профессионально — энтропия).
Когда для генерации псевдослучайного числа нужно просто использовать формулу или алгоритм, то для генерации истиннослучайного числа используются физические процессы (различные шумы: тепловые, звуковые, атмосферные. При более серьёзных подходах — квантовые и другие физические явления на атомном уровне).
И, так как значение псевдослучайного числа гипотетически можно предсказать, то серьёзную работу, типа шифровки данных и изучения криптографии, доверяют TRNG, а PRNG используют для чего-то менее серьёзного: игр, подсчёта голосов, и, конечно же, твоего говнокода. Но помни: современные методы шифрования довольно-таки продвинуты, и без специального научного оборудования ты ничего не разгадаешь.
Но, вышесказанное далеко не значит, что генератор псевдослучайных чисел не нужен, иногда, он даже используется в криптографии, правда, частенько для этого докручивается аппаратный RNG, тем самым, компенсируя предсказуемость PRNG и относительно медленную работу TRNG. А иногда нет, ведь некоторые аппаратные генераторы дают огромную фору своим математическим собратьям: большинство аппаратных генераторов деградирует раз за разом, вызывая необходимость проверять себя на надёжность после каждого использования. А некоторые алгоритмы без проблем проходят «тест на следующий бит» и стабильно выдают один уровень энтропии.
Встречается[править]
Игры[править]
Настольные ролевые игры принципиально используют рандом. Из них рандом переполз в CRPG. Вообще-то, случайность используется везде, даже в шутерах. Просто шутер за одну секунду «пытает удачи» едва ли не десяток раз, и работает центральная предельная теорема, гарантирующая малый общий разброс. А вот в RPG (настольных и компьютерных), где рандом часто решает, взорвалась бомба или была обезврежена, был крит или нет, неудачный рандом вызывает кучу ругани[3].
Если компьютерный генератор случайных чисел с изъянами — например, у него сильные последовательные корреляции — это называют корейский рандом, в честь корейских MMORPG, в которых это стало «притчей во языцех». Даже если случайность самая что ни на есть случайная и независимая, раз в год может быть так, что выпадут три или четыре последовательных крита[4], и Пуассон исследовал статистику таких событий. Однако корейский рандом задолбал ролевиков настолько, что иногда статистику искусственно сглаживают: если в прошлый раз был крит, в следующий раз вероятность крита уменьшится; если, наоборот, долго не было — вероятность увеличивают[5].
Цифровые компьютеры устроены так, что один и тот же код с одними и теми же данными даёт один и тот же результат. Поэтому для низкокачественных — пригодных для игр не на деньги — случайных чисел используют труднопредсказуемый алгоритм. Но всё-таки это алгоритм и потому он детерминированный, поэтому его предсказуемость применяется с пользой. Инициализируем на двух машинах генераторы одной и той же затравкой — и они будут выдавать одни и те же числа (на этом основан мультиплеер Doom[6]). Такая предсказуемость используется и в Elite, позволяя одним числом записать целую галактику, аналогичный принцип применяется и в Spore.
Вызывает бурю негодования рандом и в играх Paradox Interactive: как бы ни сильна была бы ваша армия, она ничто, если на кубике «1 против 6». Очень яркий пример «Святого Рандомия».
В целом можно выделить критерий, отличающий хороший рандом от плохого. Хороший выглядит следующим образом: «Вот рандом подбросил тебе проблему, думай, как её решить». Плохой: «Вот рандом подбросил тебе проблему, ты ничего не можешь с ней поделать, жми рестарт».
Когда нужны высококачественные случайные числа (например, в криптографии или азартных играх), ищут источники настоящей случайности, например, таймеры, счётчики команд, движения мыши. Лучшим источником считается выброс частиц радиоактивными веществами.
История[править]
Одни из самых известных примеров влияния случайности в истории:
- Галлы, неразвитые мародёры, творили разбои в Риме вполне удачно: римляне не смогли оказать сопротивления, кто-то сбежал из города, а кто-то спрятался за мощными стенами огромного дворца — Капитолия. Самые премиальные плюшки хранились в Капитолии, чем крепость и вызывала интерес у наших воинов. Капитолий стоял на обрыве, с обрыва и начали путники проникать в замок. Сначала галлы проникли на вид стены замка со стороны обрыва, и никто их не заметил. Дальше они начали взбираться на стену замка.
Гусь. Ему это не понравилось. Очень не понравилось. Он героически загоготал, разбудив римлянина, который разбудил другого римлянина, который разбудил другого римлянина… И галлов прогнали ссаными тряпками, скинув с обрыва. Epic fail. Наверняка у них всё бы получилось, если бы не этот дурацкий гусь… - Как-то раз, Пушкин решил из Михайловского посёлка, где он был в ссылке, поехать в Санкт-Петербург к своим друзьям, декабристам. Так, вершить судьбой страны, ничего серьёзного. На пути перед санями пробежал заяц, и, ВНЕЗАПНО, поэт развернул сани на 180 градусов и помчался домой. Дело в том, что в то время это считалось довольно-таки серьёзным предупреждением свыше. И правда, ведь после неудавшегося восстания декабристы начали изображать люстру.
Терминология, связанная с рандомом[править]
- Кубомёт — игра, в которой приходится кидать кубики часто и помногу. Для таких игр существует даже артефакт — кубобашня, чтобы кубики никуда не укатились и не развалили игровую обстановку.
- Святой Рандомий — когда победа или поражение слишком зависит от случайности.
- 2d6+1 — характерная запись формул, непонятная тем, кто совсем с настолками не знаком. Означает «бросить два шестигранных кубика и к сумме прибавить 1».
- Управление рандомом — мечта каждого читака.
Примечания[править]
- ↑ Сам Зокки рекомендовал бросать его в сосуд с водой, что не слишком-то удобно.
- ↑ В некоторой мере этому подвержены и другие многогранники, кроме тетраэдра и куба. Для последних всё просто: застрял у препятствия — нижней считается та грань, которая лежит на препятствии. Ролевики, подскажите, как вы поступаете с застрявшими у препятствия додекаэдрами и икосаэдрами.
- Комментарий ветерана: да я, когда мастерю, вообще любой игральный кубик велю бросать заново, если он не лёг ровно. Дайс упал со стола на пол — незачёт, переброс. Дайс натолкнулся на препятствие, но лёг ровно — зачёт.
- Комментарий ветерана № 2: насколько я знаю, так делают все. Неясно — значит, переброс. Если остановился у препятствия, но лежит ровно и показание дайса читается однозначно — в нашей компании это принималось за легитимный бросок.
- Комментарий ветерана № 3: Подтверждаю слова предыдущих ораторов. В варгеймах мы поступаем точно так же.
- Комментарий ветерана № 4: Если на столе есть что-то, у чего дайс может застрять (то есть, почти всегда), использую для бросков пустую обувную коробку. И не застрянет, и не укатится.
- Комментарий ветерана № 5: А ещё можно использовать т. н. Dice tower, он же кубомёт.
- В сообществе Вархаммера с подачи официальных рульбуков принято, что если игрок не может попасть кубами по столу, то его войска\персонаж уж точно не попадут по врагу, так что такие броски считаются автопровалами.
- ↑ Ой, сколько было мата с той стороны, когда в DotA авантюрный прыжок Мортред, Призрачной убийцы закончился удачно из-за двух критов подряд — при том, что Dota 2 сглаживает рандом.
- ↑ Пуассон рассмотрел статистику несчастных случаев от удара лошадиным копытом и сказал: все эти всплески — 3 или 4 смерти — в пределах статистики и ничего предпринимать не надо.
- ↑ Псевдослучайное распределение в DOTA2
- ↑ Там есть аж два генератора — синхронный
P_Random
и асинхронныйM_Random
, оба реализованы таблицей на 256 значений (причём не перестановкой, а какими попало 256 числами).