Pull to refresh

Принцип «якоря» в игровом балансе

Game development *
image

Речь пойдёт об играх, в которых нужен рандомный, но контролируемый баланс некоторых элементов, которые очень часто возникают на экране и имеют как положительные так и отрицательные свойства. Для примера возьмём игру Doodle Jump. В ней есть несколько типов ступенек — одни помагаю прыгать выше — другие могут затруднить продвижение персонажа вверх или вовсе убить его. Сначала игра очень простая — ступенек много, позитивных значительно больше чем негативных, всё кажется легко. Но через некоторое время игровой процесс усложняется — негативов становиться больше, самих ступенек мало, они раскиданы по всему экрану.


Попробую объяснить как добиться такого результата очень интересным способом — *методом якоря*.

И так: допустим у нас имеются 3 позитивных ступеньки и 6 негативных. Нам нужно присвоить каждой ступеньке вес. Позитивные будут со знаком плюс, негативные со знаком минус. При этом вес позитивных должен быть значительно больше, если мы хотим что бы они появлялись реже чем негативные, или же наоборот если мы хотим достичь противоположного результата.
Позитив Значение Негатив Значение
Позитив 1 +100 Негатив 1 -10
Позитив 2 +300 Негатив 2 -50
Позитив 3 +80 Негатив 3 -20
Негатив 4 -8
Негатив 5 -50
Негатив 6 -15


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

Теперь про сам якорь.

У него должно быть максимальное и минимальное значение (либо среднее арифметическое). Для нашего примера можно использовать так:
  • MAX:100 MIN:20
  • MAX:40 MIN:-20
  • MAX:0 MIN:-80

Что же из этого получится? Минимальное и максимальное значение не значит, что ступеньки за чертой этого диапазона не появятся вообще. Это значит что якорь будет стараться выровнять появление всех ступенек между максимальным и минимальным значением. При генерации уровня у нас есть сумма весов ступенек на платформе(либо на одном экране) и текущее значение якоря. Вот как это выглядит:
image image
Текущее и абсолютное значение якоря

Если текущее значение якоря попадает в диапазон между MAX и MIN — генерируються любые ступеньки. Своим весом они смещают якорь в какую то сторону — он противиться и пробует сместить баланс обратно на следующем же шаге. В нашем примере это означает что когда сгенерировалось несколько позитивных ступенек, которые имеют значительно больший вес чем негативные — якорь сместиться в сторону плюса. Что-бы выровнять это значение следующими будут генерироваться ступеньки с отрицательным значением что-бы выровнять положение якоря до того момента пока он снова не попадёт в диапазон MAX-MIN.

Если нам нужно — значение якоря можно сдвигать в любую сторону так как нам это нужно. Не имеет значение генерируем мы ступеньки для бесконечной игры либо в пределах уровня. Всё зависит от того какого баланса мы хотим добиться. Также нужно очень тщательно подойти к выставлению весов самим ступенькам — так как именно от их соотношение якорь будет либо отклоняться спокойно либо со значительными прыжками в одну из сторон а потом выравнивать себя противоположным значением.

От ширины диапазона якоря так же зависит его поведение. Если выставить очень широкий диапазон — абсолютное значение будет постоянно попадать в него и будет больший рандом при генерации. Если диапазон поставить очень узким — значение будет перескакивать его то в плюс то в минус — тяжело будет добиться конролируемого результата.

В любом случае все значения баланса нужно подбирать под свои нужды. Но имея такой инструмент и окончательную цель — этого очень легко добиться.
Tags:
Hubs:
Total votes 40: ↑28 and ↓12 +16
Views 19K
Comments Comments 13