我为我正在制作的游戏制作了一个java class Levels 。为了使其快速阅读并使代码简单,数据采用ascii字符。问题是该类似乎没有执行。这可以进行一些修改吗?
这就是我所说的:
class G
{
/* Variables */
public G()
{
addKeyListener(new keys());
setPreferredSize(new Dimension(w, h));
setFocusable(true);
Levels l = new Levels(1);
System.out.print(l.blocks);
}
/* Code */
}
这就是上课。
class Levels
{
int blocks, bl;
int[] alt, bgc, gc;
private int k;
public Levels(int level)
{
try
{
FileInputStream levelfile = new FileInputStream("levels/level/" + level + ".lvl");
Scanner ls = new Scanner(levelfile);
this.bl=((int)ls.nextByte())-32;
this.blocks=(int)ls.nextByte()-32;
for(k=0; k<6; k++)
{
this.bgc[k]=((int)ls.nextByte()-32)*2;
}
for(k=0; k<6; k++)
{
this.gc[k]=((int)ls.nextByte()-32)*2;
}
for(k=0; k<blocks; k++)
{
this.bgc[k]=((int)ls.nextByte()-32)*2;
}
}
catch(FileNotFoundException error)
{
System.out.print("Level not found..." + error);
}
}
}
答案 0 :(得分:0)
请出于此目的使用DataInputStream
/ DataOutputStream
。它会解决你的想法中的很多问题。
UPD: http://docs.oracle.com/javase/tutorial/essential/io/datastreams.html
UPD-2 我不建议您使用DataInputStream
阅读文本文件。我建议您不要使用文本(ascii
)文件表示。
UPD-3 好的。如果您还想读/写文本文件,那么有几个建议。 1)根据您的读取文件代码,您不要在书面值之间使用任何分隔符。不是吗?最简单的方法是使用回车,即在新行上写下每个值。
2)在这种情况下,使用BufferedReader
:
FileInputStream fis = new FileInputStream('... your path ...');
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
String line;
line = br.readLine();
this.bl = Integer.parseInt(line);
line = br.readLine();
this.blocks= Integer.parseInt(line);
... and so on
br.close();