我正在制作一个贪吃蛇游戏,它在立方体表面上运行。目前,它使用Dijkstra算法进行路径查找。尽管使用了集合和优先队列数据结构进行优化,但速度仍然有点慢。当蛇吃掉食物并开始寻找新食物时,您会注意到延迟。
我试图改为使用A*算法,但是我找不到一个好的启发式算法。在具有4个移动方向的平面网格上,我会使用曼哈顿距离。我尝试使用3D曼哈顿距离
在代码中,每个方块都存储在一个
以下是游戏代码中路径查找发生的区域:
我试图改为使用A*算法,但是我找不到一个好的启发式算法。在具有4个移动方向的平面网格上,我会使用曼哈顿距离。我尝试使用3D曼哈顿距离
abs(dx) + abs(dy) + abs(dz)
,但由于蛇看来游戏世界实际上是6个网格(对应立方体的面),具有不寻常的环绕特性,因此这种方法不起作用。在代码中,每个方块都存储在一个
grid[15][15]
的二维数组中。有6个这样的数组来存储每个面。因此,每个方块都有一个(arrayX, arrayY, d)
三元组来描述在二维数组中的偏移量并指定哪个数组。此外,每个方块还有一个(x, y, z)
三元组描述空间位置。以下是游戏代码中路径查找发生的区域:
https://github.com/mhluska/Snakeception/blob/master/src/js/game.coffee#L105
这是A*算法的库代码:
https://github.com/mhluska/Stimpack/blob/master/src/js/graph.coffee#L60
这个游戏世界适合什么简洁的启发式算法?