我正在尝试为我的地图构建应用程序构建逻辑函数,该函数将告诉我是否存在从一个swing对象到另一个swing对象的可用路径。
具体来说,我想确定从一个Jabel到另一个Jlabel的所有可能路径。
空白区域用白色图像表示,墙壁用蓝色图像表示,玩家开始用橙色,玩家完成绿色。
所以我认为我想做的是从起点检查每条可用路径。如果路径在目标处结束时返回true,如果它在墙上结束,则将其作为新的起始路径。我目前的想法是创建一个填充整数为0的二维数组。当用户将一个磁贴更改为白色以外的其他位置时,数组中的相应位置将根据它们放置的磁贴更改为1 2或3。然后当他们尝试保存地图时,算法将使用该2d数组来表示地图并检查相邻和线性路径。
我是在正确的轨道上还是更复杂?
如果它是一个复杂的地图,我觉得这可能会变得非常慢(如n ^ 2或更差)因为路径可以分支出来。我正在考虑使用某种Dijkestras方法来解决这个问题,但我也不知道如何在摇摆中做到这一点。
游戏中也有一些运动限制。
这消除了筛选的一些选项,因为路径的数量变得更加有限。
答案 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;
您必须在其中创建一个对象,例如,坐标类,以帮助存储坐标。
class Coordinate {
int x,y;
Coordinate() {
x=0;
y=0;
}
Coordinate(int x, int y) {
this.x = x;
this.y = y;
}
}
&#13;
通过这种方式,您可以轻松检查是否发生碰撞,以及是否超出界限。然后更改方向,使用新坐标向您添加新坐标,依此类推。我认为这比使用2d阵列更容易。
如果您的阵列没有选项,您可以返回,直到有另一个方向可行并按此方式进行。 (您只需要单独保存以前的坐标,并在返回时覆盖它们。)
GL