Highscore mit Textdokument

Status
Nicht offen für weitere Antworten.

Andu

Mitglied
Moin,

habe ne Frage ^^

Ich will mit Java auf ein Textdokument Ergebnisse speichern, aber wie kann ich Java befehlen Texte in eine Datei verweisen und dort speichern?

Am besten wäre es noch wenn er nach und nach es auch ordnet, oder habt ihr andere Ideen wie ich sowas wie eine primitive Highscore erstellen kann!? ^^


MfG

Andu
 

EOB

Top Contributor
also du willst im prinzip nix anderen, als text in eine datei schreiben? hast du schon eine idee für die scores? also so in der art:


spieler1:1234 punkte
spieler2:4567 punkte
.....

oder wie jetzt?

grüße
 

EOB

Top Contributor
ah so...also ich würde da ne hashmap machen und als key den spielernamen und als value dann die score. das ganze dann serialisieren. wär das was? eine ganz einfache version wäre ja dann, eine textdatei, zb. scores.txt anzulegen und da eben deine spieler gefolgt von einem delimiter reinzuschreiben und zwar im append modus.

also so:

spieler1:666
spieler2:3452

und so weiter. musst halt da nur aufpassen, wenn sich die score mal ändert, dass dus an die richtige stelle updatest und nicht jedesmal einen neuen spieler reinschreibst, also 2 mal spieler 1 oder so.

grüße
 

Andu

Mitglied
ich weiß nicht welche Befehle ich dazu verwenden muss, bin ein anfänger und fange sozusagen von ganz von vorne an ^^
 

EOB

Top Contributor
:D...verstehe. also dann würde ich mal folgendes vorschlagen. es gibt da 2 möglichkeiten, eine ist leichter und die andre demnach etwas schwerer.


1. du hast ja die daten sicher in 2 variablen vorliegen. also eine int für die punktezahl und einen string für den spielernamen, nehm ich mal an. willst du die highscore speichern, dann erstellst du dir nen neuen string...und zwar so:

Code:
String score = playerName + ":" + playerScore;

score schreibst du dann in eine datei, im append modus. also spieler für spieler. wie man in eine datei schreibt, kannst du hier nachlesen.

2. als 2te möglichkeit kannst du eine hashmap verwenden. belies dich dazu am besten mal im netz. ich würde mir da eventuell eine klasse ertsllen, die eine hashmap ist (von hashmap erbt). sie hat also dann auch alle methoden von hashmap. du nutzt dann die methode put(object, object) und packst da deine werte rein.

Code:
DeineMapKlasse dmk = new DeineMapKlasse();
dmk.put(playerName, score);

wenn das alles fertig ist, kannst du die klasse serialisieren.

es gibt sicher noch weitere möglichkeiten...zum beispiel xml.

grüße
 
B

bygones

Gast
aber ueber objektserialisierung erhaelt man kein schoenes textdokument ....
 

EOB

Top Contributor
ach so, er wollte das zum ansehen...das stimmt. also wenn dus dir ansehen willst, geht nur text...logischer weise

grüße
 

André Uhres

Top Contributor
Kleine Demo mit Properties:
Code:
package basics;
/*
 * Score.java
 */
import java.io.*;
import java.util.*;
public class Score {
    private Properties p;
    private InputStream inStream;
    private OutputStream out;
    private SortedMap<String, Integer> playerMap;
    public Score() {
        p = new Properties();
        try {
            inStream = new FileInputStream("players.txt");
            p.load(inStream);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        Enumeration players =  p.propertyNames();
        playerMap = new TreeMap<String, Integer>();
        while(players.hasMoreElements()){
            String player = (String) players.nextElement();
            int score = Integer.parseInt(p.getProperty(player));
            playerMap.put(player, score);
        }
        for (String player : playerMap.keySet())
            System.out.println(player + ": " + playerMap.get(player));
        Random r = new Random();
        saveScore("player 1", r.nextInt(10000));
        saveScore("player 2", r.nextInt(10000));
    }
    private void saveScore(final String player, final int score){
        try {
            out = new FileOutputStream("players.txt");
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
        p.put(player, String.valueOf(score));
        try {
            p.store(out, "");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    public static void main(final String[] args) {new Score();}
}
 
B

bygones

Gast
Andre... bei deiner Map wird nach dem namen des spieles sortiert, nicht nach der punktzahl ;-)
 

EOB

Top Contributor
ja, wenn man nach den values sortieren will, sollte man sowas machen:

Code:
class Sorter implements Comparator {
  public int compare(Object o1, Object o2) {
    return new Integer((String)o1).compareTo(new Integer((String)o2));
  }
}

und dann

Code:
... = new TreeMap(new Sorter());

dann sollte es nach den values sortiert sein?

grüße
 

André Uhres

Top Contributor
deathbyaclown hat gesagt.:
Andre... bei deiner Map wird nach dem namen des spieles sortiert, nicht nach der punktzahl ;-)
Meine Demo soll nur zeigen, wie man die Highscores dauerhaft abspeichern kann.
Das Sortieren nach Highscores ist eher zweitrangig:
Code:
       List sortedScores = new ArrayList();
        for (String player : playerMap.keySet()){
            String score = String.valueOf(playerMap.get(player));
            sortedScores.add("           ".substring(score.length())+score + "=" + player);
        }
        Collections.sort(sortedScores);

Statt List könnte man natürlich auch SortedSet nehmen, dann spart man die sort-Anweisung:
SortedSet sortedScores = new TreeSet();
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben