Ü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):
- Spielstein in einem Kästchen setzen
- Spielstein in allen Kästchen setzen
- Überprüfung ob Kästchen bereits belegt ist
- Spielfeld leeren vor Spielbeginn
- Neustart des Spiels, wenn alle Kästchen belegt
- [optional] Unterschiedliche Farben für die Spieler - Die Erkärung dieses Schrittes habe ich im Video nicht mehr gemacht, weil das Video schon sehr lang war. Wenn du Probleme hast, dann schreib mir eine Mail. Ich beantworte deine Fragen gerne!
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.
- Schreibe eine Methode die ermittelt ob in der obersten Zeile einer der beiden Spieler alle 3 Kästchen (
Kaestchen_0_0bisKaestchen_0_2) belegt hat und somit gewonnen hat. - Nun stelle fest ob ein Spieler in einer der anderen 7 möglichen Gewinnreihen gewonnen hat.
- Wenn ein Spieler gewonnen hat, dann gebe einen Hinweis aus welcher Spieler gewonnen hat.
- Hebe die Gewinnreihe hervor indem du den Hintergrund der 3 Kästchen Gelb einfärbst.
- Bei einem Neustart des Spiels müssen alle Kästchen wieder die gleiche Hintergrundfarbe haben.
- [optional] Sofern du es noch nicht getan hast, mache einen
Commitfü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
- Ob ein Kästchen belegt ist oder nicht, zeigt dir momentan die
ContentEigenschaft des jeweiligenButtonan. Da imContentjedoch mehr als nur ein Text gespeichert werden kann, ist diese Eigenschaft nicht vom Typstring. Zum Glück gibt es jedoch dieToString()Methode. Sofern imContenttatsächlich einstringenthalten ist, gibt dir dieToString()Methode diesen Text im passenden Typ zurück. - 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
Buttonaufrufst, bekommst du eine recht übersichtliche Lösung. - Ausser
MessageBoxbrauche ich hier nichts weiter sagen, oder? - Das kannst du auch ohne Hinweis!
- 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:
- Die Schwerpunktseite Visual Studio auf LernMoment.de - auf dieser Seite sind meine wichtigsten Ressourcen zu Visual Studio verlinkt. Dort findest du u.a. auch einen Artikel zu den Tastaturkürzeln.
- Tipps für Einsteiger in Visual Studio - Video - in diesem Video zeige ich dir neben einigen Tastaturkürzeln weitere Tipps zum Umgang mit Visual Studio.
- Zugriff auf XAML-Elemente aus dem code-behind - wenn du nochmals nachlesen möchtest wie die verschiedenen Zugriffe auf die Steuerelemente aus dem code-behind funktionieren.
- Einführung in die MessageBox - hier nochmals der Artikel über die
MessageBox. Vielleicht magst du heute nochmals ein paar Details nachlesen 😉. - Mehr Details zur
ToString()Methode in diesem Video - In diesem Video erkläre ich dir was dieToString()Methode macht und wie du selber eine für deine Klasse schreiben kannst.
In wenigen Tagen bekommst du eine weitere Mail von mir mit meiner Musterlösung und der nächtsen Teilaufgabe.
Bis dahin wünsche ich dir viel Spaß beim Üben
Jan von LernMoment.de
