import pygame
import sys
import random
pygame.init()
WIDTH, HEIGHT = 600, 600
CELL_SIZE = 20
GRID_WIDTH = WIDTH // CELL_SIZE
GRID_HEIGHT = HEIGHT // CELL_SIZE
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Snake Game")
clock = pygame.time.Clock()
FPS = 10
snake = [(GRID_WIDTH // 2, GRID_HEIGHT // 2)]
direction = (0, -1)
def spawn_food():
while True:
food = (random.randint(0, GRID_WIDTH - 1), random.randint(0, GRID_HEIGHT - 1))
if food not in snake:
return food
food = spawn_food()
def draw_grid():
for x in range(0, WIDTH, CELL_SIZE):
pygame.draw.line(screen, BLACK, (x, 0), (x, HEIGHT))
for y in range(0, HEIGHT, CELL_SIZE):
pygame.draw.line(screen, BLACK, (0, y), (WIDTH, y))
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False # вместо sys.exit(), просто завершаем цикл
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP and direction != (0, 1):
direction = (0, -1)
elif event.key == pygame.K_DOWN and direction != (0, -1):
direction = (0, 1)
elif event.key == pygame.K_LEFT and direction != (1, 0):
direction = (-1, 0)
elif event.key == pygame.K_RIGHT and direction != (-1, 0):
direction = (1, 0)
head_x, head_y = snake[0]
delta_x, delta_y = direction
new_head = (head_x + delta_x, head_y + delta_y)
if (new_head[0] < 0 or new_head[0] >= GRID_WIDTH or
new_head[1] < 0 or new_head[1] >= GRID_HEIGHT or
new_head in snake):
running = False # завершение игры при столкновении
snake.insert(0, new_head)
if new_head == food:
food = spawn_food()
else:
snake.pop()
screen.fill(WHITE)
food_rect = pygame.Rect(food[0] * CELL_SIZE, food[1] * CELL_SIZE, CELL_SIZE, CELL_SIZE)
pygame.draw.rect(screen, RED, food_rect)
for segment in snake:
segment_rect = pygame.Rect(segment[0] * CELL_SIZE, segment[1] * CELL_SIZE, CELL_SIZE, CELL_SIZE)
pygame.draw.rect(screen, GREEN, segment_rect)
draw_grid()
pygame.display.flip()
clock.tick(FPS)
pygame.quit()