
人工智能和行为
|
279
}
}
}
讨论
A
星算法是一个用于计算两点间路径的非常高效的算法。它以递进的方式构建路径,
每当它发现一个新的路径点,它会判断整个路径的长度是否是其余所有候选的点中
最短的,如果是,这个途径点才会被添加进路径中。如果此路不通,则它会回退到
上一步,重新选择其他点进行尝试。如果无法找到一个有效的路径,则返回一个空
路径。
9.10
网格中的路径查找
问题
你想找出在一个
GamekKit
网格(见
1.19
节)中两点间的最短路径。
解决方案
可以用
GKGridGraph
类的
findPath(from:, to:)
方
法:
import GameplayKit
//
定义一个
8x8
网格
let grid = GKGridGraph(fromGridStartingAt: [0,0],
width: 8, height: 8,
diagonalsAllowed: false)
//
移除网格中央的节点,
//
这样我们的路径会更有意义一些
let nodesToRemove = (1...7).map {
return grid.node(atGridPosition: [3, $0])!
}
grid.remove(nodesToRemove)
//
从左上角到右下角查找路径
let startNode = grid.node(atGridPosition: [0,0])!
let destinationNode = grid.node(atGridPosition: ...