我正在使用 Libtcod 和 Python 构建一个基于回合的策略游戏。游戏地图具有可变地形,每个图块可以是 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 的步行成本。如果单元格 xTo,yTo 是可步行的,则成本必须 > 0.0f。如果不是,它必须等于 0.0f。
但是,这不是 dijtskra 算法的重点吗?也就是说,该算法应该考虑到每个图块的可变成本,然后相应地构建路径。
地图本身已经应用了地形和移动成本,我只需要一种方法将这些数据与寻路连接起来。