在我的游戏的开始菜单中,我不想这样做,以便当您按下“继续”按钮时,您将获得上次玩游戏时的分数。我已经修复了保存分数的代码和加载分数的代码,因此继续按钮没有任何问题。
但是对于“新游戏”按钮,我遇到了一些困难。当按下该按钮时,我需要使存储分数的文件重置(将其中的数字设置为0而不是最后一个分数)。我试图将此代码放在ActionListener
内的按钮中,但它不会将.dat文件中的文本设置为0,但它会在结尾添加0。
try{
String zero = "0";
byte[] reset = zero.getBytes();
player.getFile().write(reset);
}catch (IOException ex){
}
我也试过player.setScore("0");
,每次敌人死亡时我用它来增加10分,但是它仍会从.dat文件中得到分数。
这是播放器类中的两个方法,它负责加载和保存文件。
public void save(){
try{
getScore = new File("Score.dat");
scoreFile = new FileOutputStream(getScore);
byte[] saveScore = score.getBytes();
scoreFile.write(saveScore);
}catch(FileNotFoundException ex){
}catch(IOException ex){
}
}
public void load(){
try{
br = new BufferedReader(new FileReader("Score.dat"));
score = br.readLine();
}catch (FileNotFoundException ex){
}catch(IOException ex){
}
}
如果按“继续”按钮而不是“新游戏”按钮,我也尝试仅运行load()
方法,但我收到java.lang.NullPointerException
错误。
答案 0 :(得分:2)
您的代码隐藏了所有相关的异常,这将使得很难弄清楚发生了什么 - 在catch块中添加ex.printStackTrace();
之类的内容,以便您可以查看是否抛出了异常。我想在你的情况下,字节没有被写入,因为你没有关闭或刷新流。
无论如何,您可能希望使用类似PrintWriter的内容而不是写入原始字节:
PrintWriter writer = new PrintWriter(new File("file.txt"));
writer.println("0");
writer.close();
答案 1 :(得分:0)
如果getFile()
返回FileWriter
,那么您可能每次都必须关闭并重新打开该文件,并使用constructor来表明您不希望它追加其他数据。