def game_loop(self): """The game loop for 1 player mode""" snake_length = 6 snake = Snake(snake_length, color=GREEN, game=self) apple = Apple(APPLE_SIZE, game=self) def game_reset(): nonlocal snake, apple snake = Snake(snake_length, color=GREEN, game=self) apple = Apple(APPLE_SIZE, game=self) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: self.game_exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT and snake.direction != 'RIGHT' and not snake.turned: snake.started = True snake.turned = True snake.turn('LEFT') elif event.key == pygame.K_RIGHT and snake.direction != 'LEFT' and not snake.turned: snake.started = True snake.turned = True snake.turn('RIGHT') elif event.key == pygame.K_UP and snake.direction != 'DOWN' and not snake.turned: snake.started = True snake.turned = True snake.turn('UP') elif event.key == pygame.K_DOWN and snake.direction != 'UP' and not snake.turned: snake.started = True snake.turned = True snake.turn('DOWN') if snake.hit_wall() or snake.hit_tail(): self.show_score(snake, game_reset) self.display.fill(WHITE) pygame.draw.rect(self.display, BLACK, [0, self.height, self.width, PANEL_HEIGHT]) self.message("Score: " + str(snake.score), RED, h_align='left', v_align='bottom', off_set_y=20) apple.draw() snake.draw() if snake.started: snake.go() snake.turned = False pygame.display.update() if snake.eat(apple): apple = Apple(APPLE_SIZE, game=self) CLOCK.tick(FPS)
def game_loop_2p(self): """Game loop for 2 player mode""" snake_length = 6 snake1 = Snake(snake_length, color=GREEN, game=self, name="Player 1") snake2 = Snake(snake_length, color=BLUE, game=self, img=SNAKE_HEAD_2, name="Player 2", offset_y=20) apple = Apple(APPLE_SIZE, game=self) def game_reset(): nonlocal snake1, snake2, apple snake1 = Snake(snake_length, color=GREEN, game=self, name="Player 1") snake2 = Snake(snake_length, color=BLUE, game=self, img=SNAKE_HEAD_2, name="Player 2", offset_y=20) apple = Apple(APPLE_SIZE, game=self) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: self.game_exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT and snake1.direction != 'RIGHT' and not snake1.turned: snake1.turn('LEFT') elif event.key == pygame.K_RIGHT and snake1.direction != 'LEFT' and not snake1.turned: snake1.turn('RIGHT') elif event.key == pygame.K_UP and snake1.direction != 'DOWN' and not snake1.turned: snake1.turn('UP') elif event.key == pygame.K_DOWN and snake1.direction != 'UP' and not snake1.turned: snake1.turn('DOWN') elif event.key == pygame.K_a and snake2.direction != 'RIGHT' and not snake2.turned: snake2.turn('LEFT') elif event.key == pygame.K_d and snake2.direction != 'LEFT' and not snake2.turned: snake2.turn('RIGHT') elif event.key == pygame.K_w and snake2.direction != 'DOWN' and not snake2.turned: snake2.turn('UP') elif event.key == pygame.K_s and snake2.direction != 'UP' and not snake2.turned: snake2.turn('DOWN') self.display.fill(WHITE) pygame.draw.rect(self.display, BLACK, [0, self.height, self.width, PANEL_HEIGHT]) self.message("Score: " + str(snake1.score), GREEN, h_align='left', v_align='bottom', off_set_y=20) self.message("Score: " + str(snake2.score), BLUE, h_align='right', v_align='bottom', off_set_y=20) apple.draw() snake1.draw() snake2.draw() snake1.go() snake2.go() if snake1.hit_wall() or snake1.hit_tail(): snake1.die = True if snake2.hit_wall() or snake2.hit_tail(): snake2.die = True if snake1.die and snake2.die: self.show_score(snake1, snake2, game_reset) pygame.display.update() if snake1.eat(apple) or snake2.eat(apple): apple = Apple(APPLE_SIZE, game=self) CLOCK.tick(FPS)