Как сделать игру про змейку на Python

Если вам нравится играть в змейку, я уверен, что вы найдете эту статью интересной.

В этой статье я научу вас, как придумать простую игру в змейку, которую будет легко разработать даже новичку в Python.

Существует несколько способов создания этой игры, и один из них включает использование библиотеки Python PyGame, библиотеки Python, которую мы используем для создания игр.

Другой способ — использовать библиотеку черепах. Этот модуль предустановлен вместе с Python и предоставляет пользователям виртуальный холст для создания фигур и изображений.

Поэтому в этой статье будет использоваться библиотека черепах для реализации нашей простой игры про змей, которая удобна для начинающих, особенно для начинающих разработчиков Python.

В дополнение к этому модулю мы также будем использовать два других модуля, а именно;

  • Модуль времени. Этот метод позволит нам отслеживать количество секунд, прошедших с момента предыдущего раза.
  • Модуль Random — случайным образом генерирует числа в Python.

Другие основные инструменты, которые вам понадобятся, включают текстовый редактор по вашему выбору. В этой статье я буду использовать VSCode. Конечно, вам нужно будет установить Python 3 на свой компьютер, если у вас его еще нет. Вы также можете использовать компилятор toadmin.ru.

Это должно быть весело!

Как работает игра со змеями

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

Игрок управляет змеей, используя четыре клавиши направления, которые относятся к направлению, в котором движется змея. Если змея попадает в блок или в себя, игрок проигрывает игру.

Следующие шаги мы будем следовать для реализации этой игры.

  • Импорт в наши программы предустановленных модулей (черепаха, время, рандом).
  • Создание экрана игры с помощью модуля черепахи.
  • Установка клавиш для направления движения змеи по экрану.
  • Реализация геймплея.

Создайте файл snapgame.py, в который мы добавим код реализации.

Импорт модулей

Этот фрагмент кода импортирует модули черепахи, времени и случайных чисел, которые по умолчанию предустановлены в Python. Кроме того, мы затем установим значения по умолчанию для начального счета игрока, наивысшего счета, который игрок наберет, и времени задержки, которое игрок тратит на каждый ход. Модуль времени используется здесь для расчета времени задержки.

Добавьте следующий фрагмент кода в файл snapgame.py.

import turtle
import random
import time

player_score = 0
highest_score = 0
delay_time = 0.1

Создание экрана игры

Модуль черепахи, который мы импортируем сюда, позволит нам создать виртуальный холст, который будет экраном окна игры. Отсюда мы можем создать тело змеи и пищу, которую змея будет собирать. На нашем экране также будет отображаться отслеженный счет игрока.

Добавьте этот код в файл Python.

# window screen created
wind = turtle.Screen()
wind.title("Snake Maze🐍")
wind.bgcolor("red")

# The screen size
wind.setup(width=600, height=600)


# creating the snake 
snake = turtle.Turtle()
snake.shape("square")
snake.color("black")
snake.penup()
snake.goto(0, 0)
snake.direction = "Stop"

# creating the food
snake_food = turtle.Turtle()
shapes = random.choice('triangle','circle')
snake_food.shape(shapes)
snake_food.color("blue")
snake_food.speed(0)
snake_food.penup()
snake_food.goto(0, 100)

pen = turtle.Turtle()
pen.speed(0)
pen.shape('square')
pen.color('white')
pen.penup()
pen.hideturtle()
pen.goto(0, 250)
pen.write("Your_score: 0 Highest_Score : 0", align="center", 
font=("Arial", 24, "normal"))
turtle.mainloop()

Приведенный выше фрагмент кода начинается с инициализации экрана черепахи и передает на экран заголовок и цвет фона. После определения размера окна нашего экрана мы рисуем форму змеи на виртуальном холсте.

Метод penup() просто берет перо черепашки, чтобы линия не рисовалась при движении черепашки. Метод goto(x,y) содержит координаты, которые перемещают черепашку в абсолютное положение.

Затем мы создаем пищу, которую собирает змея. Мы хотим отображать счет игрока каждый раз, когда змея собирает еду, и самый высокий балл, который игрок набирает во время игры. Поэтому для реализации этого мы используем метод pen.write(). hideturtle() скрывает значок черепахи с экрана в разделе заголовка, в котором написан этот текст.

Важно добавить в конец вашего кода функцию turtle.mainloop(), которая будет отображать экран дольше, чтобы пользователь мог что-то делать на экране.

Запустите файл, и вы должны получить следующий вывод:

Настройка клавиш направления для змеи

Здесь мы настроим специальные клавиши, которые будут указывать направление движения змеи на экране. Мы будем использовать «L» для левого, «R» для правого, «U» для вверх, «D» для вниз. Мы реализуем эти направления, используя функцию направления черепахи, которую мы будем вызывать для змеи.

Добавьте следующий фрагмент кода в свой код.

# Assigning directions
def moveleft():
    if snake.direction != "right":
        snake.direction = "left"

def moveright():
    if snake.direction != "left":
        snake.direction = "right"

def moveup():
    if snake.direction != "down":
        snake.direction = "up"

def movedown():
    if snake.direction != "up":
        snake.direction = "down"

def move():
    if snake.direction == "up":
        coord_y = snake.ycor()
        snake.sety(coord_y+20)

    if snake.direction == "down":
        coord_y = snake.ycor()
        snake.sety(coord_y-20)

    if snake.direction == "right":
        coord_x = snake.xcor()
        snake.setx(coord_x+20)

    if snake.direction == "left":
        coord_x = snake.xcor()
        snake.setx(coord_x-20)

wind.listen()
wind.onkeypress(moveleft, 'L')
wind.onkeypress(moveright, 'R')
wind.onkeypress(moveup, 'U')
wind.onkeypress(movedown, 'D')

Приведенная выше функция move() задает движение змеи в определенной позиции в пределах точного значения координат.

Функция listen() — это прослушиватель событий, который вызывает методы, перемещающие змейку в определенном направлении, когда игрок нажимает клавишу.

Реализация геймплея игры про змей

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

Это будет включать следующее:

  • Увеличивайте длину змеи каждый раз, когда она собирает еду, предпочтительно используя другой цвет.
  • Увеличение счета игрока каждый раз, когда змея собирает еду, и отслеживание наивысшего результата.
  • Игрок может контролировать столкновение змеи со стеной или собственным телом.
  • Игра перезапускается, когда змея сталкивается.
  • Счет игрока сбрасывается до нуля при перезапуске игры, в то время как на экране сохраняется наивысший результат игрока.

Добавьте остальную часть этого кода в ваш файл Python.

segments = []

#Implementing the gameplay
while True:
    wind.update()
    if snake.xcor() > 290 or snake.xcor() < -290 or snake.ycor() > 290 or snake.ycor() < -290:
        time.sleep(1)
        snake.goto(0, 0)
        snake.direction = "Stop"
        snake.shape("square")
        snake.color("green")

        for segment in segments:
            segment.goto(1000, 1000)
            segments.clear()
            player_score = 0
            delay_time = 0.1
            pen.clear()
            pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

        if snake.distance(snake_food) < 20:
            coord_x = random.randint(-270, 270)
            coord_y = random.randint(-270, 270)
            snake_food.goto(coord_x, coord_y)

            # Adding segment
            added_segment = turtle.Turtle()
            added_segment.speed(0)
            added_segment.shape("square")
            added_segment.color("white")
            added_segment.penup()
            segments.append(added_segment)
            delay_time -= 0.001
            player_score += 5

            if player_score > highest_score:
                highest_score = player_score
                pen.clear()
                pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

    # checking for collisions
    for i in range(len(segments)-1, 0, -1):
        coord_x = segments[i-1].xcor()
        coord_y = segments[i-1].ycor()
        segments[i].goto(coord_x, coord_y)

    if len(segments) > 0:
        coord_x = snake.xcor()
        coord_y = snake.ycor()
        segments[0].goto(coord_x, coord_y)
    move()

    for segment in segments:
        if segment.distance(snake) < 20:
            time.sleep(1)
            snake.goto(0, 0)
            snake.direction = "stop"
            snake.color('white')
            snake.shape('square')

            for segment in segments:
                segment.goto(1000, 1000)
                segment.clear()
                player_score = 0
                delay_time = 0.1
                pen.clear()
                pen.write("Player's_score: {} Highest_score: {}".format(player_score, highest_score), align="center", font=("Arial", 24, "normal"))

     time.sleep(delay_time)

turtle.mainloop()

В приведенном выше фрагменте кода мы устанавливаем случайную позицию для еды змеи на экране. Каждый раз, когда змея собирает эту пищу, сегмент ее тела увеличивается другим цветом; белый, в данном случае, чтобы отличить его рост.

После того, как змея собирает еду, не сталкиваясь с ней, еда размещается в случайном месте в пределах 270 координат от размера экрана. Каждый раз, когда змея собирает еду, счет игрока увеличивается на 5. Когда змея сталкивается, счет игрока устанавливается на 0, в то время как на экране сохраняется самый высокий балл.

Теперь верните файл Python, и вы должны увидеть, что экран черепахи выглядит так:

Вывод 🐍

Использование библиотеки черепах — это один из забавных и простых способов создать игру про змей, как мы видели в этой статье. В качестве альтернативы вы можете реализовать то же самое с помощью библиотеки PyGame. Вы можете проверить Учебник PyGame здесь и посмотрите, как вы могли бы реализовать игру по-другому.

Вы также можете попробовать сыграть в игру «Угадай число» на Python или узнать, как получить данные JSON в Python.
Наслаждайтесь кодированием!