import logging import pygame from pygame import locals as pglocals from config import RESOLUTION, SNAKE_COLOR, BACKGROUND_COLOR, FONT_COLOR, INITIAL_SNAKE_SIZE from objects import Snake, Apple from utils import get_score_text, Direction logging.basicConfig(level=logging.WARNING) logger = logging.getLogger(__name__) pygame.init() def main(): clock = pygame.time.Clock() logger.debug('pygame initialized') if not pygame.font: logger.warning('Fonts disabled') if not pygame.mixer: logger.warning('Sound disabled') screen = pygame.display.set_mode(RESOLUTION) # type: pygame.Surface pygame.display.set_caption('Snake') snake = Snake() screen.fill(SNAKE_COLOR, snake.head) apple = Apple() apple.display(screen) score = 0 score_text, score_rect = get_score_text(score) screen.blit(score_text, score_rect) pygame.display.flip() while True: for event in pygame.event.get(): if event.type == pglocals.QUIT: logger.warning('Received QUIT event') return if event.type == pglocals.KEYDOWN: if event.key == pglocals.K_DOWN: snake.direction = Direction.DOWN elif event.key == pglocals.K_LEFT: snake.direction = Direction.LEFT elif event.key == pglocals.K_UP: snake.direction = Direction.UP elif event.key == pglocals.K_RIGHT: snake.direction = Direction.RIGHT dirty_rects = snake.move(screen, apple) if snake.dead: logger.info(f'Vous avez perdu ! Score : {score}') break if snake.head.colliderect(apple.rect): apple.renew() score += apple.score logger.info(f'Apple eaten, new score : {score}') screen.fill(BACKGROUND_COLOR, score_rect) old_score_rect = score_rect score_text, score_rect = get_score_text(score) screen.blit(score_text, score_rect) dirty_rects.append(score_rect.union(old_score_rect)) dirty_rects.append(apple.display(screen)) pygame.display.update(dirty_rects) # Run faster as snake grows clock.tick(10 - INITIAL_SNAKE_SIZE + len(snake.slots)) screen.fill(BACKGROUND_COLOR) font = pygame.font.Font(None, 60) text = font.render(f"PERDU ! Score : {score}", 1, FONT_COLOR) text_rect = text.get_rect() # type: pygame.Rect text_rect.center = screen.get_rect().center screen.blit(text, text_rect) pygame.display.flip() while True: for event in pygame.event.get(): if event.type == pglocals.QUIT: logger.info('Received QUIT event') return clock.tick(5) if __name__ == '__main__': main()