将网格读入二维数组

Reading in a grid to a 2D array

我正在开发一款基本的棋盘游戏,但遇到了文件读取问题。我正在尝试像这样在网格中阅读:

1 1 2 1 1 1
1 1 2 1 1 1
1 1 2 3 1 1
1 1 1 3 1 1
1 1 1 4 1 1
1 2 2 2 4 1

我的计划是在二维数组中读取网格后将每个数字与不同的东西相关联(1 将是一堵墙,2 将是一条路径等)。任何帮助将不胜感激。

注意阅读:使用文件reader扫描文本文件,以便将网格放置在二维数组中

注意 : 我正在 LibGDX

开发游戏

假设读入意味着将此字符串转换为数字数组

var str = "1 1 2 1 1 1\n1 1 2 1 1 1\n1 1 2 3 1 1\n1 1 1 3 1 1\n1 1 1 4 1 1\n1 2 2 2 4 1";

var arr = str.split('\n').map(e => e.split(' ').map(Number));

/*
[
    [1, 1, 2, 1, 1, 1],
    [1, 1, 2, 1, 1, 1],
    [1, 1, 2, 3, 1, 1],
    [1, 1, 1, 3, 1, 1],
    [1, 1, 1, 4, 1, 1],
    [1, 2, 2, 2, 4, 1]
]
*/

怎么回事?

  1. 我们根据换行 String 划分 '\n'
  2. 我们根据 space、' '
  3. 对每个部分进行划分
  4. 我们将 2 的每个结果转换为 Number

一样,我在上面的函数中使用了ES6 箭头符号

// ES6 arrow notation
(arg1, arg2) => expr
// can be written as legacy
function (arg1, arg2) { return expr;}

Libgdx 的 FileHandle 有一个辅助方法可以轻松地将文本文件读入字符串。以下内容适用于任意大小的非方形或锯齿状数组。假设您的文件在资产目录中:

String fileString = Gdx.files.internal("myFile.txt").readString();
String[] lines = fileString.split("\n");
int[][] theArray = new int[lines.length][];
for (int i=0; i<lines.length; i++){
    String[] elements = lines[i].split(" ");
    theArray[i] = new String[elements.length];
    for (int j=0; j<elements.length; j++)
        theArray[i][j] = Integer.parseInt(elements[j]);
}