Übung #4: Gewinner ermitteln und anzeigen

Übung #4: Gewinner ermitteln und anzeigen

Mmmmmoin und willkommen zur vierten Übung im WPF-Übungskurs für Einsteiger!

Heute ist es soweit! Du fügst die weitere Logik hinzu und hast damit bereits ein komplett funktionsfähiges TicTacToe-Spiel. Damit sind wir zwar noch nicht am Ende des Übungskurses, schließlich will ich dir noch coole Dinge wie das DataGrid und Datenbindung zeigen, aber du hast einen ersten wichtigen Meilenstein geschafft.

Musterlösung der letzten Aufgabe

Musterlösung: Hier meine Musterlösung als zip-Datei.

Musterlösung Schritt-für-Schritt (durch Klick auf die Links siehst du die Änderungen im Quellcode von einem Schritt zum nächsten):

  1. Spielstein in einem Kästchen setzen
  2. Spielstein in allen Kästchen setzen
  3. Überprüfung ob Kästchen bereits belegt ist
  4. Spielfeld leeren vor Spielbeginn
  5. Neustart des Spiels, wenn alle Kästchen belegt
  6. [optional] Unterschiedliche Farben für die Spieler

Bonus: Welche Fehlerquellen hast du in deinem Quellcode gefunden? Teile sie mit uns oder schaue was andere Teilnehmer an ihrer Lösung für Fehlerquellen erkannt haben. An diesem GitHub Issue kannst du in die Diskussion einsteigen.

Die neue Aufgabe

Im folgenden geht es darum, dass du ermittelst ob es einen Gewinner gibt. Dabei spreche ich teilweise von einer Gewinnreihe. Damit meine ich eine Zeile, Spalte oder Diagonale mit 3 gleichen Spielsteinen.

  1. Schreibe eine Methode die ermittelt ob in der obersten Zeile einer der beiden Spieler alle 3 Kästchen (Kaestchen_0_0 bis Kaestchen_0_2) belegt hat und somit gewonnen hat.
  2. Nun stelle fest ob ein Spieler in einer der anderen 7 möglichen Gewinnreihen gewonnen hat.
  3. Wenn ein Spieler gewonnen hat, dann gebe einen Hinweis aus welcher Spieler gewonnen hat.
  4. Hebe die Gewinnreihe hervor indem du den Hintergrund der 3 Kästchen Gelb einfärbst.
  5. Bei einem Neustart des Spiels müssen alle Kästchen wieder die gleiche Hintergrundfarbe haben.
  6. [optional] Sofern du es noch nicht getan hast, mache einen Commit für deine ganzen Änderungen und schiebe alles via Sync auf GitHub.

Bonus: Auch heute finde ich es wieder super wichtig, dass du dir Gedanken machst über mögliche Fehlerquellen in deiner Lösung. Am besten du teilst dein Gedanken gleich mit uns an diesem GitHub Issue. Das bringt dich beim Lernen wirklich weiter!

Lösungshinweise

  1. Ob ein Kästchen belegt ist oder nicht, zeigt dir momentan die Content Eigenschaft des jeweiligen Button an. Da im Content jedoch mehr als nur ein Text gespeichert werden kann, ist diese Eigenschaft nicht vom Typ string. Zum Glück gibt es jedoch die ToString() Methode. Sofern im Content tatsächlich ein string enthalten ist, gibt dir die ToString() Methode diesen Text im passenden Typ zurück.
  2. Bedenke, dass jedes Steuerelement ein ganz normales Objekt ist, welches du im C# Quellcode “herumreichen” kannst. Wenn du eine Methode schreibst die 3 Kästchen vergleicht ob sie den gleichen Inhalt haben (wie in Schritt 1 beschrieben) und diese dann für alle möglichen “Gewinnreihen” mit den jeweiligen Button aufrufst, bekommst du eine recht übersichtliche Lösung.
  3. Ausser MessageBox brauche ich hier nichts weiter sagen, oder?
  4. Das kannst du auch ohne Hinweis!
  5. Wird wahrscheinlich schon “automagisch” klappen bei dir. Aber testen solltest du es trotzdem.

Weiterführende Artikel / Videos

Im Lösungsvideo zur Übung #3 habe ich dir u.a. einige Tastaturkürzel für Visual Studio vorgestellt. In diesem Kontext könnten auch folgende Ressourcen für dich spannend sein:

Du möchtest automatisch informiert werden und alle 3 Tage die Musterlösung und nächste Teilaufgabe bekommen? Dann melde dich hier an:

Bis dahin wünsche ich dir viel Spaß beim Üben

Jan von LernMoment.de