|
|
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() |