我正在开发捕食者和猎物的人工智能模拟。我想模拟人工智能躲在障碍物后面,如果它被追赶的话。但我仍在努力找出实现这一目标的最佳方法。
我的想法是检查捕食者位于障碍物的哪一侧,并尝试走到另一侧。也许使用 A* 路径查找算法来确保它使用最短路径到达那里。
现在我写这篇文章的主要原因是万一有人能够指出我实现这一点的正确方向(也许有人以前已经这样做过)或者有任何其他好的想法如何实现它。在人工智能编程或制作任何游戏方面,我以前从未做过这样的事情。
所有障碍物都是水平或垂直的正方形/矩形。
请注意,红色圆圈是捕食者,而绿色圆圈是被追逐的猎物。
最佳答案
我无法直接给出任何代码,但我可以告诉你一些事情:
首先,您需要定义该计划的目标。对于这种情况,就是让 AI 隐藏在障碍物后面,尽可能让用户和 AI 保持在相反的两侧。
接下来,您需要决定在代码内部需要做什么(无需编写任何实际代码)来实现此目标。例如:
- 我们需要确定场景的哪个“区域”被视为“障碍物后面”
- 接下来,我们需要确定 AI 无需穿过障碍物即可到达该区域的路径。
- 最后,我们需要为此添加某种延迟,以便人工智能不会因用户在屏幕上移动的每个像素而不断改变主意
这本身并不是一个简单的问题,但它肯定是可以实现的,而不需要付出太多的努力。我建议您找到一种方法,即使它很慢并且需要大量代码,然后为其编写代码,最后进行优化。如果您担心细化,那么您永远无法解决任何问题。
提示:确定从玩家指向障碍物中间的 vector 。然后,将 vector 乘以 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;
}
}
我根本没有测试过任何东西,但我认为这可能是一条正确的道路。我本可以做很多事情来改进这个小代码片段,但我没有(例如一些三角函数来确保玩家在对角线移动时以真实的速度移动,等等......)
希望这对您有一点帮助!
关于java - 实现人工智能隐藏在障碍物后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14166699/