Hallo,
Ich programmiere gerade ein kleines Spiel und bin dabei eine vernünftige Speicherfunktion zu machen.
Jetzt kann ich zwar schon Level in eine Datei speichern und auch wieder laden, allerdings habe ich beim Laden das Problem, dass ich nur wiederholt den letzten Speicherstand angezeigt bekomme...
Ich benutze für die Speicherstände eine List, die ich mit dem datenarray initialisiere:
Die Speichern Methode:
Die Methode, die die Speicherstände auflstet und Knöpfe daraus macht:
Dann sollte eigentlich eine Reihe von Knöpfen rauskommen, die so aussieht:
-Level 1
-Level 2
-Level 3
-Level 4
-Level 5
-Level 6
Was aber rauskommt ist das:

Die Dateien im Ordner sind richtig und zeigen alle den korrekten Namen an.
Das Problem muss also irgendwo beim Laden der Speicherstände liegen.
#EDIT:
Den ganzen Post das dritte mal geschrieben!
Die automatisch Speichern Funktion klappt nicht!
Ich programmiere gerade ein kleines Spiel und bin dabei eine vernünftige Speicherfunktion zu machen.
Jetzt kann ich zwar schon Level in eine Datei speichern und auch wieder laden, allerdings habe ich beim Laden das Problem, dass ich nur wiederholt den letzten Speicherstand angezeigt bekomme...
Ich benutze für die Speicherstände eine List, die ich mit dem datenarray initialisiere:
Die Speichern Methode:
Java:
knoepfe.toFirst();
while (knoepfe.hasAccess()) {
Flaeche co = (Flaeche) knoepfe.getObject();
if (co.callback.equals("speichernan")) {
if (co.name.startsWith(speichertext)) {
co.name = speichertext;
speichern = false;
if (speichertext.length()>0) {
if (anzeige.equals("spiel")) {
Speicherstand speicherstand0 = new Speicherstand(speichertext,aktuell,bots,aktuell.spawnX,aktuell.spawnY);
//speicherstaende.append(speicherstand0);
Knopfcallback("speichernstopp");
text = "Karte "+speichertext+" gespeichert.";
textzeit = 100;
try {
File f = new File(path+speichertext+".msav");
BufferedWriter b = new BufferedWriter(new FileWriter(f,true));
PrintWriter printWriter = new PrintWriter(b,true);
//System.out.println("Filewriter '"+path+speichertext+".msav' erstellt.");
printWriter.println(speicherstand0.toString());
//printWriter.println(s);
printWriter.flush();
printWriter.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("Fehler beim Speichern in Datei.");
}
speichertext = "";
}
else if (anzeige.equals("editor")) {
Speicherstand speicherstand0 = new Speicherstand(speichertext,edited,edibots,edited.spawnX,edited.spawnY);
//speicherstaende.append(speicherstand0);
Knopfcallback("speichernstopp");
text = "Karte "+speichertext+" gespeichert.";
textzeit = 100;
try {
File f = new File(path+speichertext+".msav");
BufferedWriter b = new BufferedWriter(new FileWriter(f,true));
PrintWriter printWriter = new PrintWriter(b,true);
//System.out.println("Filewriter '"+path+speichertext+".msav' erstellt.");
speicherstaende.toFirst();
while(speicherstaende.hasAccess()) {
Object o = (Speicherstand)speicherstaende.getObject();
if (((Speicherstand)o).name.equals(speichertext)) {
printWriter.println(((Speicherstand)o).toString());
//printWriter.println((Speicherstand)o);
}
speicherstaende.next();
}
printWriter.flush();
printWriter.close();
} catch (IOException e) {
e.printStackTrace();
System.out.println("Fehler beim Speichern in Datei.");
}
speichertext = "";
}
}
else {
text = "Ungültiger Name.";
textzeit = 100;
}
}
}
knoepfe.next();
}
Die Methode, die die Speicherstände auflstet und Knöpfe daraus macht:
Java:
laden = true;
machknopf("Zurück",getWidth()/2-30,140,60,20,"ladenstopp");
int zaehler = 0;
//Provisorisch
// speicherstaende.toFirst();
// while (speicherstaende.hasAccess()) {
// Speicherstand bla = (Speicherstand) speicherstaende.getObject();
// machknopf(bla.name,getWidth()/2-90,175+zaehler,180,20,"laden/"+bla.name);
// zaehler += 35;
// speicherstaende.next();
// }
//Laden aus Datei
File path = new File("main/saves");
File[] dateien = path.listFiles();
//Hier werden die Speicherstände auf 0 gesetzt!
speicherstaende = new List();
for (int i = 0; i < dateien.length; i++) {
try {
FileReader fr = new FileReader(dateien[i]);
BufferedReader br = new BufferedReader(fr);
String info = br.readLine();
//Konstruktor:String n, Spielfeld m, List k,int x1, int y1
//toString: name+"#"+x+"#"+y+"#"+map.toString()+"#"+kis
//...
//Hier werden die Variablen initialisiert
//...
Speicherstand sps = new Speicherstand(name0,new Spielfeld(spfname0,sizeX0,sizeY0,gbt0),k0,x0,y0);
speicherstaende.append(sps);
}
catch(Exception e) {
System.out.println("Fehler beim Lesen der Speicherstände");
}
}
speicherstaende.toFirst();
while (speicherstaende.hasAccess()) {
Speicherstand cs = (Speicherstand) speicherstaende.getObject();
machknopf(cs.name,getWidth()/2-90,175+zaehler,180,20,"laden/"+cs.name);
zaehler += 35;
speicherstaende.next();
}
Dann sollte eigentlich eine Reihe von Knöpfen rauskommen, die so aussieht:
-Level 1
-Level 2
-Level 3
-Level 4
-Level 5
-Level 6
Was aber rauskommt ist das:

Die Dateien im Ordner sind richtig und zeigen alle den korrekten Namen an.
Das Problem muss also irgendwo beim Laden der Speicherstände liegen.
#EDIT:
Den ganzen Post das dritte mal geschrieben!
Zuletzt bearbeitet: