使用寻路算法时,您可能希望将地图空间视为空地、障碍物之外的其他内容。
通常会有更多可用信息,例如通过该区域的难度(开销)。
例如,沼泽和山脉可能比草原和沙漠更难通过。
使用某些算法(如 A*),您可以将此信息编码到成本函数中。
下面列出了一些可能有用的移动成本的想法。
高度
高海拔(如山脉)的移动成本可能高于低海拔地区。
有了这个成本函数,您的单位将尽可能地留在低地。
例如,如果源和目的地都处于高海拔地区,则该单元可能会向下移动,行驶一段时间,然后向上移动。
爬山
不是在高海拔的移动成本高,而是向上坡移动可能会有很高的成本。
这避免了上述奇怪的情况。
有了这个成本函数,单位试图避免上坡。
面对同样的情况,该单位将尽量避免在最后上坡;它可以通过在整个旅行中保持高海拔来实现这一目标。
诸如此类的成本函数对于诸如士兵之类的单位可能是有益的,其可以容易地下坡但是难以上坡。
上下坡
一些单位,如坦克,很难上坡或下坡。
您可以为下坡移动分配高成本,向上坡移动的成本更高。
这些单位将尽量避免改变高度。
地形
您可能希望不同类型的地形具有不同的移动成本。
森林,山脉和丘陵
您可能希望使用地形类型,而不是使用高度,就像在文明中一样。
每种地形类型都可以具有与之相关的移动成本。
该移动表可以应用于所有移动单位,或者可以将不同的移动表与每个移动单位类型相关联。
例如,士兵可能毫无困难地穿过森林,但坦克可能会非常困难。
更高级的方法是为不断变化的地形分配运动成本。
从草原到丘陵可能比从山地到丘陵的开销更大,这可能比从丘陵到丘陵的开销要大。
道路
在许多游戏中,道路的主要目的是使运动成为可能或更容易。
选择移动成本功能后,您可以为其添加道路修改器。
一种可能性是将成本除以某个常数(例如两个);另一种方法是为沿路的运动分配不变的成本。
我强烈建议你不要让道路的运动免费(零成本)。
这会混淆类似 A* 的寻路算法,因为它引入了从一个点到另一个点的最短路径沿着蜿蜒的道路看似无处可能的可能性。
该算法必须搜索非常广泛的区域以确保不存在这样的道路。
请注意,在文明游戏中,铁路有零成本运动,但在使用“自动转到”功能时,铁路的成本非零。
这证明正在使用寻路算法。
墙壁或其他障碍
与其检查可通行路的移动成本和障碍物,不如同时使用移动成本。
只需为障碍物分配极高的移动成本。
扩展节点时(在 A* 算法中),检查成本是否过高;如果是,则抛出节点。
斜坡
由于不想要太过频繁的上下山的移动运动,你可能想要提高在山上移动的开销。
为此,可以计算地形的整体斜率(通过查看当前尾部与其邻居之间的最大差异),并将其用作移动成本的一部分。
非常陡峭的土地将具有高成本并且浅的土地将具有低成本。
这种方法不同于上坡/下坡运动的成本,因为它寻找陡峭的土地,而前一种方法寻找在陡峭方向上移动的单位。
特别是,如果你在山上并且可以向左或向右移动而不上升或下降,上下坡的方法将认为它是低成本,而这种方法将认为它是高成本。
倾斜的土地成本可能对单位移动没有意义,但您可以使用寻路来做更多的事情。
我用它来寻找道路,运河,桥梁等的路径。
如果你想在平地上建造这些物品,你可以在找到公路或运河的路径时考虑土地坡度。
有关更多创意,请参阅应用程序部分。
友方和敌军
另一个修饰符可以帮助你避开敌方单位。
使用影响力图,您可以跟踪敌人或友方单位附近的区域,最近杀死的士兵,最近被探索过的区域,接近逃生路线,或最近已被遍历过的区域。
(帝国时代2使用影响力图来影响寻路。)
影响力图可能对友方单位具有正值,对敌方单位具有负值。通过在负面区域增加移动成本,您可以影响您的单位以远离敌人。
更复杂的(也许是影响地图可能不可能)是能见度:
- 敌方单位是否可以看到你的单位?
- 您的单位是否可以通过其他方式检测到?
- 那个敌方单位有可能射击你吗?
标记的信标
如果您的地图是设计而非自动生成的,则可以向其添加额外信息。
例如,古代贸易路线经常会通过特定点,这些点通常成为交易城镇。
这些地方是信标,已知沿着良好路径的地方。
为了让信标对路径产生有利的吸引,可以将到信标的距离将添加到移动成本中。
信标的好选择包括灯塔,城市,山口和桥梁。
燃油消耗
除了查看去某个地方所需的时间之外,您可能还需要考虑所需的燃料。
当装置的燃料水平较低时,燃料消耗可以给予更多的重量。
要通过地图跟踪燃料使用情况,您需要使用状态空间。
状态可以表示为 <location,fuel> 对。
但是,状态空间可能变得非常大,因此可能值得研究使用普通 A* 的替代方案。
一种替代方案是带有限成本(ABC)的 A*( ftp://ftp.cs.bham.ac.uk/pub/authors/B.S.Logan/aaai-98.ps.gz )。
使用ABC,您可以为成本(“燃料”)分配限制(“20加仑”)。