Als schnelles Spaßprojekt habe ich versucht, ein Solitairespiel zu schreiben. Aber beim Schreiben der Regelsysteme fühlte ich mich schmutzig , weil sich mein Code völlig unstrukturiert und nicht erweiterbar anfühlte , hauptsächlich, weil meine Spielelogik ein vollständiger Spaghetti-Code war.
Ich bin schon früher auf dieses Problem gestoßen und habe mich immer unwohl gefühlt, als ich diesen Teil meines Programms schrieb. Ich habe mich gefragt, ob es bewährte Best Practices gibt, wenn es darum geht, Regeln in einem Spiel zu definieren .
design-patterns
Dasuraga
quelle
quelle
Antworten:
Ich glaube nicht, dass es eine einzigartige Lösung gibt, da viele Überlegungen von dem jeweiligen Problem herrühren.
Sie können das Model View Controller-Muster verwenden: Dadurch wird Ihr Problem auf "Implementieren eines Verhaltens auf dem Controller" beschränkt, ein Verhalten, das immer den Regeln folgt.
Wenn es sich nicht um sehr einfache Regeln handelt, ist die Art und Weise, wie Sie sie organisieren, ein Problem der Ausdruckskraft . Sie sehen sich immer wieder den widersprüchlichen Anforderungen gegenüber, einfach (strukturiert) und ausdrucksstark zu sein (Spaßregeln schreiben).
Die Verwendung der MVC vereinfacht Ihre Arbeit, da das Modell einen Status formalisiert, dh den Kontext, in dem die Regeln durchgesetzt werden.
Sagte , dass, Sie finden es sinnvoll , die Steuerung mit dem zur Umsetzung Strategiemuster und / oder die Zustandsmuster , um ein komplexes Verhalten in Bezug auf den einfacheren schaltbaren Verhaltensweisen zu komponieren. Ein Verantwortungskettenmuster kann Ihnen dabei helfen, Regeln auszudrücken, während eine Zustandsmaschine sorgfältig verwendet werden sollte, da ihr "Zustand" teilweise die Bedeutung des Modells von "Zustand" überlappt.
Verwenden des Befehlsmuster innerhalb des Controllers sein nützlich kann auf beide Controller - resposiblities reduzieren (der Befehl wissen , wie mit dem Modell zu tun) und machen es einfach , die hinzuzufügen Undo / Redo - Funktionen im Controller.
In jedem Fall sollten Sie versuchen, die Entwurfsmuster als Richtlinie zu verwenden: Sie sind nützlich, um zu vermeiden, dass das Rad, insbesondere das Vierkantrad, neu erfunden wird, aber nicht jede Problemlösung besteht aus einem Bündel von (runden) Rädern, die zusammengefügt werden.
quelle
Ich bin mir nicht sicher, ob ich der Beste oder der Beste bin, aber ich benutze normalerweise das Observer-Muster . Es hat gut genug für mich funktioniert.
quelle
Wenn Sie den Job nicht schon oft erledigt haben, erhalten Sie immer Spaghetti-Code. Zu diesem Zeitpunkt haben Sie gerade erst begonnen: Was Sie haben, ist der grobe Entwurf einer vorläufigen Spezifikation. Lesen Sie hier einige der anderen Ratschläge und führen Sie einige ernsthafte Änderungen durch. Und dann noch etwas umschreiben, und dann ... Ich persönlich bin mir nie sicher, ob ich meinen Code in eine wirklich gute Form bringe oder es einfach satt habe, ihn umzuschreiben, aber ich scheine es es irgendwann richtig zu machen.
Das Problem von zwei Seiten angehen. Versuchen Sie, das Gesamtdesign sinnvoll zu gestalten und wählen Sie kleine Teile aus, die einfache Aufgaben bewältigen, und machen Sie sie richtig. Versuchen Sie dann, sich von beiden Enden zur Mitte durchzuarbeiten. Und dann von der Mitte zurück zu beiden Enden arbeiten. Dann von oben nach unten, dann von unten nach oben. Dann wiederholen Sie den gesamten Vorgang.
Im Wesentlichen haben Sie eine Sammlung von Klassen. Betrachten Sie Klasse A. Wenn Klasse A gut aufgebaut ist, funktionieren die Klassen, die sie verwenden, automatisch besser, egal wie gut oder schlecht sie sind. Wenn Klasse A Klassen gut verwendet, können diese Klassen mehr, egal wie gut oder schlecht sie sind. So organisieren Sie Ihre Klassen so gut Sie können, und stellen Sie dann sicher, dass jede Klasse die beste Klasse ist, die sie möglicherweise sein kann.
Es ist wichtig, es so richtig wie möglich zu machen. Schlechter Code verfolgt Sie bis zu dem Tag, an dem Sie ihn wegwerfen. Mit Software, ein bisschen extra Polieren immer zahlt sich aus. (Es sei denn, niemand benutzt den Code ...)
Um es zusammenzufassen: Sieh dir die tatsächlichen Ratschläge in den anderen Antworten an und schreibe deinen Code neu, bis du etwas bekommst, das dir gefällt.
quelle