Events / Eventhandler
Verfasst: Samstag 13. März 2010, 22:51
Hallo.
Ich spiele gerne sinnlos mit Python rum und hab mir jetzt mal ein Eventsystem gebaut, das eben Events verwaltet.
Keine Events im Sinne von Partyevents, sondern Auslöser für irgendwelchen Programmcode
Beispielsweise für ein Spiel, in dem für jede Aktion theoretisch ein Event ausgelöst werden könnte.
Wenn es rundenbasiert ist, würde also am Anfang jeder Runde ein Event namens "Tick" ausgelöst werden oder so.
Was haltet ihr von dem Code und was würdet ihr anders machen?
Mir ist klar, dass es noch einige Kleinigkeiten zu verbessern gibt. zB lösche ich die TickEvents nicht, sondern zähle sie in den Minusbereich weiter, aber darauf kommt's ja erst mal nicht an.
Wie würdet ihr es machen bzw was würdet ihr verändern?
Danke schon mal für eure Antworten
Ich spiele gerne sinnlos mit Python rum und hab mir jetzt mal ein Eventsystem gebaut, das eben Events verwaltet.
Keine Events im Sinne von Partyevents, sondern Auslöser für irgendwelchen Programmcode

Beispielsweise für ein Spiel, in dem für jede Aktion theoretisch ein Event ausgelöst werden könnte.
Wenn es rundenbasiert ist, würde also am Anfang jeder Runde ein Event namens "Tick" ausgelöst werden oder so.
Was haltet ihr von dem Code und was würdet ihr anders machen?
Code: Alles auswählen
class EventHandler():
""" This class handles all events and triggers the assigned commands """
def __init__(self):
self.events = {'tick': [],
'sonstwas': [],
'...': []
}
def add_event(self, event):
if not isinstance(event, Event):
raise TypeError('event must be of type event')
if isinstance(event, TickEvent):
self.events['tick'].append(event)
# elif ...
else:
raise TypeError('Event type is not implemented')
def tick(self):
for event in self.events['tick']:
if event.duration == 0:
for func in event.functions:
func()
event.duration -= 1
class Event():
""" This is the base class for all events """
def __init__(self):
self.functions = []
def bind_function(self, function):
if hasattr(function, '__call__'):
self.functions.append(function)
else:
raise TypeError()
class TickEvent(Event):
""" This Event will be triggered after a certain amount of ticks """
def __init__(self, duration):
super().__init__()
self.duration = duration
# ---- Beispiel ---- #
def bla():
print ('ausgelöst')
handler = EventHandler()
test = TickEvent(14)
test.bind_function(bla)
handler.add_event(test)
for i in range(15):
print (i)
handler.tick()
Wie würdet ihr es machen bzw was würdet ihr verändern?
Danke schon mal für eure Antworten
