@waschecht: Der Eventmanager, im ersten Diagramm ja noch Mediator genannt, vermittelt nur die Events zwischen Sendern und Empfängern. Der steuert nichts. Also brauchst Du wenn Du Räume steuern willst, einen Controller dafür. Wobei mir jetzt nicht ganz klar ist was für Dich oder das Beispiel Räume sind, und warum ein Raum auch ein Menü sein soll. Lass uns also lieber über einen MenuController reden, hinter dem ein Modell von einem Menü mit Menüpunkten und eventuell Untermenüs steht. Der sich beim Eventmanager wahrscheinlich als Listener für Tastendrücke, Mausbewegungen, und Mausklicks registrieren. Und selbst wird er Ergeignisse wie „Neues Menü”, „Menüpunkt X ist ausgewählt”, „Menüpunkt X ist aktiviert” und so weiter versenden. In dem Tutorial kommen ja solche Beispiele vor.
Da sind wir aber schon fast dabei ein eigenes Menü- oder vielleicht sogar Fenstersystem zu entwickeln. Ich glaube das würde ich nicht machen wenn ich ein Spiel implementieren wollte. Dann kommt man nämlich nicht zum Spiel selbst sondern macht einen riesigen Nebenkriegsschauplatz auf. Gerade wenn man das so entkoppelt wie möglich machen möchte wie in dem Tutorial, kann man sich da endlos in Detailfragen verzetteln und bekommt nichts Spielbares auf die Reihe.
Ich würde mir da ein fertiges Rahmenwerk suchen. Und wahrscheinlich nicht das aus dem Tutorial, denn da sind einige Sachen drin die nicht nach Python aussehen. Der macht das offenbar noch nicht lange, und da ist vielleicht mehr Java oder C# als Python drin. Mal ein Beispiel:
Code: Alles auswählen
def Connect(self, eventDict):
for key,event in eventDict.iteritems():
try:
self.__setattr__( key, event )
except AttributeError:
print "Couldn't connect the ", key
pass
Das ``pass`` ist unsinnig. Die Fehlerbehandlung ist keine, denn wenn man ein Event nicht verbinden konnte, sollte man das vielleicht nicht einfach nur ausgeben, aber ansonsten „verschlucken”. Ausserdem frage ich mich wann dieser `AttributeError` eigentlich überhaupt auftreten kann‽ Dann sollte man die „magischen” Attribute vermeiden wenn man das gleiche ohne erreichen kann. In diesem Fall also die `setattr()`-Funktion. Oder man macht es wissentlich und absichtlich magisch, dann würde man aber direkt das `__dict__`-Attribut aktualisieren. Was mir dabei semantisch nicht gefällt, ist das man aufpassen muss keine Attribute von der Klasse oder ihren Basisklassen damit zu verdecken. Da ist nicht nur eigener Code bei, sondern das ganze erbt von der `Sprite`-Klasse aus `pygame`. Man hat also nicht mal sicher unter Kontrolle welche Attribute es da geben könnte, sondern hängt von einer Bibliothek von jemand anderem ab.
Ansonsten wird auf Wörterbüchern öfter die `keys()`-Methode aufgerufen wo das gar nicht nötig ist. Statt Wahrheitswerten wird 0 und 1 verwendet. Irgendwo gibt es `__text` als Attributnamen…