计算摆动中物体之间可能路径(有无限可能性)的策略?

时间:2016-12-14 23:24:57

标签: java swing vector

我正在尝试为我的地图构建应用程序构建逻辑函数,该函数将告诉我是否存在从一个swing对象到另一个swing对象的可用路径。

具体来说,我想确定从一个Jabel到另一个Jlabel的所有可能路径。

空白区域用白色图像表示,墙壁用蓝色图像表示,玩家开始用橙色,玩家完成绿色。

所以我认为我想做的是从起点检查每条可用路径。如果路径在目标处结束时返回true,如果它在墙上结束,则将其作为新的起始路径。我目前的想法是创建一个填充整数为0的二维数组。当用户将一个磁贴更改为白色以外的其他位置时,数组中的相应位置将根据它们放置的磁贴更改为1 2或3。然后当他们尝试保存地图时,算法将使用该2d数组来表示地图并检查相邻和线性路径。

我是在正确的轨道上还是更复杂?

如果它是一个复杂的地图,我觉得这可能会变得非常慢(如n ^ 2或更差)因为路径可以分支出来。我正在考虑使用某种Dijkestras方法来解决这个问题,但我也不知道如何在摇摆中做到这一点。

游戏中也有一些运动限制。

  • 除非您被停止,否则无法更改路线。
  • 除非您碰到墙壁或地图的边缘,否则您无法停止。

这消除了筛选的一些选项,因为路径的数量变得更加有限。

Make sure there is at least one way for orange to get to green.

1 个答案:

答案 0 :(得分:1)

是的我认为你走的是正确的道路..你可以使用这样的东西进行碰撞:

您在其中创建了一个对象,类Coordinate



constructor(){
  block = new Coordinate[length];
  path = new Coordinate[length];

for (int i=0;i<number_of_blocks;i++){
  if (block[i].x==path[length_of_path].x && block[i].y==path[length_of_path].y){
    //now you have a collision so go back
    }
  
  or
  
for (int i=0;i<number_of_blocks;i++){
  if (block[i].x==path[length_of_path].x+1 && block[i].y==path[length_of_path].y){
    //now you know you have a block on the right side
    }
&#13;
&#13;
&#13;

您必须在其中创建一个对象,例如,坐标类,以帮助存储坐标。

&#13;
&#13;
class Coordinate {
		
	int x,y;
		
	Coordinate() {
		x=0;
		y=0;
	}
	
	Coordinate(int x, int y) {
		this.x = x;
		this.y = y;
	}
}
&#13;
&#13;
&#13;

通过这种方式,您可以轻松检查是否发生碰撞,以及是否超出界限。然后更改方向,使用新坐标向您添加新坐标,依此类推。我认为这比使用2d阵列更容易。

如果您的阵列没有选项,您可以返回,直到有另一个方向可行并按此方式进行。 (您只需要单独保存以前的坐标,并在返回时覆盖它们。)

GL