Я внедряю версию Lode Runner (эта версия), но не уверен, как воспроизвести эффект совместной работы миньонов, чтобы загнать игрока в угол, можно ли это сделать с помощью A * или есть лучший подход? Есть ли лучший алгоритм взаимодействия между миньонами (например, боидами) или лучшее решение — просто применить алгоритм отдельно для каждого из них?
Поиск пути ИИ в Lode Runner
Ответы (3)
Веб-игра Lode Runner
Исходный код для справки: https://github.com/SimonHung/LodeRunner
Вы можете посмотреть на lodeRunner.guard.js: алгоритм AI Enemy, портированный с языка C, оригинал Дугласа Э. Смита.
надежда может помочь вам!
Пути — это линейные линии, по которым следуют объекты вашей игры, поэтому в такой игре, как Lode Runner, у вас будут очень простые пути.
Во-первых, я предлагаю вам написать какой-нибудь объект Plan, который может быть передан любой сущности (кроме игрока) в вашем буфере сущности и может быть выполнен соответствующим образом. Это может быть просто набор инструкций, например ['left', 'up', 'right']
, или корректная координата, к которой должен двигаться миньон. Конечно, эта координата должна быть проанализирована на достоверность с точки зрения путей, которые вы загрузили для своих миньонов.
Во-вторых, вам нужен прогноз. Вам нужно предсказать все (крайние) позиции, в которых игрок может оказаться, и время, которое им потребуется, чтобы туда добраться. Например, если игрок движется так быстро, как только может, по маршруту X, чтобы оказаться в координате Y, ему потребуется Z секунд. Конечно, если игрок не сделает это в оптимальное время, миньоны приспособятся и уничтожат игрока.
В-третьих, сложность. Возможно, вам придется написать свой код, чтобы код в прогнозировании и определении пути ИИ стал более сложным и трудным. Я уверен, что вы слышали об искусственной сложности, которая представляет собой просто изменение значений в пути и предсказании.
Наконец, самое главное, сотрудничество. По сути, это всего лишь алгоритм, который учитывает все положения миньонов относительно положения игрока и организует их так, чтобы отрезать все возможные пути в тот момент, когда он их достигнет. Это можно написать разными способами, и я не могу привести здесь пример, потому что я не знаю, какой язык вы используете.
Большинство кодов, которые я вижу, следуют простому алгоритму.
Если игрок слева, а вы можете пойти направо, идите направо.
иначе, если игрок слева, и вы можете пойти налево, идите налево.
иначе, если игрок находится слева, и вы можете подняться, идите вверх.
иначе, если игрок находится слева, и вы можете спуститься, спуститесь.
иначе, если вы можете двигаться, то двигайтесь в случайном направлении.
иначе не двигаться.
Заставить монахов двигаться вопреки этому, как в Load Runner Online, нужны контрольные точки, где другой алгоритм заставляет их двигаться по-другому.