Jak vytvořit hru Snake v Pythonu

Pokud patříte mezi ty, kteří rádi hrají hadí hru, jsem si jist, že tento článek bude pro vás zajímavý.

V tomto článku vás naučím, jak vymyslet jednoduchou hadí hru, kterou by snadno vyvíjel i začátečník v Pythonu.

Existuje několik způsobů, jak vytvořit tuto hru, a jeden zahrnuje použití knihovny PyGame v Pythonu, což je knihovna Pythonu, kterou používáme k vytváření her.

Druhým způsobem je použití želví knihovny. Tento modul je dodáván s předinstalovaným Pythonem a poskytuje uživatelům virtuální plátno k vytváření tvarů a obrázků.

Proto tento článek použije knihovnu želv k implementaci naší jednoduché hry had, která je vhodná pro začátečníky zejména pro začínající vývojáře Pythonu.

Kromě tohoto modulu budeme používat také dva další moduly, a to;

  • Časový modul – Tato metoda nám umožní sledovat počet sekund, které uplynuly od předchozího času.
  • Náhodný modul – generuje čísla náhodně v Pythonu.

Mezi další základní nástroje, které budete muset používat, patří textový editor dle vašeho výběru. V tomto článku použiji VSCode. Samozřejmě budete muset nainstalovat Python 3 na váš počítač, pokud jej ještě nemáte. Můžete také použít kompilátor etechblog.cz.

To by měla být zábava!

Jak funguje hra had

Konečným cílem této hry je, aby hráč dosáhl nejvyššího skóre ovládáním hada, aby sbíral jídlo, které se zobrazuje na obrazovce.

Hráč ovládá hada pomocí čtyř směrových kláves, které se vztahují ke směru, kterým se had pohybuje. Pokud had zasáhne blok nebo sebe, hráč prohrává hru.

Při implementaci této hry budeme postupovat podle následujících kroků.

  • Import předinstalovaných modulů (želva, čas a náhodný) do našich programů.
  • Vytvoření zobrazení obrazovky hry pomocí modulu želvy.
  • Nastavení kláves pro směr pohybu hada po obrazovce.
  • Implementace hry.
  Jak používat nástroje průzkumu Microsoft Teams

Vytvořte soubor snakegame.py, do kterého přidáme implementační kód.

Import modulů

Tento kousek kódu importuje želvu, čas a náhodné moduly, které jsou standardně předinstalované v Pythonu. Dále pak nastavíme výchozí hodnoty pro počáteční skóre hráče, nejvyšší skóre, kterého hráč dosáhne, a dobu zpoždění hráče v každém tahu. Časový modul se zde používá k výpočtu doby zpoždění.

Přidejte následující bit kódu do souboru snakegame.py.

import turtle
import random
import time

player_score = 0
highest_score = 0
delay_time = 0.1

Vytvoření zobrazení obrazovky hry

Modul želvy, který zde importujeme, nám umožní vytvořit virtuální plátno, které bude obrazovkou okna hry. Odtud můžeme vytvořit tělo hada a potravu, kterou had bude sbírat. Na naší obrazovce se také zobrazí sledované skóre hráče.

Přidejte tento kód do souboru 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()

Výše uvedený úryvek kódu začíná inicializací želví obrazovky a předává obrazovce titulek a barvu pozadí. Po definování velikosti okna naší obrazovky nakreslíme tvar hada na virtuální plátno.

Metoda penup() jednoduše zvedne pero želvy, takže se při pohybu želvy nekreslí čára. Metoda goto(x,y) obsahuje souřadnice, které želvu posunou do absolutní polohy.

Poté vytvoříme potravu, kterou had sbírá. Budeme chtít zobrazit skóre hráče pokaždé, když had sbírá jídlo, a nejvyšší skóre, kterého hráč během hry dosáhne. K implementaci proto používáme metodu pen.write(). Funkce hideturtle() skryje ikonu želvy z obrazovky v sekci záhlaví, do které je tento text napsán.

Je důležité přidat turtle.mainloop() na konec vašeho kódu, který bude zobrazovat obrazovku déle, abyste uživateli umožnili na obrazovce něco dělat.

  Jak identifikovat jakoukoli rostlinu pouze pomocí její fotografie

Spusťte soubor a měli byste mít následující výstup:

Nastavení směrových kláves pro hada

Zde nastavíme konkrétní klávesy, které budou řídit směr, kterým se bude had na obrazovce pohybovat. Použijeme ‚L‘ pro levou stranu, ‚R‘ pro pravou stranu, ‚U‘ pro nahoru, ‚D‘ pro dolů. Tyto směry implementujeme pomocí funkce směru želvy, kterou budeme volat na hada.

Přidejte do svého kódu následující fragment kódu.

# 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')

Funkce move() výše nastavuje pohyb hada v definované poloze v rámci přesné hodnoty souřadnic.

Funkce listen() je posluchač událostí, který volá metody, které pohybují hadem konkrétním směrem, když hráč stiskne klávesu.

Implementace hry hada

Poté, co stanovíme základní pohled na naši hadí hru, budeme muset hru uvést do reálného času.

To bude zahrnovat následující:

  • Zvětšení délky hada pokaždé, když sbírá potravu, nejlépe pomocí jiné barvy.
  • Zvyšování skóre hráče pokaždé, když had sbírá jídlo, a sledování nejvyššího skóre.
  • Hráč je schopen ovládat hada, aby nenarazil do zdi nebo vlastního těla.
  • Hra se restartuje, když se had srazí.
  • Hráčovo skóre se po restartu hry vynuluje, zatímco na obrazovce je zachováno nejvyšší skóre hráče.

Přidejte zbytek tohoto kódu do svého python souboru.

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()

Ve výše uvedeném úryvku kódu jsme nastavili náhodnou pozici pro hadí jídlo na obrazovce. Pokaždé, když had sbírá toto jídlo, jeho část těla se zvětší o jinou barvu; bílá, v tomto případě pro rozlišení jejího růstu.

  Jak udělat lineární kalibrační křivku v Excelu

Poté, co had shromáždí jídlo, aniž by se srazil, je jídlo nastaveno na náhodné místo v rozsahu 270 souřadnic velikosti obrazovky. Pokaždé, když had sbírá potravu, skóre hráče se zvýší o 5. Když se had srazí, skóre hráče se nastaví na 0, zatímco obrazovka si zachová nejvyšší skóre.

Nyní vraťte soubor Python a měli byste vidět, že vaše želví obrazovka vypadá takto:

Závěr 🐍

Použití knihovny želv je zábavný a snadný způsob, jak vytvořit hru hada, jak jsme viděli v tomto článku. Alternativně můžete totéž implementovat pomocí knihovny PyGame. Můžete se podívat na Návod na PyGame zde a uvidíte, jak byste mohli hru implementovat jinak.

Můžete také vyzkoušet hru na hádání čísel v Pythonu nebo jak získat data JSON v Pythonu.
Užijte si kódování!