Pathfinding 2D Java-игра? - PullRequest
       30

Pathfinding 2D Java-игра?

13 голосов
/ 09 апреля 2009

В настоящее время я пишу очень простую Java-игру, основанную на идее Theme Hospital .

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

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

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

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

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

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

Ответы [ 5 ]

9 голосов
/ 09 апреля 2009

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

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

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

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

4 голосов
/ 12 апреля 2009

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

3 голосов
/ 09 апреля 2009

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

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

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

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

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

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

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

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

2 голосов
/ 10 апреля 2009

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

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

0 голосов
/ 16 апреля 2012

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

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

...