Пример #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());
     }
   }
 }
Пример #2
0
 /**
  * Verarbeitet den Klick auf den Button "Aufgeben" aus der GUI, wobei dabei der Spieler, welcher
  * aufgeben geklickt hat, noch ermittelt werden muss. Da der Spieler, welcher aufgeben geklickt
  * hat, auf jedenfall verloren hat. Wird das Ergebnis des Spiels sofort in die Statistik
  * eingetragen.
  */
 @SuppressWarnings("static-access")
 public void aufgegebenGeklickt() {
   try {
     this.lnkStatistik = lnkStatistik.gibStatistik();
   } catch (StatistikException e) {
     lnkGUI.zeigeFehlerAn(
         "Die Statistikdatei ist fehlerhaft, Ihre Statistik wurde zurückgesetzt.");
   }
   Spieler spieler1, spieler2;
   spieler1 = lnkSpielstand.gibSpieler1();
   spieler2 = lnkSpielstand.gibSpieler2();
   if (spieler1.equals(lnkSpielstand.gibAktuellenSpieler())) {
     lnkStatistik.aktualisiereEintrag(
         spieler2, Spielausgang.sieg, this.gibStatistikunterteilung());
     lnkStatistik.aktualisiereEintrag(
         spieler1, Spielausgang.aufgegeben, this.gibStatistikunterteilung());
     this.lnkSpielstand.setzeSpielAusgang(Zustand.weiss);
   } else {
     lnkStatistik.aktualisiereEintrag(
         spieler1, Spielausgang.sieg, this.gibStatistikunterteilung());
     lnkStatistik.aktualisiereEintrag(
         spieler2, Spielausgang.aufgegeben, this.gibStatistikunterteilung());
     this.lnkSpielstand.setzeSpielAusgang(Zustand.schwarz);
   }
   lnkSpiel.setzeEnde(true);
   lnkGUI.actionPerformed(new java.awt.event.ActionEvent(this, 0, "Spiel_MenueEnde"));
 }
Пример #3
0
 /**
  * Verarbeitet den Klick auf den Button "speichern" aus der GUI, indem die GUI diese Methode
  * aufruft. Der Klick wird durch Delegation an die Spielstandklasse aufgelöst.
  */
 @SuppressWarnings("static-access")
 public void speichern() {
   if (lnkSpiel.istSpielZuEnde() == true) {
     if (this.gibSpielausgang(lnkSpielstand.gibSpieler1()) == Spielausgang.sieg) {
       lnkSpielstand.setzeSpielAusgang(Zustand.schwarz);
     } else if (this.gibSpielausgang(lnkSpielstand.gibSpieler1()) == Spielausgang.sieg) {
       lnkSpielstand.setzeSpielAusgang(Zustand.weiss);
     } else {
       lnkSpielstand.setzeSpielAusgang(Zustand.frei);
     }
   }
   lnkSpielstand.setzeKommentar(lnkGUI.speichern_gibKommentar());
   lnkSpielstand.setzeTitel(
       lnkSpielstand.gibSpieler1().gibName() + " vs " + lnkSpielstand.gibSpieler2().gibName());
   java.util.Date date = new java.util.Date();
   java.text.SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
   lnkSpielstand.setzeDatum(formatter.format(date));
   formatter.applyPattern("yyyy-MM-dd_hh-mm-ss");
   try {
     lnkSpielstand.speichern(this.SPEICHER_ORDNER + formatter.format(date) + ".xml");
     this.lnkGUI.speichern_erfolgreich();
   } catch (SpeichernException e) {
     this.lnkGUI.zeigeFehlerAn("Konnte nicht speichern!");
   }
 }