class Game: controls_reversed = False score = 0 time_passed = 0 done = False screen = None obstacle_manager = None gameboard = None scoreboard = None topmenu = None gameovermenu = None state = GameState.MainMenu pump = None school_id = 1 score_increment = 1 def __init__(self, pump): pygame.init() self.clock = pygame.time.Clock() self.score_manager = ScoreManager(DB_FILE) self.pump = pump def start(self): self.screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT), MODE) self.gameboard = GameBoard((GAME_SIZE, GAME_SIZE), self) self.scoreboard = ScoreBoard((WINDOW_WIDTH - GAME_SIZE, WINDOW_HEIGHT), self.score_manager) self.topmenu = TopMenu((GAME_SIZE, WINDOW_HEIGHT - GAME_SIZE)) self.mainmenu = MainMenu((WINDOW_WIDTH, WINDOW_HEIGHT), self) self.gameovermenu = GameOverMenu((WINDOW_WIDTH, WINDOW_HEIGHT), self) while not self.done: key = pygame.key.get_pressed() left, right = self._get_movement(key) #if key[pygame.K_ESCAPE]: # self.done = True for event in pygame.event.get(): if event.type == pygame.QUIT: self.done = True if self.state == GameState.Running: self._tick(left, right) elif self.state == GameState.MainMenu: self._main_menu_tick(left, right) elif self.state == GameState.GameOver: self._game_over_tick() pygame.display.flip() self.time_passed = self.clock.tick(FPS) pygame.quit() def reverse_controls(self, reversed): self.controls_reversed = reversed def _get_movement(self, key): left = key[LEFT_KEY] == 1 right = key[RIGHT_KEY] == 1 if self.controls_reversed: left = not left right = not right return left, right def _main_menu_tick(self, select, switch): self.mainmenu.update(select, switch) self.screen.blit(self.mainmenu.render(), (0, 0)) def _game_over_tick(self): self.screen.blit(self.gameovermenu.render(), (0,0)) def _tick(self, left, right): direction = 0 if not (left and right): if left: direction = -1 elif right: direction = 1 self.score_manager.increment_score(int(self.score_increment)) self.score_increment += 0.002 self.gameboard.set_player_direction(direction) self.gameboard.tick(self.time_passed) self.screen.blit(self.gameboard.render(), (0, WINDOW_HEIGHT - GAME_SIZE)) self.screen.blit(self.scoreboard.render(), (GAME_SIZE, 0)) self.screen.blit(self.topmenu.render(), (0, 0)) def start_game(self, school): self.set_state(GameState.Running) self.gameboard.reset() self.scoreboard.reset() self.school_id = self.score_manager.get_school_id(school) self.gameboard.reset() self.score_increment = 1 def stop_game(self): self.set_state(GameState.GameOver) score = self.score_manager.get_score() self.score_manager.save_game(self.school_id) self.gameovermenu.update(score) self.controls_reversed = False def set_state(self, state): self.state = state def drink(self): self.scoreboard.remove_life() self.pump.drink() if self.scoreboard.is_game_over(): self.stop_game()