Путь поиска в 2d игры Java?

голоса
6

По сути сво pacman клон игры я работаю. У меня есть класс Enemy и 4 экземпляров этого класса, созданный, которые все представляют собой 4 призраков игры.

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

Там нет лабиринтов / препятствия (пока), так что вся карта (400x400 пикселей) является открытой площадкой для них.

Для игрока, и каждый Духа, я могу извлечь X, Y, ширину изображений и атрибуты высоты. Кроме того, у меня уже есть алгоритм обнаружения столкновений, так что не беспокоюсь о том, что как раз о призраках, находящих свой путь к Pacman.

Задан 08/03/2009 в 06:14
источник пользователем
На других языках...                            


7 ответов

голоса
0

Вы можете начать смотреть на A * (звезда)

А вот страница , которая содержит ссылки на другие алгоритмы поиска пути.

[править] г ... мозг слишком медленно ... забыло об этой книге, это C или C ++ (я забыл , какой), но вы все равно можете получить концепции для Java. Это может быть не самым простым для вас читать, но не плохо в целом. AI для разработчиков игр Дэвид М. Бур, Гленн Seemann .

Ответил 08/03/2009 в 06:17
источник пользователем

голоса
12

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

Например, решение сделать шаг характер, в псевдокоде:

if (target is to the left of me):
    move(left);
else
    move(right);

if (target is above me):
    move(up);
else
    move(down);

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

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

Ответил 08/03/2009 в 06:25
источник пользователем

голоса
6

Если у вас есть только сетка пикселей - в «большое поле», на котором pacman и призрак может свободно передвигаться - то самый короткий путь легко - прямая линия между призраком и Pacman.

Но «кратчайший путь» всегда означает, что мы пытаемся решить проблему граф-теории. (Я предполагаю, что знание графиков, некоторые теории графов, прил. Матрицы, и т.д.!)

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

Таким образом, у вас есть это: ( "*" = узел "-, /, \ |" = край)

*-*-*
|\|/|
*-*-*  ... (etc)
|/|\|
*-*-* 

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

Что-то более ближе к реальности, может быть это:

*-*-*
| | |
*-*-*  ... (etc)
| | |
*-*-* 

Теперь, pacman не может двигаться по диагонали. Чтобы перейти от центра к нижней правой требует 2 «хмель», а не один.

Чтобы продолжить прогрессию:

*-*-*-*
| | | |
| | | |
| | | |
*-*-*-*
| | | |
*-*-*-*

Теперь, чтобы перейти от узла в середине к узлу в верхней части, вам нужно 3 хмеля. Однако, чтобы двигаться в направлении нижней занимает 1-хопа.

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

Введите*. Построив график (используя матрицу adjency или список узлов), вы можете использовать A * алгоритм, чтобы найти кратчайший путь. Другие алгоритмы включают Дейкстры. И многие другие! Но сначала нужно сформулировать проблему в терминах графа, а затем игрушка с тем, как вы идете от узла A (Pacman) к узлу B (призрак).

Надеюсь, это поможет!

Ответил 08/03/2009 в 06:55
источник пользователем

голоса
0

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

Просто подвести итоги: Визуализация лабиринт в виде графа с вершинами и ребрами. Каждое ребро имеет подождать (в вашем случае все ребра имеют одинаковый вес). Алгоритм находит кратчайший путь от источника Vertice целевым Vertice, перемещая один шаг вниз друг немедленных достижимы краями. Тогда на следующий Vertice вы сделать то же самое и продолжать не делать, пока вам добраться до цели. Первый путь достиг кратчайший путь. Там может быть много оптимизаций сделаны для этого алгоритма для ускорения вещи, как принимая во внимание, где pacman был в прежнем положении, в каком направлении он двигался, так что вы можете получить некоторые heiristics в алгоритме. Я хотел бы предложить найти кратчайший путь от каждого призрака к Pacman на каждое движение и двигаться призрак в этом направлении. В конце концов расстояние уменьшит и вы сможете поймать Pacman.

Другой эвристические, который можно использовать его, чтобы найти все непосредственные края достижимых из Pacman и попытаться охватить как многие из этих вершин, как это возможно с помощью духов. Таким образом, вместо того, чтобы Pacman в качестве целевого Vertice мы устанавливаем вершины immediatetly достижимые на Pacman, как цель, результат будет, что имеющиеся призраки попытается прикрыть themajor пути эвакуации из Pacman и поймать его.

Ответил 08/03/2009 в 08:26
источник пользователем

голоса
3

Это было очень давно, но из памяти призраков в Pac-Man не сделали много в пути первопрохождение. Они будут делать довольно стандартный рандомизированное лабиринте обход, пока они «не заметили» вас, в котором участвовали нахождения беспрепятственный путь вдоль оси коридора по отношению к вам, а затем они будут двигаться прямо к вам, пока вы не исчезли с их прямой видимости, после чего они возобновят случайный узор. На более высоких уровнях Pac-Man бы оставить невидимые следы позади него на некоторое время, что призраки «запах», а иногда следовать.

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

Таким образом, для подлинного опыта, вы, вероятно, не нужен очень сложный алгоритм поиска пути на всех. Если вы хотите быть фантазии, конечно же, вы можете реализовать A *.

Ответил 10/03/2009 в 09:11
источник пользователем

голоса
2

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

Следующий урок отличный легкий гид, чтобы начать с А *, с загружаемыми примерами.

Путь Нахождение на плитке основе карт

Ответил 12/03/2009 в 13:42
источник пользователем

голоса
1

в Pacman все призрак был другой алгоритм чеканка

  • Блинки -> Погоня. Как правило будет кратчайшим путем к вам, и имеет тенденцию следовать.
  • Pinky -> Засады. Стремится занять более окольный путь к Pac-Man. Смертельный. (Мизинец и Блинки, как правило, сделать другой выбор при выборе направления, часто арретирований игрока в угле)
  • Инки -> Freak. Этот чувак ведет себя странно. Он движется борту довольно случайно, но иногда гонит, когда он становится ближе.
  • Клайд -> Идиот. Перемещение в случайном порядке. Не большая угроза.

Призраки имеют интересную закономерность, запрограммированную в свои движения: иногда, они будут одновременно прекратить и их стремление к Pac-Man и вернуться в свои углы лабиринта, входя в режим «раскидывать».

есть полное описание в алгоритме с pacman досье

С уважением

Гийом

Ответил 10/04/2009 в 15:59
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more