迷宫控制台游戏 - 二维阵列

时间:2015-03-14 13:53:33

标签: java arrays

我想在迷宫中制作迷你游戏。 我需要先创建这样的东西 https://i.stack.imgur.com/X3SZS.jpg 我的问题是,如何在没有定义每个单一[] []位置的情况下像游戏地图那样填充数组

   `char s = '#';
    char [][] ary = new char [5][5];x
    ary[0][0] = s;
    ary[0][1] = s;
    ary[0][2] = s;
    ary[0][4] = s;

    ary[1][0] = s;
    ary[1][1] = s;
    ary[1][4] = s;

    ary[2][0] = s;
    ary[2][1] = s;
    ary[2][3] = s;
    ary[2][4] = s;

    ary [3][0] = s;
    ary [3][3] = s;
    ary [3][4] = s;

    ary [4][2] = s;
    ary [4][3] = s;
    ary [4][4] = s;

我想让它变得更简单

char [][] ary {{#, #, #, , #};
               {#, #, , , #};

依旧......

有可能吗? 谢谢你的时间。

1 个答案:

答案 0 :(得分:0)

地图数据应该存储为数据,而不是代码,在这种情况下可能是文本文件,可能看起来像:

# # # # # # #
#   #   #   #
#   #       #
#         # #
# # # # # # #

然后,您应该拥有读入文本文件并使用其信息填充地图数组的代码。我将使用一个用文本文件初始化的Scanner对象,然后使用每个文本行初始化的独立Scanner读取每一行,并在嵌套for循环中填充我的数组。

通过将迷宫置于数据域中,您可以大大提高程序的灵活性,现在可以在不更改代码的情况下更改地图

如果您确切知道文本文件的内容,包括每行的行数和数字标记,这样的事情就可以了......

public static char[][] readMap(String filePath) throws FileNotFoundException {
  char[][] map = new char[MAP_ROWS][MAP_COLUMNS];
  File mapFile = new File(filePath);
  Scanner mapScanner = new Scanner(mapFile);
  for (int row = 0; row < map.length; row++) {
     String line = mapScanner.nextLine();
     Scanner lineScanner = new Scanner(line);
     for (int col = 0; col < map[row].length; col++) {
        map[row][col] = lineScanner.next().charAt(0);
     }
     lineScanner.close();
  }
  if (mapScanner != null) {
     mapScanner.close();
  }

  return map;
}

否则,请在阅读之前考虑使用嵌套的ArrayLists并检查Scanner令牌的可用性。