def loop(self): clock = pygame.time.Clock() snake = Snake(self.display) apple = Apple(self.display) x_change = 0 y_change = 0 self.score = 0 while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: x_change = -Config['snake']['speed'] y_change = 0 elif event.key == pygame.K_RIGHT: x_change = Config['snake']['speed'] y_change = 0 elif event.key == pygame.K_UP: x_change = 0 y_change = -Config['snake']['speed'] elif event.key == pygame.K_DOWN: x_change = 0 y_change = Config['snake']['speed'] # Fill background and draw game area self.display.fill(Config['colors']['green']) pygame.draw.rect(self.display, Config['colors']['black'], [ Config['game']['bumper_size'], Config['game']['bumper_size'], Config['game']['height'] - Config['game']['bumper_size'] * 2, Config['game']['width'] - Config['game']['bumper_size'] * 2 ]) # Draw an apple apple_rect = apple.draw() # Move and Re-Draw Snake snake.move(x_change, y_change) snake_rect = snake.draw() snake.draw_body() # Detect collison with wall bumper_x = Config['game']['width'] - Config['game']['bumper_size'] bumper_y = Config['game']['height'] - Config['game']['bumper_size'] if (snake.x_pos < Config['game']['bumper_size'] or snake.y_pos < Config['game']['bumper_size'] or snake.x_pos + Config['snake']['width'] > bumper_x or snake.y_pos + Config['snake']['height'] > bumper_y): self.loop() # Detect collision with apple if apple_rect.colliderect(snake_rect): apple.randomize() self.score += 1 snake.eat() # Collide with Self if len(snake.body) >= 1: for cell in snake.body: if snake.x_pos == cell[0] and snake.y_pos == cell[1]: self.loop() # Initialize font and draw title and score text pygame.font.init() font = pygame.font.Font('./assets/Now-Regular.otf', 28) score_text = 'Score: {}'.format(self.score) score = font.render(score_text, True, Config['colors']['white']) title = font.render('Anaconda', True, Config['colors']['white']) title_rect = title.get_rect(center=(Config['game']['width'] / 2, Config['game']['bumper_size'] / 2)) score_rect = score.get_rect( center=(500 / 2, Config['game']['height'] - Config['game']['bumper_size'] / 2)) self.display.blit(score, score_rect) self.display.blit(title, title_rect) pygame.display.update() clock.tick(Config['game']['fps'])
def loop(self): clock = pygame.time.Clock() self.score = 0 apple = Apple(self.display) snake = Snake(self.display) x_change = 0 y_change = 0 while True: # This code below will be called for each frame # Iterate through our user input events for event in pygame.event.get(): if event.type == pygame.QUIT: exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: x_change = -Config['snake']['speed'] y_change = 0 elif event.key == pygame.K_RIGHT: x_change = Config['snake']['speed'] y_change = 0 elif event.key == pygame.K_UP: x_change = 0 y_change = -Config['snake']['speed'] elif event.key == pygame.K_DOWN: x_change = 0 y_change = Config['snake']['speed'] self.display.fill(Config['colors']['green']) pygame.draw.rect( self.display, Config['colors']['black'], [ Config['game']['bumper_size'], Config['game']['bumper_size'], Config['game']['width'] - Config['game']['bumper_size']*2, Config['game']['height'] - Config['game']['bumper_size']*2 ] ) apple_rect = apple.draw() snake.move(x_change, y_change) snake_rect = snake.draw() snake.draw_body() #Eating an apple if apple_rect.colliderect(snake_rect): apple.randomize() snake.eat() self.score += 1 # Handling collision bumper_x = Config['game']['width'] - Config['game']['bumper_size'] bumper_y = Config['game']['height'] - Config['game']['bumper_size'] if ( snake.x_pos < Config['game']['bumper_size'] or snake.y_pos < Config['game']['bumper_size'] or snake.x_pos + Config['snake']['width'] > bumper_x or snake.y_pos + Config['snake']['height'] > bumper_y or (snake.x_pos, snake.y_pos) in snake.body ): new_display = pygame.display.set_mode((Config['game']['width'], Config['game']['height'])) pygame.display.set_caption(Config['game']['caption']) new_game = Game(new_display, self.rl_agent) new_game.loop() ## Handling score and title pygame.font.init() font = pygame.font.Font('./assets/Now-Regular.otf', 28) score_text = 'Score: {}'.format(self.score) score = font.render(score_text, True, Config['colors']['white']) title = font.render('Anaconda', True, Config['colors']['white']) title_rect = title.get_rect( center=( Config['game']['width'] / 2, Config['game']['bumper_size'] / 2 ) ) score_rect = score.get_rect( center=( Config['game']['width'] / 2, Config['game']['height'] - Config['game']['bumper_size'] / 2 ) ) self.display.blit(score, score_rect) self.display.blit(title, title_rect) pygame.display.update() #Slows the loop iteration rate down to the rate of the game. #It accepts a number of ticks per second, so we have set our game timer to 30 frames per second. clock.tick(Config['game']['fps'])