В настоящее время я делаю оборонительную игру, в которой враги будут появляться и атаковать армию игрока. Это похоже на игру Tower Defense, за исключением того, что есть только один уровень. Враги будут продолжать появляться до тех пор, пока в конечном итоге пользователь не умрет или не соберет достаточно большую армию, чтобы уничтожить любого врага, который появляется сразу (надеюсь, это будет достаточно сложно, чтобы этого не произошло).
В настоящее время я борюсь с тем, чтобы сделать эту игру все сложнее, и вероятность появления врага в конечном итоге достигнет 100%.
Пока что у меня есть что-то похожее на следующее
if(Math.random() < 1 - (1/elapsed_time) && spawnTimer <= 0 ){
spawnEnemy()
spawnTimer = rand(); // random number between 1 and 3
}
Но это кажется слишком единообразным для начала. На данный момент я порождаю только одного типа врагов, идея заключается в том, что более жесткие враги появляются со временем, а также.
Я также думаю, что мне нужно spawnTimer
немного рандомизировать мои и сделать это быстрее с течением времени, но я просто не могу понять, как должна выглядеть моя логика для всего этого раздела. Кто-нибудь может помочь с грубым представлением о такой формуле?
В настоящее время я использую javascript для написания игры, но, очевидно, это больше о концепции.
Ответы:
Выбранная вами функция вряд ли подойдет для вашей цели. Во-первых, если вы идете по этому маршруту, случайное случайное условие должно привести к задержке до следующего броска костей. Кроме того, маловероятно, что поддержание таймера появления в постоянном диапазоне хорошо для вашей цели.
Позвольте
thresh
быть порог сложности, который вы считаете высоким. Мы используем это позже, чтобы решить, когда следует замедлить темп, с которым игра становится сложнее.Позвольте
rate
быть количество монстров, которые вы хотите прийти в каждую минуту (или раунд).Позвольте
GROWTH_RATE
быть скорость, с которой увеличивается трудность (пока это будет0.2
).Допустим, вы начали с
rate = 10
. Теперь игрок убивает5
монстров, так что вы можете увеличить скоростьGROWTH_RATE * 5 = 1.0
и новыеrate = 11
.Как реализовать условие, которое будет генерировать
rate
монстров каждую минуту:Установить икру таймер число от
0.5
до1.0
multiplied by 60 seconds or
круглого времениand divided by
скорость. Also leave a
0.25` случайно не монстр порождена , когда таймер достигает 0 и время рандомизированы снова.Если
rate
когда-либо достигнет,thresh
вам нужно замедлить. Теперь вместо того, чтобы увеличиватьrate
путемGROWTH_RATE
, вы можете увеличить его1 / math.sqrt(rate)
. Таким образом, игрок не будет мгновенно уничтожен в более сложной обстановке.Вы можете сбросить
thresh
до 80% от того,rate
в котором игрок проиграл игру.Если вы хотите рандомизировать силу монстра, будьте осторожны с таймером. Например, если вы решили , что
player-score
(определяются монстрами , убитыми до сих пор) , будет использоваться для определения максимальной силы монстра , который может породить, вы можете сделать что - то вроде этого:max-monster-strength = player-score / 1000
. Затем рандомизацииfloat
илиdouble
между0.0
к1.0
и умножьте результат сам по себе.Теперь, когда вы рандомизируете таймер, вам, вероятно, следует учитывать уровень мощности. Например, вы можете умножить результат таймера на квадратный корень из мощности следующего монстра.
источник
Есть много вариантов, два с вашей текущей настройкой:
Тогда еще с дополнительными функциями:
Что касается построения кривой сложности, там действительно нет правильного ответа. Это займет много тестов игры и настройки, чтобы сделать это правильно. Это будет зависеть от того, как долго должна длиться игра и насколько трудно вы хотите, чтобы она была. Я предлагаю вам использовать Excel или такой сайт, как WolframAlpha, и посмотреть, какую кривую создают различные функции. Попробуйте экспоненциальное увеличение, линейное увеличение и т. Д. Найдите тот, который работает для вас.
источник
Вместо того, чтобы иметь фиксированное количество врагов (один) икру с переменной вероятностью, вы можете перевернуть его и иметь переменное количество врагов, появляющихся с фиксированной вероятностью.
На уровне сложности 1 с вероятностью 1% появляется один враг за такт.
На уровне сложности 1000 будет появляться до 1000 врагов, каждый с отдельным шансом 1%. Это означает, что в среднем 10 будет появляться за тик, но это также может быть больше или меньше. Существует вероятность того, что число, очень отличающееся от 10, появится сразу, может быть, даже все 1000. Но это очень маловероятное событие из-за того, как работает вероятность (сравните: Закон больших чисел ).
Когда вы добавляете больше разных врагов с различным поведением и характеристиками, вы, возможно, захотите, чтобы некоторые из более сильных врагов начинали появляться только на более высоких сложностях и даже тогда с низкой плотностью. Для этого вы можете добавить модификатор сложности, который вычитается из текущей сложности. Таким образом, враг не будет появляться до того, как будет достигнут этот уровень сложности, и даже тогда только с меньшей вероятностью:
источник