Речь пойдёт об играх, в которых нужен рандомный, но контролируемый баланс некоторых элементов, которые очень часто возникают на экране и имеют как положительные так и отрицательные свойства. Для примера возьмём игру 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
Что же из этого получится? Минимальное и максимальное значение не значит, что ступеньки за чертой этого диапазона не появятся вообще. Это значит что якорь будет стараться выровнять появление всех ступенек между максимальным и минимальным значением. При генерации уровня у нас есть сумма весов ступенек на платформе(либо на одном экране) и текущее значение якоря. Вот как это выглядит:
Текущее и абсолютное значение якоря
Если текущее значение якоря попадает в диапазон между MAX и MIN — генерируються любые ступеньки. Своим весом они смещают якорь в какую то сторону — он противиться и пробует сместить баланс обратно на следующем же шаге. В нашем примере это означает что когда сгенерировалось несколько позитивных ступенек, которые имеют значительно больший вес чем негативные — якорь сместиться в сторону плюса. Что-бы выровнять это значение следующими будут генерироваться ступеньки с отрицательным значением что-бы выровнять положение якоря до того момента пока он снова не попадёт в диапазон MAX-MIN.
Если нам нужно — значение якоря можно сдвигать в любую сторону так как нам это нужно. Не имеет значение генерируем мы ступеньки для бесконечной игры либо в пределах уровня. Всё зависит от того какого баланса мы хотим добиться. Также нужно очень тщательно подойти к выставлению весов самим ступенькам — так как именно от их соотношение якорь будет либо отклоняться спокойно либо со значительными прыжками в одну из сторон а потом выравнивать себя противоположным значением.
От ширины диапазона якоря так же зависит его поведение. Если выставить очень широкий диапазон — абсолютное значение будет постоянно попадать в него и будет больший рандом при генерации. Если диапазон поставить очень узким — значение будет перескакивать его то в плюс то в минус — тяжело будет добиться конролируемого результата.
В любом случае все значения баланса нужно подбирать под свои нужды. Но имея такой инструмент и окончательную цель — этого очень легко добиться.
Не ругайте за грамматику ((
ссылка на оригинал статьи http://habrahabr.ru/post/165547/
Добавить комментарий