A*搜索算法的算法描述
f(x) = g(x) + h(x)
功能A*(开始,目标)
var closed :=空集
var q := make_queue(path(start))
当q不为空时
var p := remove_first(q)
var x:= p的最后一个节点
如果x是闭合的
继续
如果x =目标
返回p
将x添加到closed
继任者中的每个y(x)
排队(q,p,y)
返回失败A*改变自身行为的能力是基于启发式代价函数,在游戏中非常有用。速度和准确性之间的折衷将使你的游戏运行得更快。在很多游戏中,你并不真的需要得到最佳路径,只是近似而已。你需要什么取决于游戏中发生了什么或者运行游戏的机器有多快。假设你的游戏有平原和山地两种地形,在平原的移动代价是1,而在山地的移动代价是3,那么A星算法会认为在平地上的距离可以是山地的三倍进行等价搜索。这是因为从平原到山区可能有一条小路。将两个相邻点之间的评估距离设置为1.5可以加快A*的搜索过程。那么A*会拿3和1.5比较,不比拿3和1比较差。但是,有时候在山上移动可能比在山脚下绕来绕去更好。所以花更多的时间去寻找绕过大山的算法并不总是可靠的。同样,要实现这个目标,你可以通过减少山脚下的搜索行为来提高A-star算法的运行速度。这个弱点可以把A星算法的山地行动费用从3调整到2。这两种方法都会给出可靠的行动策略。