🐍 Как создать игру “Змейка” на языке Python

by itisgood

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

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

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

Другой способ – это использование библиотеки turtle.

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

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

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

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

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

Как работает игра “Змейка

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

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

Если змея врежется в блок или в саму себя, игрок проиграет игру.

Для реализации этой игры мы выполним следующие шаги.

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

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

Импортирование модулей

В этой части кода мы импортируем модули turtle, time и random, которые по умолчанию предустановлены в Python.

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

Для вычисления времени задержки здесь используется модуль time.

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

import turtle
import random
import time

player_score = 0
highest_score = 0
delay_time = 0.1

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

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

Отсюда мы можем создать тело змеи и еду, которую она будет собирать.

На нашем экране также будет отображаться отслеживаемый счет игрока.

Добавьте этот код в файл 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()

 

Затем мы создадим еду, которую собирает змея.

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

Поэтому мы используем метод 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()

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

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

Заключение 🐍

Использование библиотеки “turtle” – это один из забавных и простых способов создания игры в змейку, как мы видели в этой статье.

В качестве альтернативы, вы можете реализовать то же самое, используя библиотеку PyGame

см. также:

 

You may also like

Leave a Comment