【发布时间】:2012-03-17 12:50:47
【问题描述】:
在大学期间,我和几个朋友一起开发了一款游戏,我们必须从 .txt 文件中加载关卡,以我们选择的数据格式保存它,然后将其显示在屏幕上。我们决定使用一个二维 char 数组,我在编写关卡解析器时会逐行填充该数组。为了使其更具描述性,摘录我使用的代码:
unconverted = "#####\n" + "#___#\n" + "#S>X#\n" + "#___#\n" + "#####" // sample data
while(z < unconverted.length())
{
current = unconverted.charAt(z);
if(current == 'S' || current == 'X' || current == '<' || current == 'v' || current == '>' || current == '^' || current == '_' || current == '#' ||current == 't')
{
level[x][y] = current;
x++;
}
else if (current =='\n')
{
x=0;
y++;
}
else
{
System.out.println("Level null because of an unrecognised character");
level = null;
return level;
}
z++;
}
到目前为止,它运行良好,但我们并没有真正预料到会出现问题。除了他们会得到一个 char[][] 之外,其他人知道的并不多,这似乎是足够的信息……但事实并非如此!出现的问题是,在游戏逻辑和 GUI 中的不同点,数组是按行或按列读取的,这意味着例如关卡的显示被打开了。
这显然花费了我们很多时间来修复代码以使其再次保持一致。因此,对于未来,我想就普遍接受的“正确”方式提出一些建议,如果有的话:按行或按列填充和访问二维数组?此外,这两种方法之间是否有任何性能差异?我的常识会说首先填充第二个维度
非常感谢!
【问题讨论】:
-
是的。但这是一个独立于编程语言的一般问题。该代码只是为了让我的问题更容易理解。
-
好的,有道理。您介意发布一些示例数据吗?
标签: java multidimensional-array