有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在swing中计算对象之间可能路径(可能无限)的java策略?

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

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

空白区域由白色图像表示,墙壁由蓝色图像表示,玩家开始为橙色,玩家结束为绿色

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

我做得对还是更复杂

我觉得如果这是一张复杂的地图,可能会非常慢(比如n^2或更糟),因为路径可能会分叉。我正在考虑使用一种Dijkestras方法来解决这个问题,但我也不知道在swing中我会怎样做

游戏中也有一些移动限制

  • 除非你停下来,否则你不能改变方向
  • 你不能停下来,除非你撞到墙或地图的边缘

由于路径的数量变得越来越有限,这就消除了一些可供筛选的选项

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


共 (1) 个答案

  1. # 1 楼答案

    是的,我认为你走在正确的道路上。。您可以使用类似这样的方式进行碰撞:

    在其中创建了一个对象,类坐标

    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
        }

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

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

    通过这种方式,你可以很容易地检查是否有碰撞,以及你是否出界。然后改变方向,在字符串中添加新的坐标,以此类推。我认为这比使用2d阵列更容易

    如果你觉得数组已经没有选择了,你就回去,直到有另一个可能的方向,然后朝那个方向走。(您只需单独保存以前的坐标,并在返回时覆盖它们)

    德国劳埃德船级社