Пакман: ​​как глаза возвращаются к дыре монстров? - PullRequest
320 голосов
/ 30 июня 2010

Я нашел много ссылок на ИИ призраков в Пакмане, но ни один из них не упомянул, как глаза возвращаются к центральной дыре призраков после того, как Пакман съел призрака.

В моей реализации я реализовал простое, но ужасное решение. Я просто жестко прописал на каждом углу, в каком направлении следует идти.

Есть ли лучшее / или лучшее решение? Может быть, общий, который работает с различными уровнями дизайна?

Ответы [ 22 ]

150 голосов
/ 30 июня 2010

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

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

РЕДАКТИРОВАТЬ (11 августа 2010 г.): я только что обратился к очень подробной странице о системе Pacman: Досье Pac-Man , и, поскольку у меня есть принятый ответ, я решил обновить Это. Кажется, что статья не охватывает явное возвращение в дом монстров, но в ней говорится, что прямое нахождение пути в Pac-Man имеет место в следующем случае:

  • продолжайте движение к следующему перекрестку (хотя это, по сути, частный случай «когда предоставляется выбор, выберите направление, которое не подразумевает изменение вашего направления, как показано на следующем шаге);
  • на перекрестке, посмотрите на соседние квадраты выхода, кроме той, с которой вы только что пришли;
  • выбирая ближайшую цель. Если рядом с целью находится более одного, выберите первое правильное направление в следующем порядке: вверх, влево, вниз, вправо.
85 голосов
/ 30 июня 2010

Я решил эту проблему для общих уровней следующим образом: перед началом уровня я делаю какую-то "заливку" из отверстия монстра; каждая плитка лабиринта, которая не является стеной, получает число, указывающее, как далеко она находится от отверстия. Поэтому, когда глаза находятся на плитке с расстоянием 68, они смотрят, какая из соседних плиток имеет расстояние 67; это путь тогда.

42 голосов
/ 30 июня 2010

В качестве альтернативы более традиционным алгоритмам поиска путей вы можете взглянуть на (соответственно названный!) шаблон антиобъекта Pac-Man Scent .

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

Как только запах настроен, затраты времени выполнения очень низки.


Редактировать: к сожалению, статья в Википедии была удалена, поэтому WayBack Machine на помощь ...

18 голосов
/ 30 июня 2010

Вам следует взглянуть на алгоритм поиска путей, например Алгоритм Дийсктра или A * алгоритм . Вот в чем ваша проблема: проблема графика / пути.

18 голосов
/ 30 июня 2010

Любое простое решение, которое является ремонтопригодным, надежным и работает достаточно хорошо, является хорошим решением. Мне кажется, что вы уже нашли хорошее решение ...

Решение для поиска пути, вероятно, будет более сложным, чем ваше текущее решение, и, следовательно, с большей вероятностью потребует отладки. Это, вероятно, также будет медленнее.

ИМО, если он не сломан, не чините его.

EDIT

IMO, если лабиринт исправлен, то ваше текущее решение - это хороший / элегантный код. Не делайте ошибку, приравнивая «хорошее» или «элегантное» к «умному». Простой код также может быть «хорошим» и «элегантным».

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

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

14 голосов
/ 05 июля 2010

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

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

5 голосов
/ 01 июля 2010

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

3 голосов
/ 30 июня 2010

Это проблема поиска пути. Популярный алгоритм см. http://wiki.gamedev.net/index.php/A*.

3 голосов
/ 17 июля 2010

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

Значения будут предварительно рассчитаны с использованием любого доступного алгоритма.

2 голосов
/ 12 января 2012

Короткий ответ, не очень хорошо. :) Если вы измените лабиринт Pac-Man, глаза не обязательно вернутся. Некоторые из хаков, плавающих вокруг, имеют эту проблему. Так что это зависит от кооперативного лабиринта.

...