Logikbausteine in Seeing#

Neulich habe ich darüber geschrieben, wie Seeing# das Messenger-Pattern implementiert. Im Rahmen eines kleinen Memory-Spiels habe ich die letzten Tage damit einige kleine Logig-Komponenten umgesetzt, an denen das Pattern relativ gut funktioniert. In diesem Artikel geht es beispielsweise um eine Komponente, welche sich um das Aufdecken von Karten und das Erkennen von richtigen oder falschen Paaren kümmert und darauf entsprechend die Karten wieder verdeckt oder eine Folgelogik wie z. B. „Punktzahl hochzählen“ antriggert. Der Screenshot links gibt schon mal eine grobe Übersicht über die hier eingesetzten Klassen.

Grundsätzlich ist es ganz einfach, die Klasse PairUncoverLogic enthält hier im Prinzip die volle Spielelogik. Die Nachrichten bilden jeweils ein Ereignis ab, so sagt die Nachricht MainMemoryScreenEnteredMessage unserer Komponente, dass sich der Spieler ab diesem Zeitpunkt im Memory-Spiel befindet. Aus diesem Grund werden in der Implementierung (siehe Coding unten) beim Empfang dieser Nachricht alle Member zurückgesetzt. Ähnlich verhält es sich bei der Nachricht ObjectsClickedMessage. Hier wird, je nach aktuellem Zustand der Logik-Komponente, die ausgewählte Karte umgedreht und danach entsprechend die Nachricht CardUncoveredByPlayerMessage ausgelöst. Diese wiederum triggert die Prüflogik, ob aktuell ein Paar von Karten aufgedeckt ist oder eben nicht. Entsprechend werden die Karten danach wieder verdeckt oder die Nachricht CardPairUncoveredMessage ausgelöst. Hier das gesamte Coding dieser Klasse [1].

Ich denke, die Klasse sollte sich insgesamt relativ gut lesen und auch verstehen lassen. Cool an der Lösung hier finde ich die volle Unterstützung für async-await. An einer Stelle muss man auf eine Animation warten, an anderer Stelle auf ein Delay und so weiter. Alles kein Problem.

Verweise
[1] https://github.com/RolandKoenig/SeeingSharp/blob/master/Games/RKVideoMemory/RKVideoMemory/Game/PairUncoverLogic.cs

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.