Произвольный поиск пути ИИ в игре

Я ветеран C #, никогда раньше не делал игр. Пытаясь расширить свой кругозор, я начал учить себя основам XNA, пытаясь создать простую 2D-игру типа лабиринт с типичной стрельбой по противнику. Мой вопрос связан с поиском пути для нескольких врагов.

Рассмотрим типичный пример: Pacman.

Когда вы начинаете раунд в Pacman, призраки выходят из коробки и выбирают разные, казалось бы, случайные пути, за одним исключением - они взвешиваются для определения текущей позиции игрока. Я думал, что могу пересчитывать путь каждого врага каждый раз, когда игрок движется, чтобы добиться аналогичного эффекта, но я не хочу, чтобы враги слишком сильно перекрывали пути, поэтому мне нужно случайным образом исказить каждый рассчитанный путь, чтобы придать некоторую степень уникальности враг. Есть ли к этому стандартный подход?

Думаю, я мог бы смотреть на это, поскольку каждый враг сам по себе является препятствием, и поэтому ни один путь врага не может включать путь, который мог бы столкнуться с другим врагом. В случаях, когда нет нового пути, который предоставил бы игроку свободный доступ, я бы попросил врага продолжить свой существующий путь, пока либо рабочий путь не будет найден, либо столкновение не изменит текущий путь. Этого может быть достаточно, но не слишком ли я упрощаю?


person Chris    schedule 07.05.2012    source источник


Ответы (3)


Интересная идея, но это может - для простого примера Packman - привести к тому, что некоторые враги не смогут найти путь. Например, если упаковщик находится в правом нижнем углу, он может идти только на север или запад. Если на каждом из этих путей есть враг, другие враги не смогут найти путь к нему и будут замерзать или бесцельно блуждать.

Возможно, если дать врагам более низкий «вес», чем реальные препятствия в игре, это позволит им все же найти путь и обеспечить тот очень приятный момент, когда сторож ест гранулу, а в ряду несколько призраков, которых можно сожрать. вверх.

person aiGuru    schedule 07.05.2012
comment
Да, я подумал об этом после того, как написал. Я думаю, что в случае отсутствия оптимального пути мне придется выбрать один случайным образом из списка кандидатов. Столкновение между врагами в любом случае приведет к изменению пути, если до этого дойдет. - person Chris; 07.05.2012

Может быть, вам будет полезен подход потенциальных полей ...

http://aigamedev.com/open/tutorials/potential-fields/

У каждого врага есть положительное потенциальное поле, а у игрока - отрицательное потенциальное поле, если вы заполните карту, вы можете получить, что враги не слишком сильно перекрываются из-за одних и тех же подписанных зарядов ... конечно, алгоритм имеет значение .. ... но, может быть, смогу тебе помочь.

введите описание изображения здесь

person Blau    schedule 07.05.2012

Я бы подошел с вероятностью ..

Может быть, что-то вроде того, что если путь A делает 20 шагов, а путь b - 30 шагов, то монстр пойдет путем A в 60% случаев, а путь B - в 40%. Затем добавьте какое-то правило, гарантирующее, что монстры всегда будут выбирать определенный маршрут, если этот маршрут более чем на 20% более вероятен, чем другой.

это создало бы сценарий, в котором монстр всегда выбирает самый близкий путь, если они достаточно близко, выбирает разные сходные пути на открытых участках и выбирает разные пути, что занимает почти столько же времени на больших расстояниях ...

тогда вам нужно добавить какой-то способ отфильтровать самое странное поведение, чтобы удалить мысли, такие как изменение направления без причины, и настроить фактические числа в формулу :) (кстати, это не проверено, просто предположение) ..

person Olle89    schedule 08.05.2012