1

在我的游戏的开始菜单中,我不想这样当你按下“继续”按钮时,你会得到你最后一次玩的分数。我已经修复了保存分数的代码和加载分数的代码,所以继续按钮没有任何问题。

但是对于“新游戏”按钮,我遇到了一些困难。当按下该按钮时,我需要重置存储分数的文件(将其中的数字设置为 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错误。

4

2 回答 2

2

您的代码隐藏了所有相关的异常,这将使得很难弄清楚发生了什么 - 将类似的东西ex.printStackTrace();放在 catch 块中,这样您就可以查看是否抛出了异常。我想在你的情况下,字节没有被写入,因为你没有关闭或刷新流。

无论如何,您可能希望对文件使用类似PrintWriter的东西,而不是写入原始字节:

PrintWriter writer = new PrintWriter(new File("file.txt"));
writer.println("0");
writer.close();
于 2013-05-01T13:11:52.130 回答
0

如果getFile()返回 a FileWriter,那么您可能每次都必须关闭并重新打开文件,并使用可让您指示您不希望它附加其他数据的构造函数。

于 2013-05-01T13:13:57.957 回答