Создание игры «Змейка» с использованием Pygame: Пошаговое руководство
Игра «Змейка» является классической и популярной аркадной игрой. В этом руководстве мы создадим простую версию игры «Змейка» с использованием библиотеки Pygame на языке Python. Ниже приведены пошаговые инструкции для создания игры.
Шаг 1: Инициализация Pygame и установка окна игры
import pygame
import random
import json
# Инициализация Pygame
pygame.init()
# Установка размеров окна
width = 800
height = 600
cell_size = 20
# Цвета
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
# Создание окна
game_display = pygame.display.set_mode((width, height))
pygame.display.set_caption('Змейка')
# Часы для управления обновлением экрана
clock = pygame.time.Clock()
В этом шаге мы подключаем библиотеку Pygame, инициализируем окно игры и устанавливаем его размер. Также определяем цвета, которые будут использоваться в игре.
Шаг 2: Функции для отображения текста и генерации яблок
# Функция для вывода текста на экран
def draw_text(text, font, color, surface, x, y):
text_obj = font.render(text, True, color)
text_rect = text_obj.get_rect()
text_rect.topleft = (x, y)
surface.blit(text_obj, text_rect)
# Генерация новых координат для яблока
def generate_new_apple():
return [random.randrange(1, (width//cell_size)) * cell_size,
random.randrange(1, (height//cell_size)) * cell_size]
Этот шаг включает определение функций для отображения текста на экране и генерации новых координат для яблока.
Шаг 3: Загрузка и сохранение таблицы рекордов
# Загрузка таблицы рекордов
def load_high_scores():
try:
with open("high_scores.json", "r") as file:
high_scores = json.load(file)
except FileNotFoundError:
high_scores = {"scores": []}
return high_scores
# Сохранение таблицы рекордов
def save_high_scores(high_scores):
with open("high_scores.json", "w") as file:
json.dump(high_scores, file)
В этом шаге мы создаем функции для загрузки и сохранения таблицы рекордов в формате JSON.
Шаг 4: Отображение таблицы рекордов
# Отображение таблицы рекордов
def display_high_scores(high_scores):
font = pygame.font.Font(None, 36)
draw_text("High Scores:", font, white, game_display, 10, 40)
for i, score in enumerate(high_scores["scores"]):
draw_text(str(i+1) + ". " + str(score), font, white, game_display, 10, 70 + i * 30)
Этот шаг включает функцию для отображения таблицы рекордов на экране.
Шаг 5: Основной цикл игры
# Основная функция игры
def game_loop():
# Начальные координаты змейки
snake = [[width // 2, height // 2]]
snake_direction = 'RIGHT'
# Начальные координаты яблока
apple_pos = generate_new_apple()
# Начальный счет
score = 0
# Загрузка рекордов
high_scores = load_high_scores()
# Основной цикл игры
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
save_high_scores(high_scores)
pygame.quit()
quit()
# Управление змейкой
elif event.type == pygame.KEYDOWN:
if 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'
elif 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'
В этом шаге мы создаем основной цикл игры, который обрабатывает управление змейкой и другие события.
Шаг 6: Перемещение змейки и проверка столкновений
# Перемещение змейки
if snake_direction == 'UP':
snake.insert(0, [snake[0][0], snake[0][1] - cell_size])
elif snake_direction == 'DOWN':
snake.insert(0, [snake[0][0], snake[0][1] + cell_size])
elif snake_direction == 'LEFT':
snake.insert(0, [snake[0][0] - cell_size, snake[0][1]])
elif snake_direction == 'RIGHT':
snake.insert(0, [snake[0][0] + cell_size, snake[0][1]])
# Если змейка коснулась границ экрана
if not (0 <= snake[0][0] < width and 0 <= snake[0][1] < height):
if score > 0:
high_scores["scores"].append(score)
high_scores["scores"].sort(reverse=True)
if len(high_scores["scores"]) > 5:
high_scores["scores"].pop()
save_high_scores(high_scores)
return
# Если змейка съела яблоко
if snake[0] == apple_pos:
apple_pos = generate_new_apple()
score += 1
else:
# Удаление последнего сегмента змейки, если не съела яблоко
snake.pop()
В этом шаге реализуется перемещение змейки, обработка столкновений и проверка съеденного яблока.
Шаг 7: Отображение игровых объектов
# Рисуем фон
game_display.fill(black)
# Рисуем змейку
for segment in snake:
pygame.draw.rect(game_display, white, [segment[0], segment[1], cell_size, cell_size])
# Рисуем яблоко
pygame.draw.rect(game_display, red, [apple_pos[0], apple_pos[1], cell_size, cell_size])
# Отображаем счет
font = pygame.font.Font(None, 36)
draw_text("Score: {}".format(score), font, white, game_display, 10, 10)
# Отображаем таблицу рекордов
display_high_scores(high_scores)
# Обновляем экран
pygame.display.update()
# Ограничиваем частоту кадров
clock.tick(10)
# Запускаем игру
game_loop()
В этом шаге мы отображаем игровые объекты, такие как змейка, яблоко и счет, а также обновляем экран и ограничиваем частоту кадров.
Теперь у вас есть простая версия игры «Змейка», созданная с использованием библиотеки Pygame на языке Python. Вы можете доработать ее, добавив новые функции и улучшения.