Руководство по созданию игры «Змейка» с использованием 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. Вы можете доработать ее, добавив новые функции и улучшения.
Sega объяснила причину отмены своего амбициозного проекта Super Game
Несколько СМИ приняли за правду розыгрыш Mega64 об анонсе PlayStation 6
Sony готовит масштабное обновление для PlayStation 5
Стал известен размер Silent Hill Townfall на диске
Книга «Охота за игроком. Основы маркетинга для разработчиков» ушла на верстку
Издание Polygon назвало главную проблему премии Игра года на фоне доминирования GTA VI
Sony начала поиск разработчиков, что может указывать на подготовку Gran Turismo 8 от Polyphony Digital
YouTube изменил правила для авторов роликов по GTA 6 из-за опасений перед релизом игры