Highscore wordt niet opgeslagen. Java

Status
Niet open voor verdere reacties.

DeeM2

Gebruiker
Lid geworden
26 jan 2011
Berichten
9
Dit is de code, als het spel is afgelopen zien we op een correcte manier de score, maar wanneer we het spel opnieuw opstarten en roepen het highscore menu op, dan blijft het leeg.
ScoreBeheren
Code:
public class ScoreBeheren {

     private ArrayList<Score> scores;

    // hier worden de highscores opgeslagen
    private static final String HIGHSCORE_FILE = "highscore.txt";

    //Je moet gegevens kunnen invoegen en kunnen raadplegen
    ObjectOutputStream outputStream = null;
    ObjectInputStream inputStream = null;

    public ScoreBeheren() {
        scores = new ArrayList<Score>();
    }

    public ArrayList<Score> getScores() {

        sort();
        loadScoreFile();
        return scores;
    }

    private void sort() {
        ScoreVergelijken comparator = new ScoreVergelijken();
        Collections.sort(scores, comparator);
    }

    public void addScore(String name, int score) {

        scores.add(new Score(name, score));
        updateScoreFile();
        loadScoreFile();
    }

    public void loadScoreFile() {
        try {
            inputStream = new ObjectInputStream(new FileInputStream(HIGHSCORE_FILE));
            scores = (ArrayList<Score>) inputStream.readObject();
        } catch (FileNotFoundException e) {
            System.out.println("[Laad] FNF Error: " + e.getMessage());
        } catch (IOException e) {
            System.out.println("[Laad] IO Error: " + e.getMessage());
        } catch (ClassNotFoundException e) {
            System.out.println("[Laad] CNF Error: " + e.getMessage());
        } finally {
            try {
                if (outputStream != null) {
                    outputStream.flush();
                    outputStream.close();
                }
            } catch (IOException e) {
                System.out.println("[Laad] Error: " + e.getMessage());
            }
        }
    }

    public void updateScoreFile() {
        try {
            outputStream = new ObjectOutputStream(new FileOutputStream(HIGHSCORE_FILE));
            outputStream.writeObject(scores);
        } catch (FileNotFoundException e) {
            System.out.println("[Update] Error: " + e.getMessage() + ", het programma probeert een nieuw bestand te maken");
        } catch (IOException e) {
            System.out.println("[Update] Error: " + e.getMessage());
        } finally {
            try {
                if (outputStream != null) {
                    outputStream.flush();
                    outputStream.close();
                }
            } catch (IOException e) {
                System.out.println("[Update] Error: " + e.getMessage());
            }
        }
    }

    public String getHighscoreString() {
        String highscoreString ="";
        int max = 10;

        ArrayList<Score> scores;
        scores = getScores();

        int i = 0;
        int x = scores.size();
        if (x > max) {
            x = max;
        }
        while (i < x) {
            highscoreString += (i + 1) + ".\t" + scores.get(i).getNaam() + "\t\t" + scores.get(i).getScore() + "\n";
            i++;
        }
        return highscoreString;
    }
}
Score
Code:
import java.io.Serializable;

public class Score  implements Serializable {
    private int score;
    private String naam;

    public Score(String naam, int score) {
        this.score = score;
        this.naam = naam;
    }
    public int getScore() {
        return score;
    }

    public String getNaam() {
        return naam;
    }


}

Vergelijken
Code:
import java.util.Comparator;

public class ScoreVergelijken implements Comparator<Score> {
        public int compare(Score score1, Score score2) {

            int sc1 = score1.getScore();
            int sc2 = score2.getScore();

            if (sc1 > sc2){
                return -1;
            }else if (sc1 < sc2){
                return +1;
            }else{
                return 0;
            }
        }
}
 
Sorry voor de late reactie maar ik ben even niet meer op het forum geweest, maar aangezien niemand anders een oplossing heeft aangeboden wil ik het toch nog even doen... Ik heb je ScoreBeheren aangepast en commentaar toegevoegd.
Code:
public class ScoreBeheren {

     private ArrayList<Score> scores;

    /* 
     * 1) Je file moet wel ergens blijvend opgeslagen worden
     *    als je je file opslaat als highscore.txt beland het in je 
     *    werkgeheugen, als je het programma stopt verlies je je object
     *    ==> sla het op op je harde schijf
     * 2) Zorg dat je schrijfrechten hebt op de plaats waar je je file stockeert
     * 3) Geen echte fout maar sla een object niet op als een .txt, dit zorgt
     *    enkel voor verwarring, de file is geen leesbare text
     */
    private static final String HIGHSCORE_FILE = "C://users/ENZOVOORT.../highscore.obj";

    //Je moet gegevens kunnen invoegen en kunnen raadplegen
    ObjectOutputStream outputStream = null;
    ObjectInputStream inputStream = null;

    public ScoreBeheren() {
        scores = new ArrayList<Score>();
    }

    public ArrayList<Score> getScores() {
        loadScoreFile(); //Eerst scorefile inladen, dan sorteren
        /*
         * sort(); ==>dit hoef je trouwens hier niet te doen, het maakt niet uit hoe
         * ze opgeslagen worden, wel dat ze correct geafficheerd worden, dus zet dit in je
         * getHighscoreString()
         */

        return scores;
    }

    private void sort() {
        ScoreVergelijken comparator = new ScoreVergelijken();
        Collections.sort(scores, comparator);
    }

    public void addScore(String name, int score) {

        scores.add(new Score(name, score));
        updateScoreFile();
        loadScoreFile();
    }

    public void loadScoreFile() {
        try {
            inputStream = new ObjectInputStream(new FileInputStream(HIGHSCORE_FILE));
            scores = (ArrayList<Score>) inputStream.readObject();
        } catch (FileNotFoundException e) {
            System.out.println("[Laad] FNF Error: " + e.getMessage());
        } catch (IOException e) {
            System.out.println("[Laad] IO Error: " + e.getMessage());
        } catch (ClassNotFoundException e) {
            System.out.println("[Laad] CNF Error: " + e.getMessage());
        } finally {
            try {
                if (outputStream != null) {
                    outputStream.flush();
                    outputStream.close();
                }
            } catch (IOException e) {
                System.out.println("[Laad] Error: " + e.getMessage());
            }
        }
    }

    public void updateScoreFile() {
        try {
            outputStream = new ObjectOutputStream(new FileOutputStream(HIGHSCORE_FILE));
            outputStream.writeObject(scores);
        } catch (FileNotFoundException e) {
            System.out.println("[Update] Error: " + e.getMessage() + ", het programma probeert een nieuw bestand te maken");
        } catch (IOException e) {
            System.out.println("[Update] Error: " + e.getMessage());
        } finally {
            try {
                if (outputStream != null) {
                    outputStream.flush();
                    outputStream.close();
                }
            } catch (IOException e) {
                System.out.println("[Update] Error: " + e.getMessage());
            }
        }
    }

    public String getHighscoreString() {
        String highscoreString ="";
        int max = 10;
        sort(); //hier geplaatst!

        /*
         * Dit hoeft helemaal niet meer, je hebt je scores al...
         */
//        ArrayList<Score> scores1;
//        scores1 = getScores();

        int i = 0;
        int x = scores.size();
        if (x > max) {
            x = max;
        }
        while (i < x) {
            highscoreString += (i + 1) + ".\t" + scores.get(i).getNaam() + "\t\t" + scores.get(i).getScore() + "\n";
            i++;
        }
        return highscoreString;
    }

    public static void main(String[] args) {
        ScoreBeheren sb = new ScoreBeheren();
        if (new File(HIGHSCORE_FILE).exists()) {
            sb.getScores();
        }
        sb.addScore("ikke", 20);
        sb.addScore("hij", 14);
        sb.addScore("zij", 60);
        sb.addScore("ikke", 42);
        sb.addScore("hij", 0);
        sb.addScore("zij", 12);
        sb.addScore("ikke", 14);
        
        System.out.print(sb.getHighscoreString());

        sb.updateScoreFile();




    }
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan