Як створити гру «Змійка» на Python

Якщо вам подобається грати в гру зі зміями, я впевнений, що ця стаття буде вам цікава.

У цій статті я навчу вас, як придумати просту гру зі змією, яку легко розробити навіть новачкові в Python.

Існує кілька способів створення цієї гри, і один із них включає використання бібліотеки PyGame Python, яка є бібліотекою Python, яку ми використовуємо для створення ігор.

Іншим способом є використання бібліотеки черепах. Цей модуль поставляється з попередньо встановленим Python і надає користувачам віртуальне полотно для створення форм і зображень.

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

На додаток до цього модуля ми також будемо використовувати два інші модулі, а саме;

  • Модуль часу – цей метод дозволить нам відстежувати кількість секунд, що минули з попереднього часу.
  • Випадковий модуль – він випадково генерує числа в Python.

Інші основні інструменти, які вам знадобляться, включають текстовий редактор на ваш вибір. У цій статті я буду використовувати VSCode. Звичайно, вам потрібно буде встановити Python 3 на вашому комп’ютері, якщо у вас його ще немає. Ви також можете використовувати компілятор techukraine.net.

Це повинно бути весело!

Як працює гра «Змійка».

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

Гравець керує змією за допомогою чотирьох клавіш напрямків, які залежать від напрямку, у якому рухається змія. Якщо змія вдарить блок або саму себе, гравець програє гру.

Щоб реалізувати цю гру, ми виконаємо наступні кроки.

  • Імпорт в наші програми попередньо встановлених модулів (черепаха, час і випадковий).
  • Створення екрану гри за допомогою модуля черепахи.
  • Налаштування клавіш для напрямку руху змії по екрану.
  • Реалізація ігрового процесу.
  Як видалити себе з групи Dropbox

Створіть файл snakegame.py, до якого ми додамо код реалізації.

Імпорт модулів

Цей біт коду імпортує черепаху, час і випадкові модулі, які за замовчуванням попередньо встановлені в Python. Крім того, ми встановлюємо значення за замовчуванням для початкового рахунку гравця, найвищого результату, який гравець отримає, і часу затримки, яку гравець бере під час кожного ходу. Модуль часу використовується тут для розрахунку часу затримки.

Додайте наступний фрагмент коду до свого файлу snakegame.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() у кінець вашого коду, який відображатиме екран довше, щоб ви, як користувач, могли щось робити на екрані.

Запустіть файл, і ви повинні отримати такі результати:

  Як купити землю в Метавсесвіті [2022] + 7 платформ для купівлі

Налаштування клавіш напрямку для змії

Тут ми налаштуємо спеціальні клавіші, які вказуватимуть напрямок руху змії на екрані. Ми будемо використовувати ‘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() — це слухач подій, який викликає методи, які переміщують змійку в певному напрямку, коли гравець натискає клавішу.

Реалізація геймплея гри Snake

Після того, як ми сформулювали основну перспективу нашої гри зі зміями, нам доведеться зробити гру в режимі реального часу.

Це включатиме наступне:

  • Збільшуйте довжину змії кожного разу, коли вона збирає їжу, бажано використовуючи інший колір.
  • Збільшення балів гравця кожного разу, коли змія збирає їжу, і відстеження найвищого результату.
  • Гравець може контролювати зіткнення змії зі стіною або власним тілом.
  • Гра перезапускається, коли змія стикається.
  • Рахунок гравця скидається до нуля, коли гра перезапускається, а на екрані зберігається найвищий бал гравця.

Додайте решту цього коду до свого файлу 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()

У наведеному вище фрагменті коду ми встановлюємо випадкову позицію для їжі змії на екрані. Кожен раз, коли змія збирає цю їжу, сегмент її тіла збільшується іншим кольором; білий, в даному випадку, щоб розрізнити його зростання.

  Що таке «ефект екранних дверей» у VR?

Після того як змія збирає їжу без зіткнень, їжа встановлюється у випадкове положення в діапазоні координат 270 розміру екрана. Щоразу, коли змія збирає їжу, рахунок гравця збільшується на 5. Коли змія стикається, рахунок гравця встановлюється на 0, а на екрані зберігається найвищий бал.

Тепер поверніть файл Python, і ви побачите, що екран черепахи виглядає так:

Висновок 🐍

Використання бібліотеки черепах — це веселий і простий спосіб створити гру зі змією, як ми бачили в цій статті. Крім того, ви можете реалізувати те саме за допомогою бібліотеки PyGame. Ви можете перевірити Підручник PyGame тут і подивіться, як ви можете реалізувати гру по-іншому.

Ви також можете спробувати гру на вгадування чисел у Python або як отримати дані JSON у Python.
Насолоджуйтесь кодуванням!