Книга AI для разработчиков игр имеет очень хорошее объяснение A *. На самом деле я собирался написать реализацию сегодня ... если я это сделаю, я приведу код здесь.
Код готов, он слишком велик, чтобы его можно было разместить здесь, поэтому его можно взять из: https://chaos.bcit.ca/svn/public/astar/ (самозаверяющий сертификат, но сервер не делает ничего плохого).
Я следовал псевдокоду в книге по большей части, но я сделал все гораздо более объектно-ориентированным, чем все, что я видел до сих пор для A *.
У вас есть лабиринт, который состоит из плиток. У каждой плитки есть местоположение и препятствие (ноль, если нет препятствий).
Вы можете использовать PathFinder (например, AStar), чтобы найти кратчайший путь между заданным начальным и конечным местоположением. Вы получаете путь назад, который включает в себя плитки, которые вам нужно пройти, чтобы пройти от начала до конца.
Вы можете изменить эвристический расчет, предоставив другой HeuristicCalculator (текущий проверяет, чтобы увидеть, есть ли препятствие или нет, и вычисляет самое короткое число плиток, которые нужно пройти, например, вы можете добавить веса к различным препятствиям если вам не нравится по умолчанию).
Код является лицензией LGPL, поэтому, если вы вносите изменения и распространяете приложение, вы должны сделать эти изменения доступными. Не стесняйтесь отправлять отчеты об ошибках / исправления на адрес электронной почты в комментарии к лицензии (находится в каждом заголовке).
Я (никогда не получал) комментировать его после экзаменов, но я думаю, что это довольно просто.