寻路到建筑物(A *有多个坐标)?

时间:2017-09-04 13:10:05

标签: algorithm path-finding

1)我想一个游戏,我们可以建造采用多块瓷砖的建筑物,例如3x3。

所以在开始构建之前,我需要将字符移动到相邻的tile。那么有一种算法可以找到建筑区域的最短路径吗?

我们是否有义务在区域建筑的每块瓷砖上使用A *并选择最短的?

编辑,例如:

地图: enter image description here

对于这个例子,(0; 0)坐标位于具有此标志的图像的左上角: enter image description here 想象你的角色是(0; 0)

我正在寻找算法将角色cloest移动到图像上的左侧。 [坐标:(1; 2),(8,2),(1,10),(8,10)]

目标不是像#"正常"案件,但是一个aera(有4分)。

那么从单个起始坐标[此处,(0,0)]到区域[此处:(1; 2),(8,2),(找到最近的位置)(最好的方法)是什么? 1,10),(8,10)]?

我想要算法返回数组的解决方案,所以如果在这个例子中有多种方式:[(0,2),(1,1)],没有选择解决方案,juste给我所有等价的解决方案。< / p>

2)与没有瓷砖的地图系统相同的问题,但只是坐标?

2 个答案:

答案 0 :(得分:0)

  

我们是否有义务在区域建筑的每块瓷砖上使用A *并选择最短的?

不,A *可以接受目标谓词,当前坐标等于这个坐标时,它不一定是&#34;它很容易be&#34;当某个set / area&#34;中包含当前坐标。这并没有改变算法的全局结构,只是退出测试。

当然,你必须保持你的启发式可以接受。

澄清,而不是这个&#34;狭窄&#34; A *的伪代码:(从wiki复制)

    current := the node in openSet having the lowest fScore[] value
    if current = goal
        return reconstruct_path(cameFrom, current)

你可以拥有:

    current := the node in openSet having the lowest fScore[] value
    if current ∈ goals
        return reconstruct_path(cameFrom, current)

或者这个:

    current := the node in openSet having the lowest fScore[] value
    if satisfiesGoalCondition(current)
        return reconstruct_path(cameFrom, current)

可以进行一些测试,例如&#34;当前坐标在目标矩形内#34;。

答案 1 :(得分:0)

array/grid version of A*可以停止目标区域中的任何匹配,因此只需从起点开始增长,直到达到任何目标坐标,然后backtrack

是的,您也可以使用图形/矢量版本来设置任何障碍物作为节点。

如果您的瓷砖是(半)可走路的,那么A*的网格版本会更好,因为您可以利用它。您只需对每个标记可行走和墙壁区域的图块进行 2D 表示。像这样:

这也允许你在你的建筑物中导航......但我没有看到你的建筑物内部,所以我的赌注是你到现在为止没有想到这一点。看看:

我正在使用 3D 网格,所以我得到了 3D 地形,而且建筑物也可以有等级......你只需要调整视图以选择性地切割高于玩家的等级像这样的东西:

levels