Java 实现AI以隐藏在障碍后面

Java 实现AI以隐藏在障碍后面,java,artificial-intelligence,game-physics,Java,Artificial Intelligence,Game Physics,我正在开发捕食者和猎物的人工智能模拟。我想模拟隐藏在障碍物后面的AI,如果它被追逐的话。但我仍在努力找出实现这一目标的最佳方式 我一直在想,检查捕食者在障碍物的哪一边,然后试着走到另一边。也许使用A*路径查找算法来确保它使用最短路径到达那里 现在我写这篇文章的主要原因是,如果有人能给我指出实现这一目标的正确方向(也许有人以前做过),或者有其他好的想法如何实现它。在编程AI或制作任何游戏方面,我以前从未做过类似的事情 所有障碍物都是水平或垂直的正方形/矩形 请注意,红色的圆圈是捕食者,而绿色的圆

我正在开发捕食者和猎物的人工智能模拟。我想模拟隐藏在障碍物后面的AI,如果它被追逐的话。但我仍在努力找出实现这一目标的最佳方式

我一直在想,检查捕食者在障碍物的哪一边,然后试着走到另一边。也许使用A*路径查找算法来确保它使用最短路径到达那里

现在我写这篇文章的主要原因是,如果有人能给我指出实现这一目标的正确方向(也许有人以前做过),或者有其他好的想法如何实现它。在编程AI或制作任何游戏方面,我以前从未做过类似的事情

所有障碍物都是水平或垂直的正方形/矩形


请注意,红色的圆圈是捕食者,而绿色的圆圈是被追逐的猎物。

我会检查x和每个观察者之间是否有东西穿过直线。如果是,x是隐藏的。

我会检查x和每个观察者之间是否有东西穿过直线。如果是的话,x是隐藏的。

我不能马上给出任何代码,但我可以告诉你一些事情:

首先,您需要定义此计划的目标。在这种情况下,让人工智能隐藏在障碍物后面,尽可能让用户和人工智能保持相对

接下来,您需要决定需要在代码内部做什么(不编写任何真正的代码)来实现这一目标。例如:

  • 我们需要确定场景的哪个“区域”被视为“障碍物后面”
  • 接下来,我们需要确定一条路径,让人工智能在不穿过障碍物的情况下到达该区域
  • 最后,我们需要增加一些延迟,这样AI就不会因为用户在屏幕上移动的每个像素而不断改变主意
这本身并不是一个容易的问题,但不费吹灰之力肯定是可以实现的。我建议您找到一种方法,即使它很慢并且需要大量的代码,然后为它编写代码,最后进行优化。如果您担心细化,那么您永远无法解决任何问题

提示:确定一个从玩家指向障碍物中间的向量。然后,将向量乘以2,并将其添加到玩家的位置,这将在障碍物的另一侧为您提供一个点(假设它是一个矩形)。对获得的x和y值应用
Math.min()
Math.max()
限制器,使AI尽可能靠近或远离障碍物。这应该是一个不错的开始!:)

更新--我决定添加一些代码

// This assumes a few variables:
int obstacleCenterX, obstacleCenterY;
int aiX, aiY, aiWalkSpeed;
int predatorX, predatorY;
private void updateAIMovement() {
    int slope_x = obstacleCenterX - predatorX;
    int slope_y = obstacleCenterY - predatorY;
    int destination_x = predatorX + (slope_x * 2);
    int destination_y = predatorY + (slope_y * 2);
    if(aiX != destination_x){
        aiX += (slope_x / Math.abs(slope_x)) * aiWalkSpeed;
    }
    if(aiY != destination_y){
        aiY += (slope_y / Math.abs(slope_y)) * aiWalkSpeed;
    }
}
我根本没有测试过任何东西,但我认为这可能是一条正确的道路。我本可以做很多事情来改进这个小代码片段,但我没有(比如做一些trig来确保玩家在斜行时以真实速度移动,等等…)


希望这有点帮助

我想不出任何代码,但我可以告诉你几件事:

首先,您需要定义此计划的目标。在这种情况下,让人工智能隐藏在障碍物后面,尽可能让用户和人工智能保持相对

接下来,您需要决定需要在代码内部做什么(不编写任何真正的代码)来实现这一目标。例如:

  • 我们需要确定场景的哪个“区域”被视为“障碍物后面”
  • 接下来,我们需要确定一条路径,让人工智能在不穿过障碍物的情况下到达该区域
  • 最后,我们需要增加一些延迟,这样AI就不会因为用户在屏幕上移动的每个像素而不断改变主意
这本身并不是一个容易的问题,但不费吹灰之力肯定是可以实现的。我建议您找到一种方法,即使它很慢并且需要大量的代码,然后为它编写代码,最后进行优化。如果您担心细化,那么您永远无法解决任何问题

提示:确定一个从玩家指向障碍物中间的向量。然后,将向量乘以2,并将其添加到玩家的位置,这将在障碍物的另一侧为您提供一个点(假设它是一个矩形)。对获得的x和y值应用
Math.min()
Math.max()
限制器,使AI尽可能靠近或远离障碍物。这应该是一个不错的开始!:)

更新--我决定添加一些代码

// This assumes a few variables:
int obstacleCenterX, obstacleCenterY;
int aiX, aiY, aiWalkSpeed;
int predatorX, predatorY;
private void updateAIMovement() {
    int slope_x = obstacleCenterX - predatorX;
    int slope_y = obstacleCenterY - predatorY;
    int destination_x = predatorX + (slope_x * 2);
    int destination_y = predatorY + (slope_y * 2);
    if(aiX != destination_x){
        aiX += (slope_x / Math.abs(slope_x)) * aiWalkSpeed;
    }
    if(aiY != destination_y){
        aiY += (slope_y / Math.abs(slope_y)) * aiWalkSpeed;
    }
}
我根本没有测试过任何东西,但我认为这可能是一条正确的道路。我本可以做很多事情来改进这个小代码片段,但我没有(比如做一些trig来确保玩家在斜行时以真实速度移动,等等…)


希望这有点帮助

虽然这是与编程相关的,但它会更好地服务于您。@SeanKenny我认为它非常适合,因为他正在寻找某种算法-这与游戏开发无关。他还有另一个问题,但方向是一样的()@ThomasJungblut他正在寻找的算法可能已经存在,我认为游戏开发社区会更容易获得它。@SeanKenny这是一个很好的观点+1.谢谢你的建议,我从来不知道那个地方存在。我也会把这个贴在那里。虽然这是与编程相关的,但它会更好地服务。@SeanKenny我认为它非常适合,因为他正在寻找某种算法——这与游戏开发无关。他还有另一个问题,与此方向一致()@ThomasJungblut他正在寻找的算法可能已经存在,我认为游戏开发社区会有更多的算法