13 подписчиков
Классическая игра "Змейка" на Python.
Наверное, уже существует миллион версий и вариаций кода игры "Змея", и я решил сделать миллион первую. Перед тем, как писать свою версию, посмотрел 3 кода с открытого доступа в интернете. Вероятнее всего, есть какая-то схожесть с ними.
Код игры от Надила Вильдановича прикладываю ниже:
import pygame
import random
# Инициалиация пайджем
pygame.init()
# Рабочая область
WINDOW_WIDTH = 500
WINDOW_HEIGHT = 500
WINDOW_TITLE = "Snake Game"
WINDOW = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption(WINDOW_TITLE)
# цвета
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
# Шрифо
FONT = pygame.font.SysFont(None, 48)
# часы
CLOCK = pygame.time.Clock()
# Игровые переменные
SNAKE_SIZE = 10
SNAKE_SPEED = 10
SNAKE_COLOR = GREEN
FOOD_COLOR = RED
SCORE = 0
# Настройка змейки
snake = [(WINDOW_WIDTH/2, WINDOW_HEIGHT/2)]
snake_direction = "right"
# Настройка еды
food = (random.randint(0, WINDOW_WIDTH/SNAKE_SIZE-1)*SNAKE_SIZE, random.randint(0, WINDOW_HEIGHT/SNAKE_SIZE-1)*SNAKE_SIZE)
# игровой цикл
while True:
# Handle events
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP and snake_direction != "down":
snake_direction = "up"
elif event.key == pygame.K_DOWN and snake_direction != "up":
snake_direction = "down"
elif event.key == pygame.K_LEFT and snake_direction != "right":
snake_direction = "left"
elif event.key == pygame.K_RIGHT and snake_direction != "left":
snake_direction = "right"
# движения змеи
if snake_direction == "up":
snake.insert(0, (snake[0][0], snake[0][1]-SNAKE_SIZE))
elif snake_direction == "down":
snake.insert(0, (snake[0][0], snake[0][1]+SNAKE_SIZE))
elif snake_direction == "left":
snake.insert(0, (snake[0][0]-SNAKE_SIZE, snake[0][1]))
elif snake_direction == "right":
snake.insert(0, (snake[0][0]+SNAKE_SIZE, snake[0][1]))
# Проверка на пересечение с едой
if snake[0] == food:
SCORE += 1
food = (random.randint(0, WINDOW_WIDTH/SNAKE_SIZE-1)*SNAKE_SIZE, random.randint(0, WINDOW_HEIGHT/SNAKE_SIZE-1)*SNAKE_SIZE)
else:
snake.pop()
# Проверка на столкновение со стенами и собственным телом
if snake[0][0] < 0 or snake[0][0] >= WINDOW_WIDTH or snake[0][1] < 0 or snake[0][1] >= WINDOW_HEIGHT or snake[0] in snake[1:]:
pygame.quit()
sys.exit()
# Фон
WINDOW.fill(BLACK)
# Змея
for segment in snake:
pygame.draw.rect(WINDOW, SNAKE_COLOR, (segment[0], segment[1], SNAKE_SIZE, SNAKE_SIZE))
# Еда
pygame.draw.rect(WINDOW, FOOD_COLOR, (food[0], food[1], SNAKE_SIZE, SNAKE_SIZE))
# Счеь
score_text = FONT.render("Score: "+str(SCORE), True, WHITE)
score_rect = score_text.get_rect()
score_rect.center = (WINDOW_WIDTH/2, 20)
WINDOW.blit(score_text, score_rect)
# Дислей
pygame.display.update()
# Часы
CLOCK.tick(SNAKE_SPEED)
2 минуты
6 апреля 2023