私が取り組んでいるゲームでString
は、スコアを表示する があります。問題は、コードがString
をファイルに保存することです。ゲームをプレイするとスコアが更新されるため、ファイルに常にスコアを保存したくありません。そのため、このようにスイングタイマーからメソッドを実行します。
Timer timer = new Timer(1, new ActionListener(){
public void actionPerformed(ActionEvent e){
save();
}
});
timer.start();
少し前に作成したテキスト プログラムにまったく同じコードを使用したので、save メソッドは次のようになります。
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
2 つのボタン用です。
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 になります。ファイルのテキストを0に設定するために機能するため、PrintWriter
代わりに使用しようとしましたが、ファイルエクスプローラーで使用するとクラッシュし、コンピューターを再起動する必要があります。FileOutputStream
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
はクラスの名前) に含めることで 1 回実行されます。