Руководство по созданию игры «Змейка» с использованием 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. Вы можете доработать ее, добавив новые функции и улучшения.
Предзаказы GTA VI значительно превышают прогнозы, почти три четверти копий купили для PS5
Спустя четыре дня энтузиасты почти довели эмуляцию The Legend of Zelda: Ocarina of Time Remake до идеала
В Steam появилась статистика частоты кадров для игр на Steam Deck
Rockstar продаёт настоящий спорткар Grotti Cheetah из GTA VI
Microsoft готовит ИИ для исправления речи во время стрима
Цифры не на стороне Sony: физические издания игр по-прежнему востребованы у аудитории
OpenAI и ModRetro представили портативную консоль для игр, созданных с помощью Codex
В Xbox Game Pass появятся три игры от создателей Frostpunk