G
Guest
Gast
Hallo!
Sitze an einem Game of Life-Spiel und habe ein Problem bei der Größenänderung eines Arrays.
Am Anfang des Spiels wird ein Array erzeugt, mit dessen Hilfe ich die neuen Generationen berechne und ausgebe.
Nun soll aber das vorhandene Array vergrößert/verkleinert werden. In der Benutzerschnittstelle rufe ich daher die resize-Methode meiner Spielklasse auf. Die sieht so aus:
Dann wird der ein Konstruktor GameOfLife aufgerufen, der das aktuelle Spielfeld in ein neues Array kopiert:
Mein Problem ist jetzt, dass wenn ich nach dem resize-Aufruf in der Benutzerschnittstelle das nunmehr aktuelle Spielfeld ausgeben möchte, dieses immer noch genauso aussieht, wie das alte. Irgendwie stimmt da doch was mit dem kopieren nicht, oder?
Meine Ausgabe funktioniert so, dass Zellen, die in einer Liste mit lebenden Zellen enthalten ist, markiert werden.
Sieht da jemand meinen Denkfehler im Ablauf? Hab mir schon überlegt, ob ich vielleicht einen Counter brauche, der der Ausgabe-Methode sagt, dass ein neues Spielfeld vorliegt. Kommt mir aber ein bischen komisch vor...
Sitze an einem Game of Life-Spiel und habe ein Problem bei der Größenänderung eines Arrays.
Am Anfang des Spiels wird ein Array erzeugt, mit dessen Hilfe ich die neuen Generationen berechne und ausgebe.
Nun soll aber das vorhandene Array vergrößert/verkleinert werden. In der Benutzerschnittstelle rufe ich daher die resize-Methode meiner Spielklasse auf. Die sieht so aus:
Code:
public void resize(int cellCols, int cellRows) {
int[][] actField = actField();
GameOfLife resizedGame = new GameOfLife(actField, cellCols, cellRows);
resizedGame.getPopulation();
}[\code]
actField() soll das aktuelle Spielfeld liefern:
[code]int[][] actField() {
return field;
}
Dann wird der ein Konstruktor GameOfLife aufgerufen, der das aktuelle Spielfeld in ein neues Array kopiert:
Code:
public GameOfLife(int[][] field, int cellCols, int cellRows) {
resizedField = new int[cellCols][cellRows];
resizedField = copy(field);
fieldCreated(true);
}
int[][] copy (int[][] field) {
int colOld = field.length;
int[][] newField = new int[colOld][];
for(int i = 0; i < field.length; i++) {
int rowOld = field[i].length;
newField[i] = new int[rowOld];
System.arraycopy(field[i], 0, newField[i], 0, rowOld);
}
return newField;
}
Mein Problem ist jetzt, dass wenn ich nach dem resize-Aufruf in der Benutzerschnittstelle das nunmehr aktuelle Spielfeld ausgeben möchte, dieses immer noch genauso aussieht, wie das alte. Irgendwie stimmt da doch was mit dem kopieren nicht, oder?
Meine Ausgabe funktioniert so, dass Zellen, die in einer Liste mit lebenden Zellen enthalten ist, markiert werden.
Sieht da jemand meinen Denkfehler im Ablauf? Hab mir schon überlegt, ob ich vielleicht einen Counter brauche, der der Ausgabe-Methode sagt, dass ein neues Spielfeld vorliegt. Kommt mir aber ein bischen komisch vor...