Exemplo n.º 1
0
 /**
  * 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());
     }
   }
 }