Hallo!
Ich versuche zur Zeit ein einfaches Brettspiel zu implementieren.
Nach jedem Zug möchte ich den momentanen Zustand des Spielbretts in eine TreeMap speichern, jedoch wird aus mir nicht ersichtlichen Gründen immer die alten Zustände überschrieben und ich habe dann nach x Zügen eine TreeMap mit x Einträgen die allerdings alle den letzen Zustand enthalten.
Konkret sieht das so aus:
Relvante Attribute:
Konstruktor:
Die nächste Funktion dient dazu die TreeMap zu updaten, das heisst das aktuelle Brett wird hinzugefügt. Sie wird am Ende jedes Zuges aufgerufen.
Nun die main Methode:
Die Korrekte Bildschirmausgabe müsste nun sein:
Ausgegeben wird aber:
Ich hab keine Ahnung was da falsch läuft.
Ich hab sogar mal die updateHistory() Methode auskommentiert in der Spielzug-Methode, d.h. es war dann nur ein einziger Eintrag in der TreeMap und zwar das Startbrett wie es sein soll. Hab ich allerdings einen Zug ausgeführt wurde auf mysteriöse Weise dieses Startbrett aus der Map entfernt und das Aktuelle eingefügt, ohne mein Zutun ( wie gesagt, Methode war auskommentiert...)
Ich vermute dass ich unter umständen die TreeMap Implementierung nicht gut genug kenne aber in der API habe ich nichts gefunden was dieses Verhalten erklären würde.
Bin über jede Hilfe dankbar
MFG d0n
Ich versuche zur Zeit ein einfaches Brettspiel zu implementieren.
Nach jedem Zug möchte ich den momentanen Zustand des Spielbretts in eine TreeMap speichern, jedoch wird aus mir nicht ersichtlichen Gründen immer die alten Zustände überschrieben und ich habe dann nach x Zügen eine TreeMap mit x Einträgen die allerdings alle den letzen Zustand enthalten.
Konkret sieht das so aus:
Relvante Attribute:
Java:
private int board[];
private TreeMap<Integer, int[]> history;
Konstruktor:
Java:
public Kalaha(int numberofgems) {
TreeMap<Integer, int[]> tmpMap = new TreeMap<Integer, int[]>();
int board[] = new int[14];
//gekürzt
// Befüllen des Bretts
//gekürzt
this.board = board;
tmpMap.put(0, getBoard()); // getBoard() normaler Getter
setHistory(tmpMap); //normaler Setter
}
Die nächste Funktion dient dazu die TreeMap zu updaten, das heisst das aktuelle Brett wird hinzugefügt. Sie wird am Ende jedes Zuges aufgerufen.
Java:
public void updateHistory() {
TreeMap<Integer, int[]> tmpMap = new TreeMap<Integer, int[]>(
getHistory());
tmpMap.put(getHistory().lastKey() + 1, getBoard());
setHistory(tmpMap);
}
Nun die main Methode:
Java:
public static void main(String[] args) {
Kalaha k = new Kalaha(3);
//printArray() ist Hilfsfunktion die einfach ein Array auf der Konsole ausgibt;
printArray(k.getHistory().get(0));
System.out.println(k.getHistory().lastKey());
// Hier werden 2 Spielzüge ausgeführt
k.moveGems(0, Player.S1);
k.moveGems(1, Player.S1);
printArray(k.getHistory().get(0));
printArray(k.getHistory().get(1));
printArray(k.getHistory().get(2));
System.out.println(k.getHistory().lastKey());
Die Korrekte Bildschirmausgabe müsste nun sein:
Java:
3 - 3 - 3 - 3 - 3 - 3 - 0 - 3 - 3 - 3 - 3 - 3 - 3 - 0 -
0
3 - 3 - 3 - 3 - 3 - 3 - 0 - 3 - 3 - 3 - 3 - 3 - 3 - 0 -
0 - 4 - 4 - 4 - 3 - 3 - 0 - 3 - 3 - 3 - 3 - 3 - 3 - 0 -
0 - 0 - 5 - 5 - 4 - 4 - 0 - 3 - 3 - 3 - 3 - 3 - 3 - 0 -
2
Ausgegeben wird aber:
Java:
3 - 3 - 3 - 3 - 3 - 3 - 0 - 3 - 3 - 3 - 3 - 3 - 3 - 0 -
0
0 - 0 - 5 - 5 - 4 - 4 - 0 - 3 - 3 - 3 - 3 - 3 - 3 - 0 -
0 - 0 - 5 - 5 - 4 - 4 - 0 - 3 - 3 - 3 - 3 - 3 - 3 - 0 -
0 - 0 - 5 - 5 - 4 - 4 - 0 - 3 - 3 - 3 - 3 - 3 - 3 - 0 -
2
Ich hab keine Ahnung was da falsch läuft.
Ich hab sogar mal die updateHistory() Methode auskommentiert in der Spielzug-Methode, d.h. es war dann nur ein einziger Eintrag in der TreeMap und zwar das Startbrett wie es sein soll. Hab ich allerdings einen Zug ausgeführt wurde auf mysteriöse Weise dieses Startbrett aus der Map entfernt und das Aktuelle eingefügt, ohne mein Zutun ( wie gesagt, Methode war auskommentiert...)
Ich vermute dass ich unter umständen die TreeMap Implementierung nicht gut genug kenne aber in der API habe ich nichts gefunden was dieses Verhalten erklären würde.
Bin über jede Hilfe dankbar
MFG d0n