Pathfinding 2D Java-игра?

в настоящее время я пишу очень простую Java-игру, основанную на идее Тема Больнице.

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

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

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

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

Я не решаясь вставить какой-либо код, так как это грязно, поскольку я узнал много новых методов работы с GUI за последние несколько месяцев. Мой план состоит в том, чтобы добраться до вехи 1, заставить пациента пойти к столу, затем в офис, а затем уйти. Как только я получу Это, я приведу код в порядок.

Я видел много реализаций A* и много разных типов. Может ли кто - нибудь дать мне отправную точку, с которой я могу работать? Должен ли я попытаться адаптировать уже написанный набор классов или попытаться написать свой собственный нуля?

5 ответов


вы хотите*, это оптимальная реализация для поиска на основе сетки.

Это может помочь вам:

http://www.cokeandcode.com/main/tutorials/path-finding/

EDIT: предшествующая ссылка хороша как для реализуемого набора классов, так и для руководства по настройке методов поиска пути для удовлетворения вашего удовлетворения.


Это самый информативный пост, который я видел на сегодняшний день:http://www.ai-blog.net/archives/000152.html


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

код сделан, он слишком большой, чтобы поместить его сюда, поэтому вы можете взять его из:https://chaos.bcit.ca/svn/public/astar/ (самозаверяющий сертификат, но сервер не делает ничего плохого).

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

У вас есть лабиринт, который состоит из плиток. Каждая плитка имеет местоположение и препятствие (null, если нет препятствия).

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

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

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

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


естественно, вы узнаете много о pathfinding, если вы напишете свою собственную реализацию. Но вы также потратите много времени на это.

Проверьте JGraphT библиотека, которая имеет дело с графиками в целом, имеет хороший API и поддерживает больше алгоритмы кратчайшего пути, чем просто a*.


может быть, вы нашли то, что хотели, но вот ссылка с хорошим объяснением* pathfinding. Мне пришлось реализовать* для моей игры в C++, и это очень помогло мне понять, как это работает.

http://www.abdn.ac.uk/~csc245/teaching/CS1015/practicals/aStarTutorial.htm