C#用于将对象从点(X,Y)移动到点(X,Y)的路径算法

时间:2011-03-21 21:15:36

标签: c# algorithm artificial-intelligence pathing

给定一个物体,它可以在给定的X,Y点向前,向后,向左和向右移动。如何使用给定的运动机制以最有效和最自然的方式将物体有效地引导到X,Y点。

该对象可以实时移动,您可以告诉它们“startMoving | Direction |()”和“stopMoving | Direction |()”。虽然作为一个额外的扭曲和我遇到麻烦的部分,是对象的面对是永远不知道的,只有它的当前位置是已知的,所以算法必须“检测”方向。对象的位置在500-1秒间隔的单独线程中更新。在任何时候都可以使用“请求”更新算法中的位置,但是它不能立即使用,并且算法必须考虑到这一点。像requestAndWaitForCoordUpdate()那样做是完全可以接受的,但可能不需要。

此外,没有障碍物出现,可以假设你在一个大致开放的平面上,偏离路径之间的直线直线,你可能遇到障碍物。可以安全地假设目标和源之间的距离的1/4应该在给定的直接路径上宽度可用。

我还要提到我不确定A *是否适用于这种情况,如果确实如此,我不确定如何在给定约束的情况下实现它。这里唯一真正的变量是物体的面对。

以下是一些示例代码:

public int[] currentCoords;
public void movement() {
  currentCoords[0] = 1005; // starting y coord
  currentCoords[1] = 1007; // starting x coord
  moveTo(1050, 1025);
}

public void moveTo(int x, int y) {
  ... how?
}

public void threadUpdatingCoords() {
   ... periodically check for source coord updates
   ... between 200ms and 1000ms apart.
}

1 个答案:

答案 0 :(得分:0)

要计算最佳路线,您应该使用A *算法。然而,要以最人性化的方式做到这一点,你只需让它走路并随机指示。除非它是一个聪明的人,否则他只需将右手贴在墙上并继续行走而不会失去联系:最终你会到达目的地。

人类没有效率,它是随机的。 A *不是随机的,效率很高。