// Durchfuehrung eines Spiels public void spielen() { // Spielvorbereitung this.schiedsrichter.initialisiereSpiel(); // es wird gemaess der Spielregeln gezogen; // nach jedem Spielzug kontrolliert der Schiedsrichter Spieler aktuellerSpieler = this.schiedsrichter.werIstAmZug(); while (true) { Spielzug zug; try { zug = aktuellerSpieler.naechsterSpielzug(); } catch (Exception exc) { // wenn waehrend der Ausfuehrung der Methode ein // Fehler auftritt, hat der Spieler verloren this.schiedsrichter.schreib( "Spieler " + aktuellerSpieler.liefereSpielerTyp() + " hat die folgende Exception erzeugt\n" + " und damit verloren: " + exc.toString()); return; // Spielende } if (!this.schiedsrichter.istSpielzugOk(aktuellerSpieler, zug)) { this.schiedsrichter.schreib( "Spieler " + aktuellerSpieler.liefereSpielerTyp() + " hat sich nicht an die\n" + "Spielregeln gehalten und damit\n" + "verloren!"); return; // Spielende } if (this.schiedsrichter.istSpielBeendet()) { // die verbliebenen Koerner muessen noch in die // Kalahs gepackt werden Spieler spielerA = this.schiedsrichter.getSpielerA(); spielerA.sammleResteUndBringSieZumKalah(); if (!this.schiedsrichter.istEndzustandVonSpielerAOk()) { this.schiedsrichter.schreib( "Spieler A" + " hat sich nicht an die\n" + "Spielregeln gehalten und damit\n" + "verloren!"); return; // Spielende } Spieler spielerB = this.schiedsrichter.getSpielerB(); spielerB.sammleResteUndBringSieZumKalah(); if (!this.schiedsrichter.istEndzustandVonSpielerBOk()) { this.schiedsrichter.schreib( "Spieler B" + " hat sich nicht an die\n" + "Spielregeln gehalten und damit\n" + "verloren!"); return; // Spielende } // Siegerehrung Spieler sieger = this.schiedsrichter.liefereSieger(); if (sieger == null) { this.schiedsrichter.schreib("Unentschieden!"); // zur Belohnung duerfen die Hamster noch die // Koerner in ihren Kalahs fressen aktuellerSpieler.spielBeenden(false); Spieler gegner = this.schiedsrichter.liefereGegner(aktuellerSpieler); gegner.spielBeenden(false); } else { int punkteA = this.schiedsrichter.getPunkteA(); int punkteB = this.schiedsrichter.getPunkteB(); this.schiedsrichter.schreib( "Endstand: " + punkteA + " : " + punkteB + "\n" + "Spieler " + sieger.liefereSpielerTyp() + " hat gewonnen!"); // zur Belohnung duerfen die Hamster noch die // Koerner in ihren Kalahs fressen sieger.spielBeenden(true); Spieler gegner = this.schiedsrichter.liefereGegner(sieger); gegner.spielBeenden(false); } return; // Spielende } // naechste Runde aktuellerSpieler = schiedsrichter.werIstAmZug(); } }