2D阵列中的寻路

时间:2013-08-25 15:49:43

标签: java 2d a-star

我知道这是一个被问到很多的问题。我也坚持下去并寻求一些帮助。

我确实有一个小型Applikation,其中怪物应该为Charakter工作。它的Gridbased所以它可以向左上行走。我有一个数组,其中地图的所有阻塞区域。我需要得到的只是到达角色的下一步(左上方)。例如,如果他们在树周围走动会很棒。 (数组内部的简单-1)

是否有任何简单的解决方案或者我需要实施A *(我试过但我完全坚持这个)

我只是盯着这个:

@Override
public Status getNextMove(int posX, int posY) {
    if (checkIfAggroRange(posX, posY)) {
        if (checkIfBeside(posX, posY))
            //turn to the character
            return getIdleStatus(posX, posY);
        else
            //here id like to add the algo and get the value
    } else {
        return moveRnd();
    }
}

private boolean checkIfAggroRange(int posX, int posY) {
    return Math.abs(this.screen.character.mapPos.x - posX) <= range
            && Math.abs(this.screen.character.mapPos.y - posY) <= range;
}

private boolean checkIfBeside(int posX, int posY) {
    return (Math.abs(this.screen.character.mapPos.x - posX) <= 1 && Math
            .abs(this.screen.character.mapPos.y - posY) <= 1);
}

当它们在怪物的范围内时它已经启动了仇恨,并且还将怪物变为角色,因此它可以击中角色。

我确实通过screen.map.maparray (int[xsize][ysize])简化了地图。 xpos/ypos是数组中的pos。

如果您需要更多相关信息,请告知我们。

1 个答案:

答案 0 :(得分:4)

我建议使用A *,它使用简单的启发式方法为您提供从a到b的路径。作为一个网格你可以使用x,y坐标,然后很容易实现A *。所以我建议做的就是阅读这些2,

http://wiki.gamegardens.com/Path_Finding_Tutorial

http://www.cokeandcode.com/main/tutorials/path-finding/

这应该向你解释A *是如何工作的。第一篇文章结构合理,在尝试实现算法之前,你应该完全阅读并尝试理解。它还将为您提供解决诸如树木等障碍的想法

第二个很棒,因为实现的A *算法做得很好并且有解释所有这些的评论。这有点过于复杂,只需要2-3个课程而不是显示的数量,但它肯定会让你知道一切是如何工作的