| import pygame |
| from snake import Apple, Snake |
| from pathfinding import set_path, is_position_safe |
| from settings import * |
|
|
| def drawGrid(): |
| for x in range(0, WIDTH, BLOCK_SIZE): |
| for y in range(0, HEIGHT, BLOCK_SIZE): |
| rect = pygame.Rect(x, y, BLOCK_SIZE, BLOCK_SIZE) |
| pygame.draw.rect(SCREEN, GRID_CLR, rect, 1) |
|
|
| def handle_events(): |
| for event in pygame.event.get(): |
| if event.type == pygame.QUIT: |
| return False |
| return True |
|
|
| def update(snake, apple): |
| apple.drawApple() |
| path = set_path(snake, apple) |
| if path: |
| snake.go_to(path[0]) |
| snake.move() |
|
|
| pygame.draw.rect(SCREEN, SNAKE_CLR, snake.head) |
|
|
| for square in snake.body[1:]: |
| if snake.head.x == square.x and snake.head.y == square.y: |
| snake.dead = True |
| if snake.head.x <= -1 or snake.head.x >= WIDTH or snake.head.y <= -1 or snake.head.y >= HEIGHT: |
| snake.dead = True |
| if snake.dead: |
| |
| pygame.time.wait(30000) |
|
|
| if len(snake.body) < 1: |
| |
| new_block = pygame.Rect(snake.head.x, snake.head.y, BLOCK_SIZE, BLOCK_SIZE) |
| snake.body.append(new_block) |
| else: |
| |
| for square in snake.body: |
| pygame.draw.rect(SCREEN, SNAKE_CLR, square) |
|
|
| apple_pos = (apple.apple.x, apple.apple.y) |
| if snake.head.x == apple_pos[0] and snake.head.y == apple_pos[1]: |
| apple.spawn() |
| while not is_position_safe(snake.body, (apple.apple.x, apple.apple.y)): |
| apple.spawn() |
| |
| snake.grow() |
| |
| def main(): |
| pygame.init() |
| clock = pygame.time.Clock() |
| font = pygame.font.SysFont('timesnewroman', BLOCK_SIZE * 2) |
| score = font.render("1", True, "white") |
| score_rect = score.get_rect(center = (WIDTH / 2, HEIGHT / 20)) |
|
|
| drawGrid() |
|
|
| snake = Snake() |
| apple = Apple() |
|
|
| running = True |
| while running: |
| running = handle_events() |
| SCREEN.fill(SURFACE_CLR) |
| drawGrid() |
|
|
| update(snake, apple) |
| |
| clock.tick(FPS) |
| pygame.display.update() |
|
|
| pygame.quit() |
|
|
| if __name__ == "__main__": |
| main() |