В этой главе
• Недетерминированные механизмы.
• Бросание кубиков и независимость.
• Вероятность, ставки и шансы.
• Вычислительно-независимая вероятность.
• Практические примеры.
В 1654 году один французский дворянин, страстный игрок, заметил, что, играя в кости, он проигрывает гораздо чаще, чем, по идее, должен. С этой проблемой он обратился к своему другу математику Блезу Паскалю. Тот поднял этот вопрос в переписке с другим математиком, Пьером де Ферма, что и положило начало области исследований, названной теорией вероятностей. Поэтому, когда вас в следующий раз посетит мысль о том, что математику придумали чопорные старики в длинных париках, вспомните, что целая отрасль этой науки была создана фактически по той причине, что одному богатому вельможе хотелось получать больше удовольствия от игры.
До сих пор в этой книге мы практически всегда имели дело исключительно с детерминированными механизмами. Эти механизмы не содержат в себе элемента случайности, то есть при одних и тех же входных данных они всегда дают один и тот же результат. Игра Pac-Man является детерминированной, именно поэтому в ней можно добиться идеального результата, просто запомнив необходимую последовательность действий. Однако многие игры имеют недетерминированные аспекты. Выполнение одних и тех же действий в них может давать разный результат. В сиквеле Pac-Man, игре Ms. Pac-Man, движение призраков уже содержало некоторый элемент случайности. Поэтому одни и те же последовательности действий не давали каждый раз один и тот же результат, и игроку приходилось использовать новые паттерны, которые не всегда можно было запомнить. Нам, как геймдизайнерам, важно понимать природу случайности, ведь системы, которые мы создаем, чтобы обеспечить необходимый игровой опыт, могут включать в себя как детерминированные, так и недетерминированные механизмы, и нужно знать, как они работают.
К сожалению, многие аспекты теории вероятностей носят парадоксальный, противоречащий логике характер, о чем будет рассказано подробнее в главе 20. При решении связанной с вероятностью задачи легко можно прийти, казалось бы, к верному, но на деле совершенно ошибочному выводу. Существует несколько способов проверки используемых чисел с целью избежать самых грубых ошибок в этом плане (их мы рассмотрим далее в этой главе), но начнем с основ.
Простейшим примером использования случайности является бросание кубиков. Хотя общепринятый вариант игрального кубика — с шестью гранями, существует много других разновидностей. Так, во многих настольных играх применяются кубики с четырьмя, восемью, десятью, двенадцатью или двадцатью гранями. При желании можно найти даже кубики, имеющие тридцать или сто граней.
В играх и их разработке игральные кубики принято обозначать буквой d со следующим за ней количеством граней. То есть обычный шестигранный кубик обозначается d6, а 20-гранный — d20. В распространенном случае, когда игрок использует сумму значений, выпавших на нескольких кубиках, перед буквой d указывается количество выбрасываемых кубиков. Например, в «Монополии» и нардах игрок при совершении хода бросает два шестигранных кубика, что обозначается 2d6. Иногда к выпавшему на кубиках результату добавляется некоторое постоянное число, например, d6 + 1 с равной вероятностью может дать число в диапазоне от 2 до 7. Этот способ обозначения бросаемых кубиков впервые был применен в игре Dungeons & Dragons и, набрав популярность, стал использоваться в игровой индустрии повсеместно.
Существует много других форм генерации случайных чисел, которые выглядят не так, как бросание кубиков, но эквивалентны этому процессу и дают результат с той же степенью вероятности. Возможно, вам приходилось играть в настольную игру со спиннером, где игрок приводит его стрелку в движение пальцем, после чего она вращается по кругу и останавливается на числе в диапазоне от 1 до 6, что эквивалентно броску кубика d6. Имитировать бросок кубика d6 можно, нанеся цифры от 1 до 6 на грани обычного шестигранного карандаша и заставив его катиться по поверхности стола. Подбрасывание монеты эквивалентно бросанию кубика d2. Традиционная еврейская игрушка дрейдл (волчок с четырьмя боковыми гранями, который, покрутившись, падает на одну из них) эквивалентна кубику 1d4. В принципе, такой волчок может иметь любое количество граней. Колесо рулетки с секторами, пронумерованными от 0 до 36, эквивалентно кубику d37 (или d38 при наличии дополнительного сектора 00), хотя, конечно, изменив разметку колеса, можно сделать его равноценным кубику d50, d78 или любому другому. Ну и, конечно, компьютер может сымитировать выбрасывание кубика dn практически с любым числом граней n (о чем мы поговорим подробнее в главе 21). Несмотря на внешние различия, все эти способы эквивалентны с точки зрения игрового баланса — все они с равной вероятностью дают результат в диапазоне от 1 до n. Поэтому под бросанием кубиков далее будут подразумеваться и все прочие способы, то есть кубики будут лишь условным обозначением генератора случайных чисел, выдающего с равной вероятностью целые числа в диапазоне от 1 до некоторого большего числа.
Игральные кубики обладают рядом достойных упоминания свойств. Прежде всего следует иметь в виду, что у «честного» кубика может с равной вероятностью выпасть любая из граней. Чтобы определить средний результат выбрасывания конкретного кубика, то есть так называемое ожидаемое значение броска, нужно сложить значения всех граней и разделить сумму на общее их количество. Для обычного кубика d6 получается (1 + 2 + 3 + 4 + 5 + 6) / 6 = 3,5.
Этот метод может быть полезен при использовании какой-либо особой разновидности кубиков. Допустим, мы применяем кубик d6, у которого на три грани нанесена цифра 1, на две грани — цифра 2 и на одну грань — цифра 3, в результате чего он ведет себя как «неправильный» кубик d3, у которого единица выпадает чаще, чем двойка, а двойка — чаще, чем тройка. Средний результат броска такого кубика составляет (1 + 1 + 1 + 2 + 2 + 3) / 6 = 5 / 3 ≈ 1,66. Если игрок должен бросать три таких кубика и суммировать полученные значения, то вы можете сбалансировать игру, считая, что сумма в среднем равна 5.
Еще одно важное свойство игральных кубиков, фактически их отличительная черта, заключается в том, что результат каждого отдельного броска является независимым, то есть на него не влияют какие-либо прошлые или будущие события. Так, для обычного кубика d6 вероятность выпадения числа 4 равна 1/6. При продолжительном бросании одного кубика некоторые цифры могут выпадать по несколько раз подряд (например, можно несколько раз подряд получить четверку), но если при выбрасывании 1d6 четверка выпадает три раза подряд, то вероятность выпадения четверки при следующем броске по-прежнему равна 1/6. Вероятность этого результата не увеличивается из-за того, что пришла полоса четверок и цифра 4 стала более «везучей», и не уменьшается из-за того, что после выпадения нескольких четверок уже пора бы выпасть чему-то другому. У кубиков нет мозгов, и они ни о чем не думают. Результат их броска зависит только от случайности или, если вам так больше нравится, от законов физики.
Прежде чем мы погрузимся в математические тонкости, будет нелишним уточнить смысл некоторых понятий. Хотя в повседневной жизни слова «шансы», «ставки» и «вероятность» часто употребляются как синонимы, в математике (и игровом дизайне) они имеют разный смысл.
Вероятность — это число от 0 до 1, которое может быть представлено как обычная или десятичная дробь либо в виде процентов и которое указывает, насколько вероятным является определенное событие. Нулевая вероятность означает, что событие не произойдет никогда, а вероятность, равная единице, — что событие произойдет в любом случае. Вероятность выпадения числа 1 на кубике d4 может быть выражена как 0,25, 1/4 или 25 %. Заметьте, что, как бы мы ее ни обозначали, вероятность всегда является числом от 0 до 1. Если при вычислении вероятности вы когда-нибудь получите отрицательный результат или результат, превышающий 1, это будет означать, что в ходе математических расчетов допущена ошибка.
Хотя под словом «ставка» часто подразумевают то же самое, что и под словом «вероятность», на самом деле это немного разные вещи. Ставка на то, что произойдет определенное событие, — это соотношение двух чисел, первое из которых указывает, сколько раз произойдет событие, а второе — сколько раз оно не будет происходить, из общего количества случаев, равного сумме этих двух чисел. Так, ставка на выпадение числа 1 на кубике d4 составляет 1:3, то есть на каждый случай выпадения этого числа приходятся три случая его невыпадения. Иногда вместо двоеточия ставится предлог: 1 к 3.
Поскольку числа ставок часто сложны для понимания, они обычно не используются при обсуждении случайности. Числа вероятностей понять проще. Наиболее широко ставки применяются в азартных играх для выражения размера выплаты, то есть количества денег, получаемых игроком в случае выигрыша. Например, в блек-джеке обычный выигрыш в розыгрыше руки оплачивается по ставке 1:1, то есть, поставив на кон определенную сумму и выиграв, игрок сохранит за собой эти деньги и получит еще столько же от казино. Выигрыш с набором 21 очка оплачивается по ставке 3:2; то есть, поставив на кон 2 доллара, игрок сохранит их за собой и дополнительно получит 3 доллара (возможно, теперь вы понимаете, почему данная система может быть не очень понятной для тех, кто с ней незнаком).
Именно в силу неочевидности смысла ставок они и используются в казино, чтобы условия игры казались игрокам более честными по сравнению с реальным положением дел.
Слово «шансы» носит качественный, а не количественный характер, употребляя его в повседневной жизни, мы не используем какие-либо расчеты или цифры. Шансы всегда относительны: у вас могут быть более высокие или более низкие шансы того, что произойдет определенное событие. Если вам нужно лишь примерно указать, насколько вероятно определенное событие, не применяя при этом цифры, используйте слово «шансы». Если же требуется точно указать степень вероятности события, используйте слово «вероятность» или «ставка».
Как уже упоминалось, при бросании «честного» кубика каждый из возможных результатов равновероятен. Если у кубика n граней, то вероятность выпадения каждой из них равна 1/n. Это вполне очевидно. Но как следует подходить к решению более сложных задач? В более сложном случае обычно нужно произвести определенные расчеты.
Сначала подсчитайте количество возможных результатов, удовлетворяющих нужному вам условию. Затем подсчитайте общее количество возможных результатов, включая и те, которые удовлетворяют условию, и те, которые ему не удовлетворяют. Разделив первое число на второе, вы определите, с какой вероятностью нужное условие будет происходить при каждом выбрасывании кубика. Допустим, игрок случайным образом выбирает один из путей в лабиринте, при этом три пути позволяют успешно выбраться наружу, а 20 путей ведут в тупик. В таком случае вероятность успешного выхода из лабиринта составляет 3 из 23, или приблизительно 13 %.
Однако, вводя ограничения в процесс бросания кубиков, мы делаем его сложнее. Далее рассмотрим некоторые примеры таких усложнений.
Какова вероятность выпадения тройки и меньших чисел для кубика d8? Мы имеем здесь три нужных результата — выпадение 1, 2 или 3. Общее количество возможных результатов бросания кубика d8 равно восьми. Таким образом, искомая вероятность составляет 3/8, или 0,375, или 37,5 %.
Вот чуть более сложный пример. Какова вероятность получения четного результата при бросании 2d6? Общее количество возможных результатов здесь равно 36: оба кубика дают по шесть результатов, а поскольку они не зависят друг от друга, мы должны умножить шесть результатов одного кубика на шесть результатов другого, что в итоге даст 36 возможных комбинаций граней двух кубиков. Теперь нужно подсчитать количество четных результатов и разделить это число на 36 (общее количество результатов). Однако сделать это не так просто, поскольку вы легко можете дважды посчитать один и тот же результат или не посчитать несколько одинаковых результатов. Например, здесь три комбинации дают в результате 4 (четное число): 2 на обоих кубиках, 1 на первом кубике и 3 на втором, 3 на первом кубике и 1 на втором. Применительно к вычислению вероятности две последние комбинации являются разными (если вам так будет проще, можете думать, что бросаете кубики разного цвета, например красный и синий). Выписав все возможные способы получения четного результата, можем подсчитать их вручную (рис. 17.1).

Рис. 17.1
Как можно увидеть из этой таблицы, при бросании 2d6 существует 18 разных способов получения четного результата из 36 возможных вариантов, поэтому вероятность получения четного результата здесь составляет 18 / 36 = 1 / 2 = 0,5 = 50 %. Вероятность получения нечетного результата составляет здесь те же 50 %. У многих людей получение этого ответа вызывает определенные затруднения.
А что, если количество возможных вариантов слишком велико для того, чтобы его можно было подсчитать вручную? Например, вам нужно определить вероятность получения результата, большего или равного 15, при бросании 8d6. Поскольку пространство возможностей здесь содержит очень много отдельных вариантов, их ручной подсчет займет слишком много времени. Даже если нам удастся каким-то образом сгруппировать наборы одинаковых комбинаций, на это все равно потребуется много времени.
В таком случае возможны два подхода, один из которых сводится к тому, чтобы написать код. Вы можете создать цикл, внутри которого будет вычисляться результат каждой отдельной комбинации и подсчитываться их общее количество, а также количество результатов, больше или равных 15. Однако для этого нужно хотя бы немного знать программирование.
Второй подход заключается в том, чтобы сделать все это в электронной таблице. Если вам достаточно получить приблизительный ответ, сгенерируйте варианты выбрасывания кубика d6 с помощью функции для генерации случайных целых, например используя выражение =FLOOR(RAND()*6,1)+1 или =RANDBETWEEN(1,6). Разместите в строке восемь ячеек с этим выражением и продублируйте ее несколько тысяч раз с помощью функции автозаполнения, после чего подсчитайте количество результатов, больше или равных 15. Такой подход дает хотя и не абсолютно точный, но обычно довольно точный ответ. Когда вы, не зная определенного ответа, просто пытаетесь получить его много раз из расчета на то, что полученный средний результат будет близок к искомому ответу, вы, по сути, используете метод Монте-Карло (назван так потому, что Монте-Карло славится своими игорными заведениями). В этой книге будет еще немало примеров практического применения метода Монте-Карло.
Предыдущий пример с получением результата, больше или равного 15, при бросании 8d6 является примером зависимого бросания кубиков. Поскольку здесь важна общая сумма выпавших значений, значение каждого кубика влияет на то, какую общую сумму должны набрать другие кубики для получения успешного результата. Так, выпадение на одном из кубиков большого значения повышает шансы на успех при бросании последующих кубиков. Кроме того, эту задачу нельзя разбить на восемь независимых бросков.
Но что, если у вас будет несколько следующих друг за другом независимых бросков, где результат одного броска не влияет на другие? Примером такой ситуации может быть игра в кости, где игрок может выбрасывать 1d6 до пяти раз подряд. Для продолжения игры результат первого броска должен быть не меньше 2. Результат второго броска должен быть не меньше 3, третьего — не меньше 4, четвертого — не меньше 5, и результат последнего, пятого броска должен быть равен 6. Какова вероятность того, что игрок получит успешный результат при выполнении каждого из пяти бросков этой серии? В таких случаях можно использовать еще один способ упрощения задачи. В данном случае броски выполняются независимо друг от друга. Хотя неудачное выполнение одного броска сказывается на общем результате игры, вероятность успеха при выполнении каждого отдельного броска не зависит от того, насколько успешно были выполнены другие. Так, если игрок получит большое значение при втором броске, вероятность успешного выполнения последующих бросков не станет из-за этого ни больше, ни меньше. На самом деле, если бы мы поменяли порядок выполнения бросков, то это никак не сказалось бы на общем результате игры. Таким образом, можно считать, что вероятности всех пяти бросков не зависят друг от друга.
Если у вас есть вероятности нескольких отдельных независимых событий и вам нужно определить общую вероятность того, что все они произойдут, вы должны перемножить все эти вероятности друг на друга. В данном случае вероятность успешного выполнения первого броска (получение не менее 2 при выбрасывании 1d6) составляет 5/6. Для второго броска вероятность успеха составляет 4/6, для третьего — 3/6, для четвертого — 2/6 и для пятого — 1/6. Перемножив эти числа, получим 120/7776, или около 1,54 %. Как видите, вероятность того, что игрок успешно выполнит все пять бросков, очень низка.
Что интересно, в тех случаях, когда вычисление вероятности успеха вызывает затруднения, зачастую гораздо проще вычислить вероятность неудачи.
Вот пример: какова вероятность того, что при выбрасывании 4d4 хотя бы на одном кубике выпадет число 4?
Здесь нужно произвести довольно много вычислений. Прежде всего мы можем получить одну четверку (на остальных кубиках — числа от 1 до 3), и эта единственная четверка может выпасть на четырех разных кубиках. Мы можем получить 2, 3 или 4 четверки, и каждая из этих комбинаций требует отдельных расчетов. Они очень быстро становятся слишком сложными для того, чтобы их можно было выполнить вручную.
Однако на эту задачу можно взглянуть и по-другому: игрок терпит неудачу в том случае, если четверка не выпадает ни на одном из кубиков. Здесь мы имеем четыре независимых броска с вероятностью 3/4 (для каждого кубика неудачей будет выпадение любого другого числа, кроме 4). Вероятность того, что неудачный результат дадут все четыре кубика, составляет 3/4 × 3/4 × 3/4 × 3/4 (здесь мы опять же определяем общую вероятность нескольких независимых событий, поэтому умножаем друг на друга отдельные вероятности), что в итоге дает 81/256, или ~31,6 %. Таким образом, вероятность неудачи здесь составляет чуть меньше 1/3.
Чтобы определить вероятность того, что определенное событие не произойдет, необходимо вычесть его вероятность из 1. В данном примере мы выигрываем, если не терпим неудачу, то есть во всех остальных случаях, доля которых составляет 175/256 (или ~68,3 %), должна выпадать хотя бы одна четверка.
Распространенная ошибка в работе с независимыми вероятностями — сложить их вместо того, чтобы перемножать. Чтобы понять, почему здесь нельзя использовать сложение, подумайте о том, чему будет равна вероятность выпадения двух орлов при бросании двух монет. Вероятность выпадения орла для каждой монеты в отдельности составляет 1/2 (50 %), но вероятность того, что орел выпадет на обеих монетах, очевидно не равна 100 %. Мы должны перемножить вероятности: 1/2 × 1/2 = 1/4 (25 %).
Таким же образом не будет равна 100 % и вероятность выпадения хотя бы одного орла. В этом случае можно воспользоваться отрицанием. Руководствуясь той же логикой, что и в случае выпадения двух орлов, можно определить, что вероятность того, что орел не выпадет ни на одной из монет (то есть на обеих монетах выпадет решка), составляет 25 %, а значит, вероятность любого другого результата (с выпадением хотя бы одного орла) составляет 100 – 25 = 75 %.
Но требуется ли хотя бы иногда складывать отдельные вероятности? Да, но только в одном конкретном случае: когда нужно определить вероятность того, что при попытке выполнения нескольких независимых и непересекающихся событий произойдет хотя бы одно из них. Например, чтобы получить вероятность выпадения числа 2 или 3 при бросании кубика d4, можно сложить вероятность выпадения числа 2 и вероятность выпадения числа 3. Выпадение числа 2 и числа 3 — это непересекающиеся события (бросив кубик, невозможно одновременно получить и число 2, и число 3), поэтому вероятность выпадения любого из них равна сумме вероятностей выпадения каждого в отдельности. Однако здесь следует быть осторожными: например, вероятность выпадения числа от 1 до 5 и/или нечетного числа при бросании кубика d10 не равна 100 %, несмотря на то что вероятность и первого, и второго события равна 50 %, потому что иногда эти события происходят одновременно, в случае чего их не следует учитывать дважды. Вы можете сложить друг с другом отдельные вероятности, но, поскольку при этом дважды учитывается пересекающаяся область (выпадение числа, которое и является нечетным, и находится в диапазоне от 1 до 5), здесь следует пойти еще дальше. Определите вероятность пересекающейся области (в данном случае 30 %) и вычтите ее из суммы отдельных вероятностей, чтобы каждое из событий учитывалось только один раз. Это даст вам правильный результат: хотя бы одно из этих событий происходит с вероятностью 70 %.
Сумма вероятностей всех возможных (непересекающихся) результатов всегда должна равняться единице (или 100 %), потому что у вас всегда должен быть какой-то результат. Неравенство этой суммы единице будет признаком того, что в ходе расчетов была допущена ошибка.
До сих пор мы предполагали, что каждая грань кубика выпадает одинаково часто, поскольку именно так обычно ведет себя кубик. Однако в некоторых случаях вероятность каждого возможного исхода может быть разной. Так, например, часто бывает в настольных играх со спиннером, когда некоторые его сегменты шире других и, соответственно, выпадают чаще. Еще одним примером может быть уже упоминавшийся нестандартный кубик d6 с цифрами 1, 1, 1, 2, 2 и 3, который ведет себя как кубик d3 с разным весом сторон. Так как же следует работать с такими вероятностями?
Если вы помните, для того чтобы вычислить средний результат броска стандартного кубика d6, мы сложили числа на каждой из шести граней и разделили полученную сумму на количество граней, то есть на 6. Однако здесь можно использовать и другой подход. Мы можем умножить каждый отдельный результат на соответствующую вероятность, а затем сложить результаты умножения:
• вероятность выпадения числа 1 равна 1/6 (1 × 1/6 = 1/6);
• вероятность выпадения числа 2 равна 1/6 (2 × 1/6 = 2/6);
• вероятность выпадения числа 3 равна 1/6 (3 × 1/6 = 3/6);
• вероятность выпадения числа 4 равна 1/6 (4 × 1/6 = 4/6);
• вероятность выпадения числа 5 равна 1/6 (5 × 1/6 = 5/6);
• вероятность выпадения числа 6 равна 1/6 (6 × 1/6 = 6/6);
• складываем все вместе: 1/6 + 2/6 + 3/6 + 4/6 + 5/6 + 6/6 = 21/6 = 3,5.
Умножая таким образом численный результат на соответствующую вероятность, мы получаем так называемое ожидаемое значение. Для кубика d6 ожидаемое значение равно 3,5. Если вам кажется, что это слишком сложный способ нахождения среднего результата для кубика d6, то это действительно так. Однако в некоторых случаях такой подход не только полезен, но и необходим.
Рассмотрим следующий спиннер (рис. 17.2).

Рис. 17.2
Чему будет равно ожидаемое значение в каждой отдельной попытке? Используя линейку и транспортир, вы можете определить, что угол каждого из пяти больших сегментов составляет 60°, или 1/6 часть от всего круга в 360°. Соответственно, вероятность выпадения каждого из больших сегментов составляет 1/6. Размер каждого из пяти мелких сегментов составляет 12°, и вероятность выпадения каждого из них равна 12/360 = 1/30. (Для простоты мы игнорируем неоднозначные случаи, когда стрелка останавливается на линии и приходится делать повторную попытку.)
Теперь умножим каждый результат на соответствующую вероятность и сложим результаты умножения:
• выпадение +1 с вероятностью 1/6 = 1/6;
• выпадение +2 с вероятностью 1/6 = 2/6;
• выпадение +3 с вероятностью 1/6 = 3/6;
• выпадение +4 с вероятностью 1/6 = 4/6;
• выпадение +5 с вероятностью 1/6 = 5/6;
• выпадение 0 с вероятностью 1/30 = 0;
• выпадение –5 с вероятностью 1/30 = –1/6;
• выпадение –10 с вероятностью 1/30 = –2/6;
• выпадение +10 с вероятностью 1/30 = 2/6;
• выпадение +20 с вероятностью 1/30 = 4/6;
• складываем все вместе: 1/6 + 2/6 + 3/6 + 4/6 + 5/6 + 0 – 1/6 – 2/6 + 2/6 + + 4/6 = 18/6 = 3.
Таким образом, в рамках большого количества попыток ожидаемое значение в отдельной попытке будет равно 3.
Данный подход работает и в том случае, когда равновероятным результатам придается разный вес, например, когда игрок получает необычно большой выигрыш — джекпот. Так, в настольной игре Lords of Vegas («Лас-Вегас») один из возможных вариантов действий состоит в том, чтобы сделать ставку, которая обычно используется, когда игроку остается накопить совсем немного денег для совершения крупной покупки и он может рискнуть небольшой суммой в надежде получить достаточное количество денег. Чтобы разыграть эту ставку, игрок должен просто выбросить 2d6. Если результат броска оказывается в диапазоне от 5 до 8, он теряет поставленную сумму. Почти во всех остальных случаях он получает выигрыш в соотношении 1:1, то есть сохраняет за собой поставленную сумму и получает еще столько же в качестве выигрыша. Однако в тех редких случаях, когда результат равен 2 или 12, выигрыш будет в соотношении 2:1, то есть игрок сохраняет за собой поставленную сумму и получает еще две такие же суммы. При этом возникают два вопроса. Во-первых, какова общая вероятность того, что игрок выиграет что-либо, сделав эту ставку? Во-вторых, чему равно ожидаемое значение в одном розыгрыше этой ставки? От ответов на эти вопросы зависит, будут ли игроки стремиться сделать эту ставку (рис. 17.3).

Рис. 17.3
Здесь мы опять же должны определить вероятность каждого результата и умножить ее на этот результат. Получить 2 при выбрасывании 2d6 можно только одним способом, 3 — двумя способами, а 4 — тремя.
В случае больших значений получить 12 можно только одним способом, 11 — двумя способами, 10 — тремя, а 9 — четырьмя. Таким образом, выигрыш здесь обеспечивают 16 результатов броска из 36 возможных. Соответственно, вероятность выигрыша составляет 16/36 (чуть меньше половины), а значит, игрок находится в менее выгодном положении. В то же время два результата броска обеспечивают двойной выигрыш. Если игрок сделает эту ставку 36 раз, каждый раз ставя на кон 1 доллар, и получит по одному разу каждый из возможных результатов, то его общий выигрыш составит 18 долларов (16 долларов за каждый из выигрышных бросков плюс еще по 1 доллару за броски с результатом 2 и 12). Если, разыграв ставку 36 раз, игрок может получить 18 долларов, значит, шансы на выигрыш и проигрыш равны, верно?
Прежде чем делать такой вывод, посмотрим, сколько раз при этом игрок проигрывает. Вероятность проигрыша составляет 20/36 (подсчитайте способы получения результата в диапазоне 5–8 или вычтите из единицы уже известную вероятность выигрыша 16/36). Это означает, что, 36 раз разыграв ставку 1 доллар, игрок проиграет 20 раз и в итоге потеряет 20 долларов. То есть он находится в чуть менее выгодном положении с ожидаемым выигрышем 18 долларов и ожидаемым проигрышем 20 долларов, то есть с общими потерями 2 доллара при выполнении 36 бросков. Таким образом, можно ожидать, что за один бросок игрок будет терять 1/18 доллара (чуть больше 5 центов) с каждого поставленного на кон доллара.
К этому выводу также можно прийти, исходя из того, что ставка 1 доллар может дать три разных результата — игрок может:
• проиграть ставку (–1 доллар) с вероятностью 20/36;
• выиграть ставку (+1 доллар) с вероятностью 14/36;
• получить двойной выигрыш (+2 доллара) с вероятностью 2/36.
Для надежности проверим: 20/36 + 14/36 + 2/36 действительно равняется 36/36 = 1, а значит, можно быть уверенными в том, что это все возможные непересекающиеся результаты.
Умножив каждый результат на соответствующую вероятность и сложив все вместе, получим: (–1 × 20/36) + (1 × 14/36) + (2 × 2/36) = –2/36, или –1/18.
Таким образом, игрокам не стоит делать эту ставку регулярно, лучше прибегать к ней, лишь когда потенциальная выгода перевешивает возможные потери.
Как видите, вероятности вычисляются довольно просто, но если при этом не проявлять осторожности, можно легко допустить ошибку. При возникновении каких-либо сомнений часто бывает полезно в дополнение к точным расчетам вероятности применить метод Монте-Карло и убедиться в том, что он дает примерно такой же результат. Если расчеты и симуляция дадут примерно одинаковый результат, это позволит вам быть более уверенными в правильности своих расчетов. Противное будет говорить о наличии ошибки либо в расчетах, либо в симуляции, поэтому нужно будет внимательно проверить и то и другое.
В рассмотренных случаях получаемые результаты не зависят от того, в каком порядке вы бросаете кубик. Если нужно определить вероятность того, что при 2d6 общий результат будет равен 6, не имеет значения, какая комбинация обеспечит его: 1 и 5, 2 и 4 или 4 и 2, и мы можем легко подсчитать количество таких комбинаций. Однако, поскольку иногда ручной подсчет количества возможных комбинаций требует значительных усилий, было бы неплохо иметь формулу, позволяющую определять это количество путем математических расчетов.
В качестве примера рассмотрим такую разновидность игры в кости, как «Фаркл». В ней игрок начинает свой ход с броска 6d6. Если ему удается выбросить комбинацию из всех шести цифр (1–2–3–4–5–6), он получает большое количество бонусных очков. Какова вероятность получения этого результата при выполнении первого броска? Как и любую другую, эту вероятность можно определить, подсчитав количество способов получения комбинации из всех шести цифр и разделив его на общее количество возможных результатов броска. Однако существует много способов получения комбинации из всех шести цифр, как же их можно посчитать?
Один из возможных подходов выглядит следующим образом.
• На одном и только одном кубике должна выпасть цифра 1. Сколько способов получения этого результата существует? Шесть, потому что здесь шесть кубиков и единица может выпасть на любом из них.
• На одном из оставшихся пяти кубиков должна выпасть цифра 2. Существует пять способов получения этого результата.
• Продолжаем таким же образом дальше. На одном из оставшихся четырех кубиков должна выпасть цифра 3, и существует четыре способа получения этого результата.
• Имеется три способа получения цифры 4 на одном из оставшихся трех кубиков.
• Существует два способа получения цифры 5 на одном из оставшихся двух кубиков.
• После этого остается только один кубик, на котором должна выпасть цифра 6.
Сколько всего различных комбинаций может выпасть при броске 6d6 при любом сочетании цифр? Поскольку у каждого кубика шесть граней, мы должны перемножить шесть шестерок: 6 × 6 × 6 × 6 × 6 × 6 = 46 656 — довольно большое количество вариантов. Как при этом можно определить количество способов получения комбинации 1–2–3–4–5–6 при броске 6d6? Для этого тоже нужно перемножить ряд чисел, но это будут другие числа, поскольку здесь мы ограничены в том, какие цифры могут выпадать на тех или иных кубиках: 6 × 5 × 4 × 3 × 2 × 1 = 720. Чтобы получить нужную вероятность, мы должны разделить количество успешных вариантов на общий объем пространства возможностей: 720/46 656, что составляет ~1,5 %.
Этот пример интересен с нескольких точек зрения, но особенно важно здесь отметить то, насколько редко выбрасывание кубика соответствует равномерному распределению (когда все варианты выпадают с одинаковой частотой) в краткосрочной перспективе! Конечно, если вы бросите 6000d6, то каждое из чисел от 1 до 6 выпадет примерно с одинаковой частотой. Но при бросании только шести кубиков получить по одному разу все эти шесть чисел удается очень и очень редко. Именно поэтому в игре «Фаркл» за комбинацию 1–2–3–4–5–6 выдается очень большой бонус.
Как уже упоминалось в этой главе, суть независимости в случае вероятностей сводится к тому, что кубики как бы не имеют памяти и результат одного броска никак не влияет на все последующие. Мы только что видели, что при бросании кубиков с ожидаемым равномерным распределением результатов в краткосрочной перспективе обычно получается неравномерное распределение результатов. В рамках небольшой серии бросков кубика (монеты и т.д.) можно предполагать наличие некоторой неравномерности с полосами удач и неудач.
Однако если мы бросим кубики очень много раз, сделав тысячи или миллионы попыток, то полученный средний результат будет очень близок к ожидаемому значению. Но постойте, ведь мы же только что сказали, что кубики не имеют памяти! А теперь говорим, что при большом количестве попыток результат бросания кубиков будет стремиться к ожидаемому среднему значению? Как это следует понимать?
Допустим, игрок, располагающий большим количеством свободного времени, решил бросить 1d12 10 000 раз и после нескольких тысяч бросков у него пять раз подряд выпала цифра 2. Эта полоса никоим образом не заставляет кубик в дальнейшем выдавать остальные 11 результатов более часто, чтобы общий результат был в итоге равен среднему значению. Просто, когда количество попыток измеряется тысячами, эта небольшая полоса почти не влияет на общий результат. Если в какой-то момент выпадет несколько двоек, то столь же вероятно, что в другое время несколько раз подряд выпадет другая цифра. Полосы одинаковых результатов никак не влияют на последующие броски — при довольно большой серии бросков эти небольшие полосы тонут в огромном океане данных.
Как показывает практика, при достаточно большом количестве попыток в том или ином месте серии могут выпадать даже, казалось бы, маловероятные полосы значений. При выбрасывании 1d12 одна из цифр вполне может выпасть пять раз подряд, если вы выполните 10 000 попыток. Это часто становится серьезным источником головной боли для разработчиков игр.
Например, почти любой программист или геймдизайнер, которому приходилось работать над онлайн-игрой, использующей генератор случайных чисел, сталкивался со следующей ситуацией: на форуме игры один из игроков заявляет, что у него не работает генератор случайных чисел, доказывая это тем, что, убив подряд четырех монстров, он четыре раза подряд получил одну и ту же добычу, а как ему известно из посвященных игре вики-страниц, вероятность ее получения составляет только 10 %, поэтому такое просто не должно происходить. Но раз это произошло, значит, что-то не так с таблицами добычи.
После этого разработчик проводит расчеты. Вероятность получения упомянутого вида добычи действительно равна 1/10, поэтому вероятность получения его четыре раза подряд составляет 1/10 × 1/10 × 1/10 × 1/10 = 1/10 000. То есть это должно происходить довольно редко, как и указывает игрок. Требуется ли как-то исправлять эту ситуацию?
Возможно, да, возможно, нет. Сколько игроков играет в эту игру? Допустим, речь идет о довольно популярной онлайн-игре, в которую ежедневно играют 100 000 человек. Какую часть от их количества составляют игроки, способные убить четырех монстров подряд? Конечно, возможно, что все игроки делают это по несколько раз за день, но давайте допустим, что половина геймеров постоянно ведет торговлю в аукционном доме, сидит в чате или занимается ролевыми играми в городе, а значит, охотиться на монстров может только другая половина. Таким образом, количество попыток составляет 50 000 и полосы из четырех одинаковых видов добычи будут случаться в среднем только пять раз в день!
Важные практические примеры
Случайность против стабильности
В ходе чтения лекции «Волатильность в игровом дизайне» на фестивале Gen Con 2012 (см. раздел «Дополнительные ресурсы» в конце этой главы) геймдизайнер Джеймс Эрнест (James Ernest) создал простенькую игру Kill the Elf («Убить эльфа») с целью демонстрации принципов работы с вероятностями. В ней два игрока соревнуются друг с другом в том, кто из них первым нанесет шесть очков урона упомянутому в названии эльфу, хотя они с тем же успехом могли бы наносить урон друг другу или состязаться друг с другом в беге. Воин действует стабильно и надежно, нанося за каждый ход 1 очко урона. Волшебник действует мощно, но хаотично: бросая 1d6, он не наносит никакого урона при выпадении цифр от 1 до 5 и наносит 6 очков урона при выпадении шестерки. Кто из них выиграет?
У обоих персонажей одинаковое ожидаемое значение — 1 очко урона за каждый ход. По идее, это должно означать, что оба персонажа имеют равные шансы на успех, но на самом деле это не так в силу описанных ранее различий между результатами бросания кубиков в кратко- и долгосрочной перспективе. Данную ситуацию можно представить следующим образом: волшебник может выиграть, выбросив хотя бы одну шестерку в первых пяти бросках, и сыграть вничью, выбросив шестерку в шестом броске после пяти неудачных бросков. Мы легко можем вычислить вероятность невыпадения шестерки в первых пяти бросках (~40,1 %), это означает, что волшебник выигрывает почти в 60 % случаев. А в тех случаях, когда волшебнику не удается одержать победу, еще остается вероятность 1/6, что игра закончится ничьей, поэтому воин выигрывает лишь в чуть более трети всех игр. Несмотря на то что ожидаемая величина урона у воина и волшебника одинакова, в этой игре имеется перекос в пользу волшебника.
Каким же образом можно устранить этот дисбаланс и сделать игру более справедливой? Один из способов состоит в том, чтобы уменьшить количество необходимого для победы урона с 6 до 4 очков. В таком случае у волшебника будет лишь три броска для достижения победы и один бросок для достижения ничьей. Игра станет еще более справедливой, если игрокам нужно будет наносить 10 очков урона, и обеспечит практически равные шансы на успех, если потребуется наносить 1 000 000 очков урона. Чем больше необходимый урон, тем ближе будет волшебник к ожидаемому значению.
Конные скачки
Рассмотрим простую определяемую удачей игру: каждый из двух игроков 50 раз бросает кубик d6 и суммирует выпавшие значения. Выигрывает игрок с более высоким итоговым результатом.
Допустим, в первой попытке одному из игроков удалось выбросить шестерку, а второй игрок выбросил единицу, то есть теперь они фактически выбрасывают 49d6 + 6 и 49d6 + 1 соответственно, поскольку более удачливый игрок имеет преимущество в 5 очков.
Какова вероятность победы каждого из игроков на этом этапе?
Мы не будем здесь рассчитывать все вероятности для выбрасывания 98d6, поскольку в силу больших затрат времени это лучше делать с помощью компьютера, но, как ни удивительно, вероятность победы игрока, который выбросил единицу первым броском, составляет лишь 25 %. Чем это можно объяснить? Это объясняется уже известным нам законом больших чисел. При выполнении оставшихся 49 бросков оба игрока, по всей вероятности, получат примерно одинаковый результат, поскольку любое краткосрочное преимущество будет компенсироваться потерями с течением времени. Таким образом, в этом контексте преимущество в 5 очков оказывается достаточно значительным для того, чтобы во многих случаях сыграть решающую роль.
Вывод для разработчика состоит в том, что определенное везение в начале игры, где основной упор сделан на удачу, фактически может обеспечить игроку доминирующее положение. Если вы работаете над такой игрой, подумайте о добавлении в систему определенной обратной связи, чтобы исключить вероятность возникновения ситуации, когда игрок, удачно сделавший первый ход, остается лидером на протяжении всей игры.
Свинья
Свинья — это традиционная детская игра в кости, основную роль в которой играет определяемая удачей механика. Правила игры сводятся к следующему.
• Игроки: любое количество, но не меньше двух.
• Цель: первым набрать 100 очков или другое заранее заданное количество.
• Подготовка: каждый игрок начинает игру с нулевым количеством очков. Выбирается игрок, делающий первый ход, и определяется порядок выполнения ходов остальными игроками.
• Игроки поочередно делают ходы. При совершении хода каждый из них выбрасывает 1d6. При выпадении цифры 1 игрок не получает очков и передает кубик следующему игроку. При выпадении цифр от 2 до 6 игрок может на этом остановиться, засчитав в качестве результата общее количество очков, набранных при выполнении хода, и передать кубик следующему игроку. Он также может не останавливаться на этом и выбросить кубик еще раз. Игрок может бросать кубик неограниченное количество раз, пока не решит остановиться на достигнутом результате или не выпадет цифра 1, в случае чего он потеряет весь прогресс, достигнутый при выполнении этого хода.
Какую стратегию следует использовать в игре? Если цель состоит в том, чтобы обеспечить максимальную вероятность победы, то в каких случаях игрок должен продолжать бросать кубик, а в каких — останавливаться на достигнутом?
Каждый бросок кубика дает шесть возможных результатов. При выпадении значения в диапазоне от 2 до 6 оно добавляется к общему количеству очков, набранных при выполнении данного хода. При выпадении единицы игрок не только не набирает очков, но и теряет те, которые успел набрать при выполнении данного хода (если таковые имеются). Таким образом, можно считать, что при выполнении каждого броска игрок может с вероятностью 1/6 или набрать 2, 3, 4, 5 и 6 очков, или потерять X очков, где X — общий результат данного хода. Например, в случае последовательного выпадения цифр 6, 4 и 1 можно считать, что результат выпадения цифры 1 составляет –10 очков и сводит на нет прирост, полученный ранее при выпадении цифр 6 и 4.
Теперь мы можем просто вычислить ожидаемое значение каждого отдельного броска, умножив вероятность каждого результата (1/6) на соответствующий результат: (2 + 3 + 4 + 5 + 6 – X) / 6 = (20 – X ) / 6. Таким образом, если общий результат данного хода 10 очков, то ожидаемое значение следующего броска составляет (20 – 10) / 6 = ~1,66. Таким образом, мы имеем здесь положительное ожидаемое значение и выполнение следующего броска в среднем улучшает общий результат игрока. Однако если текущий общий результат составляет 25 очков, ожидаемое значение следующего броска составляет (20 – 25) / 6 = –5/6, то есть при выполнении следующего броска игрок в среднем теряет почти целое очко, а значит, ему лучше остановиться на достигнутом в этой точке. Проанализировав полученную формулу, можно легко увидеть, что для получения максимального результата в долгосрочной перспективе игрок должен продолжать бросать кубик, когда текущий общий результат меньше или равен 19, и останавливаться, когда он больше или равен 21. Когда текущий общий результат составляет 20 очков, ожидаемое значение следующего броска равно нулю (весь потенциально получаемый небольшой прирост нивелируется небольшой вероятностью крупной потери), поэтому здесь неважно, будет игрок бросать кубик еще раз или нет, — в долгосрочной перспективе его общий счет останется неизменным.
В то же время оптимальная стратегия в этой игре не сводится просто к тому, чтобы продолжать бросать кубик до тех пор, пока не будут набраны 20 очков. Хотя такой подход вполне уместен при выполнении первого хода первым игроком, очевидно, что в некоторых случаях эта стратегия не будет оптимальной. Например, один игрок закончил выполнение своего хода с 98 очками и теперь начинает выполнение хода его соперник, имеющий 78 очков. Он выбрасывает цифры 3, 5, 3, 2, 2 и 6, что в сумме составляет 21. Если он сейчас остановится, то его общий результат составит 99 очков и соперник с общим результатом 98 очков сможет с вероятностью 5/6 выиграть при выполнении первого броска в следующем раунде. Однако если игрок бросит кубик еще раз, то он с вероятностью 5/6 выиграет уже в этом раунде. В такой ситуации игрок должен бросить кубик еще раз. (В общем случае отстающий игрок должен больше рисковать, чтобы догнать соперника, потому что простое обеспечение стабильного прироста обычно ведет к поражению, как и в рассмотренном ранее случае конных скачек с выбрасыванием 50d6. Лидирующий игрок должен меньше рисковать, стараясь стабильно и уверенно приближаться к победе, по возможности исключив вероятность возникновения у соперника полосы удач, позволяющей сократить разрыв.)
Категории редкости в коллекционных карточных играх
В одной из сетевых коллекционных карточных игр основной набор содержит 37 карт, по степени редкости относящихся к категории распространенных, 90 нераспространенных карт, 62 редкие карты и 7 очень редких карт. Бустерный пакет содержит 15 карт, в том числе 11 распространенных, 3 нераспространенные и 1 редкую карту с 25%-ной вероятностью того, что она будет не редкой, а очень редкой. Все карты, относящиеся к той или иной категории редкости, могут с равной вероятностью присутствовать в пакете, то есть все распространенные карты являются одинаково распространенными и т.д. Насколько редкой в таком случае является каждая отдельная карта? То есть, если у нас есть распространенная карта с названием «Подъем», нераспространенная карта «Уборщик», редкая карта «Голограмма» и очень редкая карта «Ядерный заряд высокой мощности», какое относительное количество каждой из них находится в обращении?
Каждый пакет содержит 11 распространенных карт, а значит, существует 11 шансов на то, что в бустерном пакете будет карта «Подъем». Однако, поскольку в целом имеется 37 распространенных карт, на эти 11 мест претендуют 37 карт. Следовательно, вероятность того, что в числе 11 карт окажется карта «Подъем», в любом заданном пакете составляет 11/37, или ~30 %, поскольку отбор карт производится независимо. Пакет содержит три нераспространенные карты, каждая из которых с вероятностью 1/90 может быть картой «Уборщик». Следовательно, доля карт «Уборщик» в каждом пакете в среднем составляет 3/90, или 1/30. В каждом пакете с вероятностью 75 % может присутствовать редкая карта (и с вероятностью 25 % редкие карты могут отсутствовать). То есть существует вероятность 75/100 наличия редкой карты, которая с вероятностью 1/62 может быть картой «Голограмма». Перемножив эти вероятности, получим, что ожидаемая доля «Голограмм» в каждом бустере составляет 3/248. И наконец, в каждом пакете с вероятностью 25 % может присутствовать очень редкая карта. То есть существует вероятность 25/100 наличия очень редкой карты, которая с вероятностью 1/7 может быть «Ядерным зарядом». Соответственно, ожидаемая доля «Ядерных зарядов» в каждом бустере составляет 1/28.
Поскольку мы здесь имеем дело с небольшими дробными величинами и нам нужно выяснить лишь относительную долю каждого вида карт, для простоты давайте умножим все эти числа на некоторое большое число, например 1000. В таком случае получим, что на каждую 1000 бустерных пакетов в среднем приходится 297,29 карты «Подъем», 33,33 — «Уборщик», 12,09 — «Голограмма» и 35,71 — «Ядерный заряд».
Что же это означает? Это означает, что так называемые очень редкие карты на самом деле не такие уж редкие — на каждую находящуюся в обращении редкую карту приходится около трех очень редких карт. Более того, относительное количество любой очень редкой карты даже больше, чем относительное количество любой нераспространенной карты. Хотя доля очень редких карт в бустерном пакете меньше, чем доля карт любого другого типа, они имеют и гораздо меньше разновидностей, поэтому при включении в пакет очень редкой карты имеется сравнительно небольшое количество вариантов.
Из этого примера можно сделать следующий вывод: когда вы имеете дело с вероятностями нескольких независимых событий (в данном случае с вероятностью наличия очень редкой карты в бустерном пакете и того, что это будет конкретная разновидность очень редкой карты), всегда помните о том, что эти вероятности перемножаются. Если в вашей игре используется несколько категорий редкости карт, внутриигровых событий, видов добычи и тому подобного со случайным выбором элемента в пределах категории редкости, с особой тщательностью убедитесь в том, что более редкие вещи действительно являются более редкими.
• Вероятность конкретного события определяется численно как количество способов получения этого события, разделенное на количество всех возможных способов. Вероятность всегда находится в диапазоне от 0 (количество способов получения события равно нулю, то есть оно никогда не происходит) до 1 (количество способов получения события равно количеству всех возможных способов, то есть оно происходит всегда).
• Вероятность выпадения конкретного результата при бросании 1dn составляет 1/n. Пример: вероятность выпадения цифры 2 при бросании восьмигранного кубика составляет 1/8.
• Если у нас есть два возможных результата, A и B, которые не пересекаются друг с другом, то есть не могут быть получены одновременно, то для определения вероятности (результата A или B) нужно сложить вероятность результата A и вероятность результата B. Пример: вероятность выпадения цифры 2 или 3 при выбрасывании восьмигранного кубика составляет 1/8 + 1/8 = 2/8.
• Если у нас есть два возможных результата, A и B, которые пересекаются друг с другом (то есть могут быть получены не только по отдельности, но и одновременно), то для определения вероятности результата A или B нужно сложить вероятность результата A и вероятность результата B и вычесть вероятность одновременного получения этих результатов. Пример: вероятность того, что при бросании восьмигранного кубика результат будет меньше 4 и/или будет нечетным, составляет 3/8 + 4/8 – 2/8 = 5/8.
• Если у нас есть два совершенно независимых события, происходящих с разной степенью вероятности, то для определения вероятности того, что произойдут оба эти события, нужно умножить вероятность первого события на вероятность второго. Пример: вероятность того, что при бросании восьмигранного кубика два раза подряд выпадет цифра 2, составляет 1/8 × 1/8 = 1/64.
• Чтобы определить вероятность того, что определенное событие не произойдет, нужно из единицы вычесть вероятность этого события. Пример: вероятность невыпадения цифры 2 при бросании восьмигранного кубика составляет 1 – 1/8 = 7/8.
• Когда результаты бросания кубика имеют числовые значения, можно вычислить ожидаемое (то есть среднее) значение броска, умножив каждый результат на соответствующую вероятность и сложив вместе полученные результаты. Пример: при бросании четырехгранного кубика, на грани которого нанесены цифры 2, 3, 5 и 7, ожидаемое значение составит (2 × 1/4) + (3 × 1/4) + (5 × × 1/4) + (7 × 1/4) = 17/4. Если вместо этого мы будем использовать кубик с утяжелителем, у которого грань с цифрой 7 выпадает в два раза чаще, чем все другие, ожидаемое значение составит (2 × 1/5) + (3 × 1/5) + (5 × 1/5) + + (7 × 2/5) = 24/5.
• При бросании большого количества кубиков или выполнении большого количества попыток периодически могут выпадать маловероятные наборы одинаковых значений, но в целом результаты будут очень близки к тому, что предсказала вероятность. Чем больше количество кубиков или попыток, тем более выраженным окажется этот эффект.
Джеймс Эрнест (James Ernest), «Волатильность в игровом дизайне», выступление на фестивале Gen Con 2012. Полный текст доступен по адресу https://www.crabfragmentlabs.com/s/Volatility-in-Game-Design.pdf.
1. Вероятности — довольно сложная тема. При рассмотрении данной главы в учебной аудитории или в рамках группы чтения литературы, посвященной игровому дизайну, попросите студентов сказать, что по-прежнему вызывает у них затруднения, и обсудите все эти моменты.
2. Как мы выяснили, определенное везение в начале игры, делающей основной упор на удачу, может обеспечить игроку существенный перевес над противником. Можете ли вы вспомнить игру, в которой удача на первых этапах игры создает заметный дисбаланс?
3. В чем состоит разница между вероятностью и ставками?
4. Выберите для рассмотрения любую игру, в которую могут одновременно играть миллионы игроков, и обсудите, как в ней проявляется закон больших чисел и как он может влиять не ее результат.
5. Что представляет собой метод Монте-Карло?
6. Рассматривая вероятность исключительно с точки зрения игрового опыта, обсудите тот момент игры, когда вы получили невероятно хорошую добычу или добились невероятного успеха. Вспомните о том, какой эффект это произвело на вас, как на игрока и, если это к вам применимо, как на члена сообщества игроков (как при получении отличной добычи в игре World of Warcraft). Как вы поняли, что такое происходит очень редко?
7. В чем состоит разница между детерминированным и недетерминированным событиями?
8. В чем состоит разница между независимым и зависимым бросаниями кубика?
9. Что означает 10d12 + 7? Какое минимальное, максимальное и среднее значение дает это выражение?
10. Рассматривая данный вопрос с точки зрения игрового опыта, обсудите, как желание игрока чем-либо обладать зависит от степени редкости этой вещи (например, редких коней в игре World of Warcraft, определенных видов головных уборов в Team Fortress 2 и т.д.).
Один из постов в Twitter: «Тот неловкий момент, когда, имея 25%-ную вероятность добиться чего-то в игре, вы терпите неудачу десять раз подряд. Не очень-то хорошая вероятность в 1/4…»
Какова вероятность того, что из десяти попыток все десять окажутся неудачными? Чем, по-вашему, объясняется такая ситуация — крайним невезением игрока или неправильной работой генератора случайных чисел?
Ранее в этой главе, в пункте «Случайность против стабильности», в качестве практического примера была рассмотрена игра «Убить эльфа», в которой один игрок (воин) за каждый ход наносит 1 очко урона, а другой игрок (волшебник) наносит 6 очков урона при выпадении цифры 6 на кубике d6 или 0 очков урона при выпадении любой другой цифры и цель обоих игроков состоит в том, чтобы быстрее соперника нанести заранее заданное количество очков урона. Мы пришли к выводу, что эта игра является довольно сбалансированной, если для победы нужно нанести 4 очка урона. Какова фактическая вероятность победы волшебника, победы воина и ничейного результата в таком случае? (Помните о том, что в отсутствие ошибок сумма этих трех вероятностей должна быть равна 1.)
Более объемная задача: также определите вероятность победы волшебника, победы воина и ничейного результата в том случае, когда для победы нужно нанести 10 очков урона. Здесь потребуются более сложные расчеты, поскольку вы должны определить, сколько существует способов получения как минимум двух шестерок за девять бросков (для победы волшебника) или одной шестерки за девять бросков с получением еще одной шестерки в десятом броске (для ничейного результата). Используя электронную таблицу, смоделируйте с помощью метода Монте-Карло несколько тысяч игр и посмотрите, насколько результат симуляции сходится с результатом расчетов. При получении сильно различающихся результатов еще раз проанализируйте симуляцию и расчеты, чтобы понять, где вы допустили ошибку.
Два игрока выбрасывают 50d6, и на первом броске один из них получает цифру 6, а второй — цифру 1. Здесь сложно определить вероятность победы каждого из игроков путем расчетов, но сделать это с помощью метода Монте-Карло довольно просто. Создайте симуляцию Монте-Карло в любом предпочитаемом вами редакторе электронных таблиц и получите приблизительный ответ.
Игра «Свинья» в том виде, как она описана в разделе практических примеров в этой главе, имеет сравнительно простое игровое состояние. Если играют двое, оно включает в себя лишь следующее: общие результаты обоих игроков, кто из игроков выполняет ход в данный момент и промежуточный результат текущего хода. Следовательно, любая оптимальная стратегия должна определять, следует ли продолжать бросать кубик или лучше остановиться, исходя только из этих трех вещей.
Напишите для этой игры собственный искусственный интеллект. В данном случае под этим понимается просто формула, которая на основе трех чисел — вашего общего результата, общего результата противника и текущего промежуточного результата — рекомендует либо продолжать бросать кубик, либо остановиться. В принципе, эту задачу можно еще больше упростить, сведя к поиску формулы, которая на основе двух чисел — вашего общего результата и общего результата противника — выдает число, на котором следует остановиться при выбрасывании кубика (продолжать бросать кубик, пока текущий промежуточный результат хода меньше этого числа, и остановиться после его достижения или превышения). Решение этой задачи можно записать вручную в виде формулы или реализовать в редакторе электронных таблиц.
Если вы читаете эту книгу вместе с другими людьми (например, в учебной аудитории), рассмотрите возможность проведения турнира по ИИ для игры «Свинья». Попросите каждого участника представить свою версию формулы и попробуйте использовать их друг против друга в нескольких тысячах игр. Затем сравните и обсудите представленные участниками формулы. Чем объясняется эффективность победившей формулы? Чем объясняется неэффективность других формул?
Допустим, у нас очень простая ролевая игра (RPG), в которой для определения исхода боя игрок должен бросить кубик d6 и добавить к выпавшему числу свой боевой бонус (при наличии такового). Победителем схватки становится игрок с более высоким результатом. В случае ничьей кубик бросают повторно до тех пор, пока не определится победитель.
У воина десятого уровня боевой бонус равен +4. Определите вероятность его победы в схватке со следующими противниками:
• тролль (боевой бонус +3);
• гигантский паук (боевой бонус +2);
• гоблин (боевой бонус +1);
• гигантская крыса (боевой бонус +0).
Подсказка: возможно, у вас возник вопрос, что следует делать в том случае, когда повторные броски кубика бесконечно долго не позволяют разрешить ничейный результат? В таком случае можно полностью игнорировать ничейный результат, приняв во внимание тот факт, что бросание кубика продолжается до получения выигрышного или проигрышного результата. Например, если, согласно вашим расчетам, вероятность победы составляет 0,5, вероятность поражения — 0,25 и вероятность ничьей — 0,25, то, разделив вероятность победы (0,5) на вероятность победы или поражения (0,75), можно определить, что вероятность победы в таком случае составляет 2/3.
После долгих дневных приключений ваши персонажи RPG-игры заходят в трактир. В углу группа местных жителей играет в кости. Они приглашают вас присоединиться к игре, правила которой сводятся к следующему.
• Игровое поле разбито на восемь секторов с номерами от 1 до 8. Вы можете поставить одну золотую монету на любое из этих чисел. Другие игроки могут независимым образом сделать то же самое.
• После размещения ставок выбрасывается 4d8.
• Если выбранное вами число не выпадает ни на одном из кубиков, вы теряете свою ставку.
• Если выбранное вами число выпадает только на одном кубике, вы сохраняете свою ставку и дополнительно получаете выигрыш в 1 золотую монету (выигрыш в соотношении 1:1).
• Если выбранное число выпадает на двух кубиках, вы дополнительно получаете 2 монеты (выигрыш в соотношении 2:1).
• Если выбранное число выпадает на трех кубиках, вы получаете выигрыш в соотношении 3:1.
• Если выбранное число выпадает на всех четырех кубиках, вы получаете джекпот в соотношении 100:1.
Допустим, что игра ведется честно, то есть в ней используются абсолютно «честные» кубики. Каков ожидаемый размер прибыли или убытков в одном розыгрыше?
Подсказка: хотя вы должны найти точное решение этой задачи с помощью одного из нескольких возможных способов расчета, воспользуйтесь также методом Монте-Карло, чтобы проверить полученный ответ, потому что здесь можно легко посчитать что-то дважды и в результате получить неверное значение вероятности.
Имеется шесть видов драконьих яиц: красные, синие, белые, золотые, черные и зеленые. После завершения повторяемого квеста игрок получает драконье яйцо случайно выбранного цвета (вероятности выбора всех цветов равны). Какова вероятность того, что игрок соберет полный набор из шести яиц разных цветов после того, как пройдет квест шесть раз?
Более объемная задача: также определите, сколько раз в среднем требуется пройти квест для того, чтобы собрать как минимум по одному яйцу каждого цвета. (Подсказка: это число намного больше шести.)
В одной из Rogue-подобных игр после уничтожения монстра игрок получает некоторый вид добычи. Этот вид добычи случайным образом выбирается из таблицы распространенной добычи, содержащей 20 равновзвешенных элементов.
Один из элементов этой таблицы представляет собой не добычу, а апгрейд, предписывающий выбор случайного элемента из таблицы редкой добычи, которая тоже содержит 20 равновзвешенных элементов. И один из этих элементов предписывает выбор случайного элемента из таблицы эпической добычи, содержащей 20 равновзвешенных элементов.
Какова вероятность получения любого вида эпической добычи после уничтожения монстра? Какова вероятность получения конкретного вида эпической добычи?
Следует сказать, что начинающие геймдизайнеры слишком часто используют шестигранный кубик в силу большой популярности этого варианта. Однако у нас на руках пять, а не шесть пальцев. Основанием для нашей системы счисления служит число 10, а не 6. Разделив 6 на 100, вы не получите в качестве процентилей аккуратные круглые значения. Шестигранный кубик настолько популярен лишь потому, что, представляя собой геометрический куб, он является самой дешевой и самой простой в изготовлении разновидностью кубика. Это может иметь значение в настольной игре, но не в видеоигре, где можно использовать какое угодно количество виртуальных кубиков любого типа!
В то же время если четверка выпадает 20 раз подряд, то она с высокой долей вероятности может выпасть и в 21-й раз. Поскольку при обычных условиях выпадение одной и той же цифры 20 раз подряд очень маловероятно, получение такого результата может объясняться использованием «нечестного» кубика. Поэтому, если не указано иное, при решении связанных с вероятностью задач всегда предполагается, что кубик «честный».
Чтобы сделать эту систему еще менее понятной для игроков, в казино размер выплаты всегда меньше суммы, приходящейся победителю по используемой ставке. Разница между суммой по ставке и реальным размером выплаты составляет средний (ожидаемый) доход казино. Если вам когда-либо потребуется выразить вероятность в виде ставок, не забудьте указать, что именно имеется в виду: используемая ставка или реальный размер выплаты.
Если точнее, то каждый кубик дает шесть вариантов, и поскольку их бросают независимо друг от друга, получится 6 × 6 × 6 × 6 × 6 × 6 × 6 × 6 = 68 = 1 679 616 отдельных вариантов. Если вы начнете заносить эти данные в таблицу со скоростью один результат в секунду, не прерываясь на сон, то умрете от недосыпания раньше, чем закончите подсчет. Так что лучше не делайте этого.
Этим объясняется и то, что раз в несколько недель кто-то выигрывает в лотерею и этим счастливчиком никогда не становитесь вы или кто-то из ваших знакомых. Хотя вероятность выигрыша здесь очень мала, но если продается довольно много билетов, среди купивших вполне может оказаться один такой счастливчик. В то же время вероятность того, что победителем станете именно вы, крайне низка, и если исходить исключительно из ожидаемого значения, то участие в лотерее не несет вам совершенно никакой выгоды.