private bool HatVerloren(int spieler) { // Siegbedingungen if (Dienste.Zaehle(this.spielfeldHandler.SpielSteineGesetzt, spieler) < 3 && (spielPhase == 2 || spielPhase == 3) && !steinZiehen) { AktualisiereStatus(string.Format("Spieler {0} hat weniger als 3 Steine!", spieler), string.Format("Spieler {0} hat verloren.", spieler)); spielVorbei = true; return(true); } return(false); }
/// <summary> /// Stellt den wiederholbaren Spielablauf dar. Muss ständig aufgerufen werden, solange das Spiel nicht vorbei ist. /// </summary> public void Update() { if (!spielVorbei) { if (spielfeldHandler.mausStatus == MouseButtonState.Pressed && Mouse.LeftButton == MouseButtonState.Released) { int column = 0; int row = 0; if (spielfeldHandler.ValidateClickedCell(out column, out row)) { Image img = spielfeldHandler.SelectImageControl(column, row); //Phase 1: Steine setzen if (spielPhase == 1) { if (img != null && img.Source == null && !steinInZugGesetzt) { if (spieler == 1) { img.Source = spielsteine.Weiss; weissGesetzt++; zugBeendet = true; steinInZugGesetzt = true; } else if (spieler == 2) { img.Source = spielsteine.Schwarz; schwarzGesetzt++; zugBeendet = true; steinInZugGesetzt = true; } spielfeldHandler.SpielSteineGesetzt[column, row] = spieler; img.Visibility = Visibility.Visible; AktualisiereStatus(string.Format("Stein wurde auf Feld {0}/{1} gesetzt.", column, row)); if (schwarzGesetzt == 9 && weissGesetzt == 9 && zugBeendet) { spielPhase++; } } } //Phase 2: Steine ziehen //Phase 3: ein Spieler hat weniger als 4 Steine und darf frei ziehen else if (spielPhase == 2 || spielPhase == 3) { if (spielfeldHandler.SpielSteineGesetzt[column, row] == spieler && !steinZiehen) { img.Source = null; this.spielfeldHandler.SpielSteineGesetzt[column, row] = 0; steinZiehen = true; img.Visibility = Visibility.Hidden; this.spielfeldHandler.spalteAlt = column; this.spielfeldHandler.reiheAlt = row; AktualisiereStatus(string.Format("Spieler {0} zieht einen Stein.", spieler), "Setzen Sie ihn auf ein neues Feld."); } else if (spielfeldHandler.SpielSteineGesetzt[column, row] == 0 && steinZiehen && (spielfeldHandler.DarfZiehen(column, row) || Dienste.Zaehle(spielfeldHandler.SpielSteineGesetzt, spieler) < 4)) { if (spieler == 1) { img.Source = spielsteine.Weiss; } else if (spieler == 2) { img.Source = spielsteine.Schwarz; } img.Visibility = Visibility.Visible; this.spielfeldHandler.SpielSteineGesetzt[column, row] = spieler; steinZiehen = false; if (!(column == this.spielfeldHandler.spalteAlt && row == this.spielfeldHandler.reiheAlt)) { zugBeendet = true; steinInZugGesetzt = true; AktualisiereStatus(string.Format("Spieler {0} hat den Stein auf {1}/{2} gesetzt.", spieler, column, row)); } else { AktualisiereStatus(string.Format("Stein wurde auf gleiches Feld gesetzt."), "Wählen Sie einen neuen Stein."); } } if ((Dienste.Zaehle(spielfeldHandler.SpielSteineGesetzt, 1) < 4 || Dienste.Zaehle(spielfeldHandler.SpielSteineGesetzt, 2) < 4) && zugBeendet && spielPhase == 2) { spielPhase++; } } //else if (spielPhase == 3) //{ //} //in allen Phasen gültige Funktionalitäten if (spielfeldHandler.Muehle(column, row, spieler) && steinInZugGesetzt) { AktualisiereStatus(string.Format("Spieler {0} hat eine Mühle!", spieler), "Entfernen Sie einen Stein des Gegenspielers."); spielfeldHandler.hatMuehle[spieler] = true; zugBeendet = false; } if (this.spielfeldHandler.hatMuehle[spieler]) { if (this.spielfeldHandler.SpielSteineGesetzt[column, row] != spieler && this.spielfeldHandler.SpielSteineGesetzt[column, row] != 0) { if (!this.spielfeldHandler.Muehle(column, row, spieler == 1 ? spieler + 1 : spieler == 2 ? spieler - 1 : -1)) { img.Source = null; img.Visibility = Visibility.Hidden; this.spielfeldHandler.SpielSteineGesetzt[column, row] = 0; this.spielfeldHandler.hatMuehle[spieler] = false; zugBeendet = true; AktualisiereStatus(string.Format("Spieler {0} hat den Stein auf Feld {1}/{2} entfernt.", spieler, column, row)); } else if (Dienste.Zaehle(this.spielfeldHandler.SpielSteineGesetzt, spieler == 1 ? spieler + 1 : spieler == 2 ? spieler - 1 : -1) < 4) { this.spielfeldHandler.hatMuehle[spieler] = false; zugBeendet = true; } } } } } //jeweiligen Zug beenden if (spieler == 1 && !this.spielfeldHandler.hatMuehle[spieler] && zugBeendet) { spieler++; zugBeendet = false; steinInZugGesetzt = false; } else if (spieler == 2 && !this.spielfeldHandler.hatMuehle[spieler] && zugBeendet) { spieler--; zugBeendet = false; steinInZugGesetzt = false; } this.spielfeldHandler.mausStatus = Mouse.LeftButton; if (this.HatVerloren(spieler)) { this.Verloren?.Invoke(this, new EventArgs()); } } }