from event import * class abstract_gamestate: def draw(self, screen): pass def mouse_moved(self, pos): pass def mouse_pressed(self, pos): pass def key_pressed(self, key): pass def clocktick(self): pass def set_event_handler(self, event_handler): self.event_handler = event_handler def set_quit_method(self, quit_method): self.quit = quit_method def set_state_method(self, state_method): self.set_state = state_method ## The model takes care of everything involving ## the actual game getting played. class model: def __init__(self): pass def set_event_handler(self, event_handler): self.event_handler = event_handler def set_state(self, state): self.state = state ## Give the state access to some quit method ## and a method to switch to a new state. self.state.set_quit_method(self.quit) self.state.set_state_method(self.set_state) def notify(self, event): if isinstance(event, draw_event): ## Everything's supposed to draw itself ## onto the surface. Our state deligates ## this to everything involved. self.state.draw(event.get_screen()) elif isinstance(event, mouse_moved_event): self.state.mouse_moved(event.get_pos()) elif isinstance(event, mouse_pressed_event): self.state.mouse_pressed(event.get_pos()) elif isinstance(event, keyboard_event): self.state.key_pressed(event.get_key()) elif isinstance(event, tick_event): self.state.clocktick() def quit(self): self.event_handler.announce(quit_event())