class Game(EventObserver): def __init__(self, window_surface, container, event_handler): super().__init__(container, event_handler) self.react_cases = {RESPAWN: self.respawn, GAME_OVER: self.delete_ghost, EXIT: self.exit, WON: self.game_won} self.rect_matrix = RectMatrix(ACTUAL_LVL) self.fps = 60 self.current_key = K_LEFT self.current_enemy_key = K_RIGHT self.game_on = True self.window_surface = window_surface self.paused = False self.game_state = GameState(container, event_handler) self.reset_objects() self.game_loop = GameLoop(window_surface, container, self) def start_game(self): main_clock = pygame.time.Clock() while self.game_on: for event in pygame.event.get(): if event.type == KEYDOWN and event.key in PLAYER_ONE_KEYS + [K_s, K_w]: if event.key == K_s: self.fps -= 5 elif event.key == K_w: self.fps += 5 else: self.current_key = event.key elif event.type == QUIT: sys.exit(0) self.game_loop.perform_one_cycle([self.current_key]) main_clock.tick(self.fps) def game_won(self): self.container.pac_man.active = False del self.container.ghosts[:] def respawn(self): if self.game_state.lives_left != 0: self.reset_objects() self.event_handler.add_event(REPAINT) else: self.game_on = False def delete_ghost(self): self.container.del_objects() def exit(self): self.game_on = False def reset_objects(self): self.container.del_objects() PacMan(2, 1, self.rect_matrix, self.container, self.event_handler, self.game_state.score) self.reset_ghosts() def reset_ghosts(self): Blinky(13, 11, self.rect_matrix, self.container, self.event_handler) Pinky(11, 13, self.rect_matrix, self.container, self.event_handler) Inky(13, 13, self.rect_matrix, self.container, self.event_handler) Clyde(15, 13, self.rect_matrix, self.container, self.event_handler)