Python Libtcod:如何使用可变移动成本地形进行寻径?

2024-09-28 05:22:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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)

但是我不知道自定义函数应该做什么。根据文件,它应该

...return the walk cost from coordinates xFrom,yFrom to coordinates xTo,yTo. The cost must be > 0.0f if the cell xTo,yTo is walkable. It must be equal to 0.0f if it's not.

但是,这不是dijtskra算法的出发点吗?也就是说,算法应该考虑到每个块的可变成本,然后相应地构建一条路径。在

地图本身已经有地形和移动成本,我只需要一种方法来连接数据和寻路。在


Tags: 文件path算法游戏类型森林地图方块
2条回答

我自己实现了A*算法,用于生成美观的步行路径;其中包括了根据A*所述,只有在可以放置的桥梁时,考虑到增加的步数:

https://github.com/lillian-lemmer/sshrpg/blob/master/plotbrush/mapgen.py#L622

如您所见,您只需操纵A*算法,就可以增加地图上特定类型/属性的分片/点的暂定分数(从开始算起)。在

如果你看第660行,我将tentative_g_score(成本从开始算起)增加了8,所以这就像是说“只有在替代方案走了8步才能绕过它的情况下才建造一座桥。”包括你的a*算法的瓷砖数据,而不仅仅是笛卡尔坐标,是一种很好的基于地图属性对算法进行调整的方法。在

我尽可能地了解PathIn的功能。在

path_new_using_function将使用相邻单元格调用您的path_func,因此您只需让它返回上面列出的值,具体取决于(xFrom, yFrom)和/或(xTo, yTo)。在

相关问题 更多 >

    热门问题