Поиск 2D 2D-игр?

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

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

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

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

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

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

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

Ответ 1

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

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

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

РЕДАКТИРОВАТЬ: Предыдущая ссылка хороша как для реализуемого набора классов, так и для руководства по настройке методов поиска пути для удовлетворения вашего удовлетворения.

Ответ 3

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

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

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

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

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

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

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

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

Ответ 4

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

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

Ответ 5

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

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