我正在制作一个自上而下的RPG游戏,我打算使用txt文件和2D数组进行关卡,我将会有一个包含0到6值的2D数组,每个数组代表不同的纹理,我打算保留这些级别在txt文件中,但我在将文件读入2D数组时遇到问题。
这就是我的文件
0000000010000000044444444
0000050010000005504444444
0050000010000000005544444
0005000010000000000550550
0000000011111000333333333
0000000000001111100000000
0005000055000010000000000
0000000000000010000000000
0000050000500010000000000
0000000000000010000000000
0000000050005010000000200
0001111111111112200002000
0501000000000002200002000
0051000000000000000002000
这是我在我的数组中读取的代码,顺便说一下它的14x25。
public int[][] readInLevel(String levelNumber)
{
try
{
BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(levelNumber)));
while (in.ready() == true)
{
for (int row = 0; row <= 13; row++)
{
for (int column = 0; column <= 24; column++)
{
level_1[row][column] = in.read();
}
}
}
} catch (Exception e)
{
System.out.println(e);
}
return null;
}
这是我的2D阵列。
int level_1[][] = new int[14][25];
答案 0 :(得分:1)
in.read
读取一个ASCII字节。注意here Asciii中的“0”是48.因此,从in.read中减去48,如下所示:level_1[row][column]=in.read()-48;
如果这不起作用,则转换为int:level_1[row][column]=(int)(in.read-48);
< / p>
编辑:好的,有一种方法可以做到这就是我的工作。 编辑编辑:检查换行符
byte b=0;
int row=0;
int column=0;
while((b=in.read())!=1) {
if((char)b=='\n') {
row++;
column=0;
} else {
level_1[row][column]=b-48;
column++;
}
}
行/列代码可能存在一些问题,我没有仔细考虑过。
编辑编辑:好的,发现了问题。如果没有字节,BufferedReader.read()返回-1,这意味着它每次返回-49,因为它返回-1-48。这意味着您的读者未正确初始化。检查你的文件。我通常会这样做:File f=new File(path);
FileReader fr=new FileReader(f);
BufferedReader reader=new BufferedReader(fr);
好的,这是我的代码:http://pastebin.com/qstGnK77
它工作得很好,看看输出。
答案 1 :(得分:0)
确定。
Circuit Smasher是正确的,你应该减去48 ascii值以获得与你的关卡文件中的字符相对应的int。你看到-49因为-1(read()的EOF返回值)减去48是-49。
for
循环中的限制令人困惑;也许你应该考虑将它们改为
for (int row = 0; row < 14; row++)
然后,请记住每行的第15个字符是换行符。这抵消了网格。我们可以通过阅读它来摆脱这个换行符。 (您也可以使用BufferedReader.read()
的另一个定义从每行输入中获取前14个字符。或者您可以使用具有函数的Scanner
类来获取整行输入。)< / p>
以下代码段似乎正常运行(我添加了一些打印语句以确保有效性):
int[][] level_1 = new int[14][25];
try {
BufferedReader in = new BufferedReader(new InputStreamReader(
new FileInputStream("input.txt")));
while (in.ready() == true) {
for (int row = 0; row < 14; row++) {
for (int column = 0; column < 25; column++) {
level_1[row][column] = in.read() - 48;
System.out.print(level_1[row][column] + ", ");
}
in.read(); // this is important
System.out.println("");
}
}
} catch (Exception e) {
e.printStackTrace();
}
其他编辑:您使用的是IDE吗?在Eclipse中,输入文件需要位于您正在处理的项目的根目录中。对于其他IDE可能有所不同。如果您仍然收到一堆-49s,那么我认为该文件没有被正确读取。