Найти в Дзене
Анастасия Софт

Как создать игру "Змейка" на Python: Пошаговое руководство с комментариями

Игра "Змейка" — классическая аркадная игра, в которой игрок управляет змейкой, которая растет, поедая еду, и избегает столкновений с самим собой и стенами. В этом руководстве мы шаг за шагом создадим такую игру с помощью языка программирования Python и библиотеки pygame. Прежде чем начать, убедитесь, что на вашем компьютере установлен Python. Если его нет, скачайте и установите Python с официального сайта: https://www.python.org/downloads/. Важное замечание: Во время установки убедитесь, что выбрали опцию Add Python to PATH, чтобы иметь возможность запускать Python из командной строки. После установки откройте командную строку или терминал и выполните команду: python --version Если вы увидите версию Python, значит установка прошла успешно. Для написания кода и запуска игры вам потребуется IDE (интегрированная среда разработки). Рекомендуем использовать PyCharm или Visual Studio Code (VS Code). Теперь установим библиотеку pygame, которая позволит нам работать с графикой и вводом с клави
Оглавление
Как создать игру "Змейка" на Python: Пошаговое руководство с комментариями. Уроки Python для начинающих.
Как создать игру "Змейка" на Python: Пошаговое руководство с комментариями. Уроки Python для начинающих.

Игра "Змейка" — классическая аркадная игра, в которой игрок управляет змейкой, которая растет, поедая еду, и избегает столкновений с самим собой и стенами. В этом руководстве мы шаг за шагом создадим такую игру с помощью языка программирования Python и библиотеки pygame.

Шаг 1: Установка Python

Прежде чем начать, убедитесь, что на вашем компьютере установлен Python. Если его нет, скачайте и установите Python с официального сайта: https://www.python.org/downloads/.

Важное замечание: Во время установки убедитесь, что выбрали опцию Add Python to PATH, чтобы иметь возможность запускать Python из командной строки.

После установки откройте командную строку или терминал и выполните команду:

python --version

Если вы увидите версию Python, значит установка прошла успешно.

Шаг 2: Установка IDE для Python

Для написания кода и запуска игры вам потребуется IDE (интегрированная среда разработки). Рекомендуем использовать PyCharm или Visual Studio Code (VS Code).

Установка PyCharm:

  1. Перейдите на официальный сайт PyCharm.
  2. Скачайте Community Edition (бесплатную версию).
  3. Установите PyCharm, следуя инструкциям на экране.

Установка Visual Studio Code (VS Code):

  1. Перейдите на сайт VS Code.
  2. Скачайте версию для вашей операционной системы и установите её.
  3. После установки откройте VS Code и установите расширение для Python. Для этого перейдите в меню Extensions (слева) и найдите расширение Python, после чего нажмите Install.

Шаг 3: Установка библиотеки Pygame

Теперь установим библиотеку pygame, которая позволит нам работать с графикой и вводом с клавиатуры. Откройте терминал или командную строку в вашей IDE и выполните команду:

pip install pygame

Если установка прошла успешно, вы готовы к следующему шагу.

Шаг 4: Написание кода игры

Теперь, когда у вас есть всё необходимое, создадим саму игру. Откройте вашу IDE (PyCharm или VS Code) и создайте новый Python файл (например, snake_game.py). Вставьте в него следующий код:

import pygame # Библиотека для работы с графикой и событиями
import time # Модуль для работы с временем
import random # Модуль для случайных чисел, например для генерации позиции еды

Теперь давайте продолжим с основным кодом игры:

# Инициализация библиотеки pygame
pygame.init()

# Задание цветов, которые будут использоваться в игре
white = (255, 255, 255)
yellow = (255, 255, 102)
black = (0, 0, 0)
red = (213, 50, 80)
green = (0, 255, 0)
blue = (50, 153, 213)

# Размеры игрового окна
dis_width = 600
dis_height = 400

# Создаем игровое окно
dis = pygame.display.set_mode((dis_width, dis_height))

# Название окна
pygame.display.set_caption('Змейка на Python')

# Создаем таймер для управления частотой обновления экрана
clock = pygame.time.Clock()

# Размер блока змейки
snake_block = 10

# Скорость змейки (чем больше значение, тем быстрее)
snake_speed = 15

Шаг 5: Функции для отображения игры

Теперь добавим несколько функций для рисования змейки, вывода сообщений и отображения счета:

# Функция для рисования змейки
def our_snake(snake_block, snake_list):
for x in snake_list:
pygame.draw.rect(dis, black, [x[0], x[1], snake_block, snake_block])

# Функция для отображения текста
font_style = pygame.font.SysFont("bahnschrift", 25)
def message(msg, color):
mesg = font_style.render(msg, True, color)
dis.blit(mesg, [dis_width / 6, dis_height / 3])

# Функция для отображения счета
score_font = pygame.font.SysFont("comicsansms", 35)
def your_score(score):
value = score_font.render("Ваш счет: " + str(score), True, yellow)
dis.blit(value, [0, 0])

Шаг 6: Основной игровой цикл

Теперь пишем основной игровой цикл, где будет происходить вся логика игры:

def gameLoop():
game_over = False # Флаг, который определяет, закончена ли игра
game_close = False # Флаг, который определяет, проиграл ли игрок

# Начальные координаты змейки (в центре экрана)
x1 = dis_width / 2
y1 = dis_height / 2

# Изменения координат змейки по осям (скорость движения)
x1_change = 0
y1_change = 0

# Список, в котором будет храниться информация о теле змейки
snake_List = []
Length_of_snake = 1 # Длина змейки (в начале она состоит только из головы)

# Начальная позиция еды (случайным образом на экране)
foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0

# Основной игровой цикл
while not game_over:

# Цикл для ситуации, когда игрок проиграл
while game_close:
dis.fill(blue) # Заполняем экран синим цветом (фон)
message("Вы проиграли! Нажмите C для продолжения или Q для выхода", red) # Выводим сообщение о проигрыше
your_score(Length_of_snake - 1) # Отображаем текущий счет
pygame.display.update() # Обновляем экран

# Обработка событий после проигрыша
for event in pygame.event.get():
if event.type == pygame.QUIT: # Если пользователь закрывает окно
game_over = True # Завершаем игру
game_close = False # Выходим из цикла для проигравших
if event.type == pygame.KEYDOWN: # Если была нажата клавиша
if event.key == pygame.K_q: # Если нажали 'Q', выходим из игры
game_over = True
game_close = False
if event.key == pygame.K_c: # Если нажали 'C', начинаем новую игру
gameLoop()

# Обработка всех событий в игре
for event in pygame.event.get():
if event.type == pygame.QUIT: # Если пользователь закрывает окно
game_over = True # Завершаем игру
if event.type == pygame.KEYDOWN: # Если нажата клавиша
if event.key == pygame.K_LEFT: # Если нажата стрелка влево
x1_change = -snake_block # Изменяем координаты змейки по оси X (влево)
y1_change = 0 # По оси Y не изменяется
elif event.key == pygame.K_RIGHT: # Если нажата стрелка вправо
x1_change = snake_block # Изменяем координаты змейки по оси X (вправо)
y1_change = 0 # По оси Y не изменяется
elif event.key == pygame.K_UP: # Если нажата стрелка вверх
y1_change = -snake_block # Изменяем координаты змейки по оси Y (вверх)
x1_change = 0 # По оси X не изменяется
elif event.key == pygame.K_DOWN: # Если нажата стрелка вниз
y1_change = snake_block # Изменяем координаты змейки по оси Y (вниз)
x1_change = 0 # По оси X не изменяется

# Проверяем, не столкнулась ли змейка с границами экрана
if x1 >= dis_width or x1 < 0 or y1 >= dis_height or y1 < 0:
game_close = True # Если змейка выходит за пределы экрана, проигрыш

# Обновляем координаты головы змейки
x1 += x1_change
y1 += y1_change

# Заполняем экран фоном
dis.fill(blue)

# Рисуем еду на экране
pygame.draw.rect(dis, green, [foodx, foody, snake_block, snake_block])

# Создаем новую голову змейки
snake_Head = []
snake_Head.append(x1) # Добавляем текущую позицию змейки в список
snake_Head.append(y1)

# Добавляем голову змейки в список
snake_List.append(snake_Head)

# Если длина змейки больше заданной, удаляем самый первый элемент (старую часть тела)
if len(snake_List) > Length_of_snake:
del snake_List[0]

# Проверяем, не съела ли змейка сама себя (если голова соприкасается с телом)
for x in snake_List[:-1]:
if x == snake_Head: # Если хотя бы один элемент совпадает с головой
game_close = True # Если да, то проигрыш

# Рисуем змейку на экране
our_snake(snake_block, snake_List)

# Отображаем текущий счет
your_score(Length_of_snake - 1)

# Обновляем экран
pygame.display.update()

# Если змейка съела еду, генерируем новую еду и увеличиваем длину змейки
if x1 == foodx and y1 == foody:
foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0 # Генерация новой еды по оси X
foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0 # Генерация новой еды по оси Y
Length_of_snake += 1 # Увеличиваем длину змейки

# Контролируем скорость игры (сколько кадров в секунду)
clock.tick(snake_speed)

# Закрываем игру
pygame.quit()
quit()

# Запуск основной игры
gameLoop()

Объяснение:

  1. Инициализация переменных:
    Устанавливаем флаги game_over и game_close, чтобы отслеживать завершение игры.
    Устанавливаем начальные координаты змейки и её скорость (изменение координат по осям).
    Создаем пустой список для тела змейки и переменную для хранения её длины.
    Генерируем случайные координаты для еды.
  2. Цикл игры:
    Внутренний цикл while game_close выполняется, если игрок проиграл, и предлагает ему продолжить или выйти.
    Основной цикл игры (while not game_over) обрабатывает все игровые события и обновляет положение змейки на экране.
    В цикле обрабатываются события клавиш (стрелки для движения).
    Проверяется, не столкнулась ли змейка с границами экрана или с собственным телом.
    Если змейка съедает еду, она растет, и генерируются новые координаты для еды.
    Рисуется змейка и еда, обновляется счет и отображается на экране.
  3. Конец игры:
    Если змейка выходит за пределы экрана или сталкивается с собой, игра заканчивается.
    После проигрыша появляется сообщение и игрок может выбрать продолжить игру или выйти.

Таким образом, основной игровой цикл управляет всеми аспектами игры, от обработки ввода пользователя до обновления экрана и логики столкновений.

Шаг 7: Запуск игры

После того как вы написали весь код, пришло время запустить игру.

Запуск игры в PyCharm:

  1. Откройте PyCharm и создайте новый проект.
  2. В проекте создайте новый файл Python (например, snake_game.py).
  3. Вставьте код игры в файл.
  4. Для запуска игры нажмите зелёную кнопку Run в верхнем правом углу или используйте горячие клавиши Shift + F10.
  5. Игра откроется в отдельном окне, и вы сможете управлять змейкой с помощью стрелок на клавиатуре.

Запуск игры в Visual Studio Code:

  1. Откройте VS Code и создайте новый файл с расширением .py (например, snake_game.py).
  2. Вставьте код игры в этот файл.
  3. Чтобы запустить игру, откройте встроенный терминал (меню View → Terminal) и выполните команду:
    python snake_game.py
  4. Игра откроется в отдельном окне.

Шаг 8: Управление и цели игры

  • Управление змейкой осуществляется с помощью стрелок на клавиатуре.
  • Задача игрока — поедать еду (зелёные квадратики) и избегать столкновений с границами экрана и своим телом.
  • Когда вы проигрываете, на экране появится сообщение с предложением нажать C для продолжения игры или Q для выхода.

Заключение

Теперь вы знаете, как создать свою собственную игру "Змейка" на Python! В статье мы подробно разобрали все шаги — от установки Python и IDE до написания кода и запуска игры. Вы можете продолжить улучшать игру, добавив новые функции, например, уровни сложности или более сложные бонусы. Удачи в программировании! И до встречи в новых уроках по программированию на языке Python для новичков.