Answers:
决定是否使用正方形网格和十六进制网格的主要考虑因素不应是AI的易于实现-宽度优先和深度优先的搜索算法几乎相同,无论您使用哪种图形。
而是,这是游戏设计师应考虑的游戏性问题。大众市场更容易使用正方形网格(十六进制板看起来“怪异”),并且在上下左右控件的世界中,从UI的角度来看,在正方形周围导航比使用十六进制要直观得多。方格也倾向于更多地限制运动。假设是正交运动(而不是对角线运动),则围绕一个正方形障碍物需要花费4步才能走,而在十六进制网格中需要3步。从编程的角度来看,十六进制也更容易实现,但它与搜索算法的意义不一样,方形网格等于二维数组,但是十六进制网格并没有真正映射到标准数据结构。
方形网格的缺点是机芯永远不会感觉正确。对角移动应该占用sqrt(2)运动点,但实际上它是1运动(这使它感觉像在对角线上行走很快,几乎没有理由进行正交行走)或2运动(这使对角运动感觉太慢了) )。使用十六进制网格,移动距离要直观得多,因为无论采用哪种路径,从一个十六进制到另一十六进制的距离始终相同。
无论如何我都不是AI专家,但是差异应该可以忽略不计。正方形网格要快一些(每个节点4个连接,而不是6个连接),但这实际上并不是算法运行时的限制因素。根据您计划使用的算法,对于十六进制网格,代码可能会更复杂,因为计算坐标会更加复杂,并且使用我认为会比较困难的四叉树/八叉树快捷方式常用于寻路。
但是对于像回合制策略游戏关卡这样的简单世界来说,两种布局之间的差异不应该太大。正方形网格会更简单,更快。
这个关于六角形的指南很棒。关于寻路的部分有一个交互式示例,以及有关如何自适应正方形寻路的一些信息。
如果您使用的是基于图的寻路,例如A *或Dijkstra的算法或Floyd-Warshall,则在十六进制网格上的寻路与在正方形网格上的寻路没有什么不同。
- 邻居。我在寻路教程中提供的示例代码调用graph.neighbors来获取位置的邻居。为此,请使用邻居部分中的函数。过滤掉无法通过的邻居。
- 启发式。A *的示例代码使用启发式函数,该函数给出两个位置之间的距离。使用距离公式,按比例缩放以匹配移动成本。例如,如果您的移动成本是每十六进制5,则将距离乘以5。