M
member4711JF
Gast
Hi,
ich programmiere ein kleines Spiel und kann es in zwei Modis laufen lassen: entweder KI gegen User, oder KI gegen KI.
Mein problem ist jetzt dass ich für die Implementierung der Modies sehr unterschiedliche Klassen kreiert habe (von der GUI für die Userinteraktion mal ganz abgesehen), obwohl eigentliche in beiden Varianten das gleiche gemacht wird.
Der Ablauf bei KI gegen KI ist simpel:
Aber der Ablauf KI gegen User lässt sich einfach nicht schön programmieren (weil asynchron):
Je komplizierter die Spielpfade, desto unübersichtlicher wird die Implementierung durch die "User-Interrupts".
Idealerweise sollten beide Modis durch die gleiche spiele() methode implementiert werden. Ich möchte am liebsten eine Spielehandlingklasse unabhängig davon implementieren ob Benutzer oder KIs agieren.
Bisher fällt mir nur eine (unschöne) Lösung ein:
Jetzt aber die Frage an euch! Gibt es da noch andere Möglichkeiten der Implementierung der beiden Modies, beziehungsweise leicht einzubauende User-callbacks die den "Flow" der Spiel-Implementierung nicht stören? Hab mich bisher kaum mit sowas beschäftigen müssen...
Grüße und Danke im vorraus,
Sebastian
ich programmiere ein kleines Spiel und kann es in zwei Modis laufen lassen: entweder KI gegen User, oder KI gegen KI.
Mein problem ist jetzt dass ich für die Implementierung der Modies sehr unterschiedliche Klassen kreiert habe (von der GUI für die Userinteraktion mal ganz abgesehen), obwohl eigentliche in beiden Varianten das gleiche gemacht wird.
Der Ablauf bei KI gegen KI ist simpel:
Code:
void spiele() {
lass_KI_A_was_machen();
lass_KI_B_reagieren();
...
...
} //spiel beendet
Aber der Ablauf KI gegen User lässt sich einfach nicht schön programmieren (weil asynchron):
Code:
void spiele() {
lass_User_was_machen(); //er agiert hier auf einer GUI (JFrame etc.)
return; // !!! ich muss erst warten bis der benutzer was gemacht, solange kann die KI nicht reagieren
// lass_KI_reagieren() geht hier nicht
}
Code:
//call-back: die Spieleklasse muss darauf vertrauen dass diese Methode von der GUI aufgerufen sobald der
//Benutzer seine Aktion ausgeführt hat
void benutzer_hat_reagiert() {
lass_KI_reagieren()
... //weitere Spielpfade werden jedesmal (wie oben) durch das Benutzerhandling "zerhackt",
//was immer wieder neue call-back methoden erfordert
...
}
Je komplizierter die Spielpfade, desto unübersichtlicher wird die Implementierung durch die "User-Interrupts".
Idealerweise sollten beide Modis durch die gleiche spiele() methode implementiert werden. Ich möchte am liebsten eine Spielehandlingklasse unabhängig davon implementieren ob Benutzer oder KIs agieren.
Bisher fällt mir nur eine (unschöne) Lösung ein:
Code:
void spiele() {
lass_Spieler_A_was_tun(); (Benutzer oder KI)
while (!Spieler_A_hat_reagiert()) {
//loop solange bis der Spieler fertig ist
//auch hier muss man darauf vertrauen dass vom Spieler ein flag gesetzt wird sobald er fertig ist,
//sodass Spieler_A_hat_reagiert() true zurückliefert und die Schleife beendet wird
}
lass_Spieler_B_reagieren();
...
...
}
Jetzt aber die Frage an euch! Gibt es da noch andere Möglichkeiten der Implementierung der beiden Modies, beziehungsweise leicht einzubauende User-callbacks die den "Flow" der Spiel-Implementierung nicht stören? Hab mich bisher kaum mit sowas beschäftigen müssen...
Grüße und Danke im vorraus,
Sebastian