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