/** * Methode, die vom Spielstand aufgerufen wird, wenn ein Zug durchgeführt wurde. Es wird * überprüft, ob im Spiel das Attribut „zuEnde“ gesetzt ist; in dem Fall wird spielEnde() zum * Ermitteln des Gewinners durchgeführt. Falls nicht, wird die GUI über den Spielerwechsel * informiert, um den nächsten Spieler zum Zug aufzufordern. Sonst wird das Spielende eingeleitet. * Zusätzlich wird ein boolean-Wert übergeben, der angibt, ob der Spieler an der Reihe die KI ist, * damit die GUI ggf. Buttons sperren kann. Falls der Spieler keine KI ist, ist die Methode hier * beendet. In dem Fall, dass der aktuelle Spieler KI ist und zuletzt kein Redo durchgeführt wurde * (Redo-Flag auf false), wird die Zug-Methode der KI ausgeführt, die einen Spielzug zurückgibt. * Dieser Spielzug wird anschließend mit der „fuehreSpielzugAus“-Methode vom Spiel angewandt. * * @param spielstand Wird durch das Observerpattern beim update der Methode als geupdatetes Objekt * übergeben * @param aktSpieler gibt den aktuellen Spieler an */ public synchronized void update(Observable observable, Object aktSpieler) { if (observable instanceof Spielstand) { // Spielstand update Spieler spieler = (Spieler) aktSpieler; if (spieler == null) { // weil notify nicht vernünftig implementiert wurde ... spieler = this.lnkSpielstand.gibAktuellenSpieler(); } // GUI this.lnkGUI.spiel_redoButtonAktivieren(this.lnkSpielstand.istRedoMoeglich()); this.lnkGUI.spiel_undoButtonAktivieren(this.lnkSpielstand.istUndoMoeglich()); this.lnkGUI.spiel_setzePunkteSpieler1( this.lnkSpielstand.gibPunkte(this.lnkSpielstand.gibSpieler1())); this.lnkGUI.spiel_setzePunkteSpieler2( this.lnkSpielstand.gibPunkte(this.lnkSpielstand.gibSpieler2())); this.lnkGUI.spiel_spielerWechsel(spieler); // KI if (spieler.gibTyp() != SpielerTyp.mensch && !this.kiDarfNichtSetzen && !lnkSpiel.istSpielZuEnde()) { this.lnkKIHaupt.erzeugeSpielzug(); } if (lnkSpiel.istSpielZuEnde()) { this.spielEnde(); } } else if (observable instanceof KI) { // KI update try { this.lnkSpiel.fuehreSpielzugAus(this.lnkKIHaupt.gibSpielzug()); } catch (UngueltigerZugException e) { System.out.println( "Wir haben mist gemacht, die KI kann nicht vernünftig spielen!\n" + e.gibRegelBruch()); } } }