我现在已经在gameover上将高分写入文本文件,并在游戏加载时阅读它们。我现在的问题是在任何地方找不到txt文件highscores.txt,因为我还没有创建它。是否可以在找不到文件时创建文件?以下是相关代码:
在gameover上将高分数写入文件:
if(gameOver == true){
sbg.enterState(5, new FadeOutTransition(), new FadeInTransition());
if(score > Highscores.highscore3 && score < Highscores.highscore2){
Highscores.highscore3 = score;
}else if(score > Highscores.highscore2 && score < Highscores.highscore1){
Highscores.highscore3 = Highscores.highscore2;
Highscores.highscore2 = score;
}else if(score > Highscores.highscore1){
Highscores.highscore3 = Highscores.highscore2;
Highscores.highscore2 = Highscores.highscore1;
Highscores.highscore1 = score;
}else Highscores.highscore1 = score;
//Write highscores to highscores.txt
try{
PrintWriter writer = new PrintWriter("highscores.txt", "UTF-8");
writer.println(String.valueOf(Highscores.highscore1));
writer.println(String.valueOf(Highscores.highscore1));
writer.println(String.valueOf(Highscores.highscore1));
writer.close();
}catch(Exception e){
e.printStackTrace();
}
gameOver = false;
gameStart = false;
}
在程序开始时从highscores.txt读取高分:
public static void main(String[] args) throws IOException{
BufferedReader in = new BufferedReader(new FileReader("highscores.txt"));
String line;
while((line = in.readLine()) != null){
System.out.println(line);
}
in.close();
我知道如果文件不存在,我可以创建一个文件:
try{
File save = new File("highscores.txt");
if (!save.exists()){
save.createNewFile();
System.out.println("\n----------------------------------");
System.out.println("The file has been created.");
System.out.println("------------------------------------");
}
但我不知道如何使用缓冲区。请帮忙!
答案 0 :(得分:1)
让我先说一下我不熟悉在文件系统上存储游戏相关信息的最佳实践。话虽这么说,听起来你正在努力学习这个,所以考虑到这一点,我建议开始写一个简单的.txt文件。
基本上可以在SO上找到:
如何创建和写入txt文件:
How do I create a file and write to it in Java?
如何从txt文件中读取:
Reading and displaying data from a .txt file
以及适合衡量的Java教程:https://docs.oracle.com/javase/tutorial/essential/io/file.html
我会做的是:
1。找出你想要触发写入的时间。
您想什么时候更新您的高分文件?对我来说,看起来这将是你的游戏玩法类在158左右,在那里你确定游戏已经结束:
//Change to GameOverEasy state if gameOver is true
if(gameOver == true){
2。弄清楚何时需要读入文件以填充Highscores。在你的代码中使用pastebin,在你开始加载游戏状态/循环之前,对我来说这似乎是你想要在你的Blop类的main方法启动时做的事情:
public static void main(String[] args) throws IOException{
AppGameContainer appgc;
try{
appgc = new AppGameContainer(new Blop(NAME));
//Window size
appgc.setDisplayMode(960, 640, false);
appgc.setShowFPS(false);
appgc.setAlwaysRender(true);
appgc.setTargetFrameRate(60);
appgc.setVSync(true);
Display.setIcon(new ByteBuffer[] {
new ImageIOImageData().imageToByteBuffer(ImageIO.read(new File("res/images/general/Icon16.png")), false, false, null),
new ImageIOImageData().imageToByteBuffer(ImageIO.read(new File("res/images/general/Icon32.png")), false, false, null)
});
//TODO: Read in high scores file and populate Highscores class
appgc.start();
}catch(SlickException e){
e.printStackTrace();
}
3。弄清楚如何格式化文本文件。您已经订购了分数,因此您也可以将它们存储起来。每行保存一个分数或使用“,”或“|”之类的分隔符可以使用你现在拥有的东西。
从简单的文本文件开始,如果符合您的需要,请更改为其他内容。如果这是一个测试/学习项目,我强烈建议你保持简单并坚持使用一个简单的.txt文件,直到你把它包裹起来更多
要记住的一些事项:
编辑: 关于您的后续问题,您希望使用您正在使用的文件的实际名称。 Javadocs are your friend。关于你的第二个问题,请查看一些other SO posts。这很好。
答案 1 :(得分:0)
让文件编写者在程序关闭之前将这些值写入.txt文件,然后读取文件读取器并将这些值加载到高分实例变量中。这不是真正的火箭科学。
答案 2 :(得分:0)
一切正常,这里是如何在游戏结束时保存高分,以及如何在程序启动时加载它们。
当第一次启动程序时,它会检查是否有一个名为highscores.txt的文件,如果没有,它会在文件中创建一个并放置3个ZEROS,这样你才能获得文件的异常太空了!:
//Read highscores from highscores.txt
File save = new File("highscores.txt");
if (!save.exists()){
save.createNewFile();
System.out.println("\n----------------------------------");
System.out.println("The file has been created.");
System.out.println("------------------------------------");
//Places the default 0 values in the file for the high scores
PrintWriter writer = new PrintWriter("highscores.txt", "UTF-8");
writer.println(String.valueOf(0));
writer.println(String.valueOf(0));
writer.println(String.valueOf(0));
writer.close();
}
当您玩游戏几次时,当游戏处于“gameover”状态时,高分将写在highscores.txt文件中:
//Write highscores to highscores.txt
try{
PrintWriter writer = new PrintWriter("highscores.txt", "UTF-8");
writer.println(String.valueOf(Highscores.highscore1));
writer.println(String.valueOf(Highscores.highscore2));
writer.println(String.valueOf(Highscores.highscore3));
writer.close();
}catch(Exception e){
e.printStackTrace();
}
最后,当你关闭程序时,highscore1,highscore2和highscore3的最后一个值被写在highscores.txt文件中。因此,当您启动该程序时,您希望从该文件中读取这些整数。由于文件包含字符串,我想要整数,我必须以字符串的形式从文件中获取行,将其转换为整数,然后将其分配给变量Highscores.highscore1 ... (这是在“文件检查器”下的if()语句)
//Read string values of high score and convert to int to put into variables
BufferedReader in = new BufferedReader(new FileReader("highscores.txt"));
String line;
line = in.readLine();
Highscores.highscore1 = Integer.parseInt(line);
line = in.readLine();
Highscores.highscore2 = Integer.parseInt(line);
line = in.readLine();
Highscores.highscore3 = Integer.parseInt(line);
in.close();
因此,当您再次打开程序时,highscores.txt文件中写入的最后一个值将被放入您的高分整数。这就是你拯救他们的方式!