Java 实现AI以隐藏在障碍后面
我正在开发捕食者和猎物的人工智能模拟。我想模拟隐藏在障碍物后面的AI,如果它被追逐的话。但我仍在努力找出实现这一目标的最佳方式 我一直在想,检查捕食者在障碍物的哪一边,然后试着走到另一边。也许使用A*路径查找算法来确保它使用最短路径到达那里 现在我写这篇文章的主要原因是,如果有人能给我指出实现这一目标的正确方向(也许有人以前做过),或者有其他好的想法如何实现它。在编程AI或制作任何游戏方面,我以前从未做过类似的事情 所有障碍物都是水平或垂直的正方形/矩形Java 实现AI以隐藏在障碍后面,java,artificial-intelligence,game-physics,Java,Artificial Intelligence,Game Physics,我正在开发捕食者和猎物的人工智能模拟。我想模拟隐藏在障碍物后面的AI,如果它被追逐的话。但我仍在努力找出实现这一目标的最佳方式 我一直在想,检查捕食者在障碍物的哪一边,然后试着走到另一边。也许使用A*路径查找算法来确保它使用最短路径到达那里 现在我写这篇文章的主要原因是,如果有人能给我指出实现这一目标的正确方向(也许有人以前做过),或者有其他好的想法如何实现它。在编程AI或制作任何游戏方面,我以前从未做过类似的事情 所有障碍物都是水平或垂直的正方形/矩形 请注意,红色的圆圈是捕食者,而绿色的圆
请注意,红色的圆圈是捕食者,而绿色的圆圈是被追逐的猎物。我会检查x和每个观察者之间是否有东西穿过直线。如果是,x是隐藏的。我会检查x和每个观察者之间是否有东西穿过直线。如果是的话,x是隐藏的。我不能马上给出任何代码,但我可以告诉你一些事情: 首先,您需要定义此计划的目标。在这种情况下,让人工智能隐藏在障碍物后面,尽可能让用户和人工智能保持相对 接下来,您需要决定需要在代码内部做什么(不编写任何真正的代码)来实现这一目标。例如:
- 我们需要确定场景的哪个“区域”被视为“障碍物后面”
- 接下来,我们需要确定一条路径,让人工智能在不穿过障碍物的情况下到达该区域
- 最后,我们需要增加一些延迟,这样AI就不会因为用户在屏幕上移动的每个像素而不断改变主意
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就不会因为用户在屏幕上移动的每个像素而不断改变主意
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他正在寻找的算法可能已经存在,我认为游戏开发社区会有更多的算法