Hallo,
dies ist mein erster Eintrag hier, ich bin auf die Antworten gespannt.
Ich möchte einen Spielbau modellieren. Dazu übergebe ich von der Klasse Spielbaum einem Zugbewerter die momentane Spielsituation und einen Zug. Der Zugbewerter soll den Zug durchführen und am Ende eine Bewertung zurückgeben.
Dieser Vorgang soll für alle Züge wiederholt werden.
Mein Problem ist folgendes. Jeder neue Zug muss natürlich wieder von der ursprünglichen Spielsituation ausgehen.
Durch Durchführen eines Zuges wird diese ursprüngliche Spielsituation jedoch geändert und zwar leider nicht nur in der Klasse Zugbewerter, sondern eben auch in der Klasse Spielbaum. Das heißt ein neuer Zug geht dann von der geänderten Spielsituation aus, was er natürlich nicht sol.
Schuld darn ist natürlich, dass dem Zugbewerter nur die Referenz auf die Spielsituation übergeben wird.
Eine Lösung des Problems wäre, dass ich die Spielsituation vor jedem einzelnen Zug kopiere und den Zug auf dieser Kopie ausführen lasse. Bei einem zu erwartenden sehr großen Spielbaum erzeuge ich dabei aber eine enorme Menge an neuen Objekten, die schnell den Speicher auffressen. Gibt es eine Möglichkeit, die Variable spielsituation in der Klasse Spielbaum davor zu bewahren, verändert zu werden.
Im folgenden Code habe ich das Problem kurz dargestellt. Führt man ihn aus, sieht man, dass die Bewertung stets von einer neuen Spielsituation ausgeht.
Also, bin mal gespannt, was kommt
Viele Grüße Thomas
Code:
import java.awt.Point;
public class Spielbaum {
Point spielsituation=new Point (5,3);
int [] bewertung=new int[10];
ZugBerechner zugBerechner;
public static void main(String[] args) {
Spielbaum sp = new Spielbaum();
}
public Spielbaum() {
starteBerechnung();
}
public void starteBerechnung() {
for (int i=0;i<=10;i++) {
zugBerechner=new ZugBerechner(spielsituation,i);
System.out.print("Bewertung von Zug" + i );
System.out.println(": "+ zugBerechner.bewertung);
}
}
public class ZugBerechner{
Point spielsituation;
int zug;
int bewertung;
public ZugBerechner(Point spielsituation, int zug) {
this.spielsituation=spielsituation;
this.zug=zug;
bewerteZug(spielsituation,zug);
}
public void bewerteZug(Point spielsituation, int zug) {
spielsituation.x=spielsituation.x+zug;
bewertung=spielsituation.x+10;
}
}
}