Я создаю пошаговую стратегическую игру, используя Libtcod и Python. Игровая карта имеет переменный рельеф и каждый тайл может быть 1 из 5 типов:
- Равнины - Перемещение стоит 1
- Лес - Стоимость 2
- Река - стоит 4
- Холм - стоит 3
- Гора - Непроходимая
Каждый тип имеет свою стоимость передвижения, так что для перемещения по равнине требуется меньше «очков движения», чем, например, по лесу. Я хочу отобразить все квадраты, на которые может двигаться юнит, учитывая его диапазон движения / начальные точки движения.
Libtcod имеет функцию поиска пути, встроенную как для A *, так и для Dijtskra, и отобразить все квадраты в заданном диапазоне тривиально, без учета рельефа местности.
Однако я не могу понять, как я могу реализовать стоимость местности, не написав свой собственный алгоритм поиска пути. Глядя на документы, я знаю, что это как-то связано с:
def path_func(xFrom,yFrom,xTo,yTo,userData) : ...
path_new_using_function(width, height, path_func, user_data=0, diagonalCost=1.41)
dijkstra_new_using_function(width, height, path_func, user_data=0, diagonalCost=1.41)
но я не могу понять, что должна делать пользовательская функция. Согласно документам, он должен
...возвратить стоимость прогулки из координат xFrom,yFrom в координаты xTo,yTo. Стоимость должна быть > 0.0f, если по ячейке xTo,yTo можно пройти. Он должен быть равен 0.0f, если это не так.
но разве не в этом суть алгоритма Дейцкры? То есть алгоритм должен учитывать переменную стоимость каждой плитки, а затем соответственно строить путь.
На самой карте уже есть ландшафт и затраты на перемещение, мне просто нужен способ связать эти данные с поиском пути.