java - 二维数组中的寻路

标签 java 2d a-star

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

我确实有一个小应用程序,其中 Monster 应该为 Charakter 工作。它是基于网格的,因此可以从左上右下移动。我确实有一个数组,其中包含 map 的所有阻塞区域。我需要做的就是到达角色的下一步(从左到右)。例如,如果他们绕着树走,那就太好了。 (数组内部的简单-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]) 得到了简单的 map 。 xpos/ypos是数组里面的pos。

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

最佳答案

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

http://wiki.gamegardens.com/Path_Finding_Tutorial

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

这应该向您解释 A* 的工作原理。第一篇文章结构合理,在尝试实现该算法之前,您绝对应该通读并尝试理解。它还会给你一些解决障碍的想法,比如你遇到的树木

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

关于java - 二维数组中的寻路,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18430814/

相关文章:

java - 如何 Intent 到android上的另一个页面/从空闲时间弹出一条消息?

java - JCR基本概念

qt - 使用 QGraphicsScene 和 QGraphicsView 在 Qt 中开始基于 Tile 的游戏

distance - A*曼哈顿距离

algorithm - 维基百科上的加权 A*

java - IntelliJ JSF 基本项目在 Tomcat 中不起作用

java - 从瓦片 map 加载子图像

opengl - 具有多种纹理的 VBO

python - 为 A* 路径查找启发式计算 3 个维度的 'Diagonal Distance'

java - 将 datanucleus-rest 与 HBASE 结合使用