在我正在开发的游戏中,我有一个String
显示分数的游戏,问题是代码将其保存String
到文件中。我不希望文件不断保存分数,因为分数会随着您玩游戏而更新。因此,我从这样的摇摆定时器运行该方法。
Timer timer = new Timer(1, new ActionListener(){
public void actionPerformed(ActionEvent e){
save();
}
});
timer.start();
保存方法看起来像这样,它应该可以工作,因为我在不久前制作的文本程序中使用了完全相同的代码。
public void save(){
try{
getScore = new File("Score.dat");
scoreFile = new FileOutputStream(getScore);
byte[] saveScore = score.getBytes();
scoreFile.write(saveScore);
scoreFile.close();
}catch(FileNotFoundException ex){
}catch(IOException ex){
}
}
我在游戏的开始屏幕上有两个按钮,New Game
还有Continue
. 我已经做到了,如果你按下New Game
文件,它将把它的文本更新为 0,如果你按下Continue
,代码将照常进行,分数将等于文件中显示的分数。这是ActionListener
两个按钮的。
public void actionPerformed(ActionEvent e){
Object command = e.getSource();
if(command.equals(newGame)){
try{
PrintWriter pw = new PrintWriter(new File("Score.dat"));
pw.print("0");
pw.close();
}catch (FileNotFoundException ex){
}
startGame = true;
}
if(command.equals(contGame)){
startGame = true;
}
}
该文件是正常创建的,我没有收到任何错误,但文件没有更新,它里面总是一个 0。我尝试使用PrintWriter
,而不是FileOutputStream
因为它可以将文件的文本设置为 0,但是当我在pw.print(score);
文件资源管理器崩溃的情况下使用它时,我必须重新启动我的通勤者。
编辑:
我已经弄清楚问题是什么,但我不知道如何解决它。当我打印出分数时,结果将如下所示:0, 0, 0, 0, 10, 0, 0, 0, 0, 20, 0, 0, 0, 0, 30(如果文件内的数字是0,如果是 50,则将所有 0 替换为 50) 等等。
因此,如您所见,文件只有 25% 的机会更新分数。我不知道为什么会发生这种情况,因为我的代码中看不到任何可能导致这种情况的地方。
这是加载分数的代码。
public void load(){
try{
br = new BufferedReader(new FileReader("Score.dat"));
score = br.readLine();
}catch (FileNotFoundException ex){
}catch(IOException ex){
}
}
该方法通过load();
在public Player()
方法中运行一次(Player
是类的名称)。