Hur man gör ett ormspel i Python

Om du är en som tycker om att spela ormspelet är jag säker på att du kommer att tycka att den här artikeln är intressant.

I den här artikeln kommer jag att lära dig hur du kommer på ett enkelt ormspel som även en nybörjare i Python skulle ha lätt att utveckla.

Det finns ett antal sätt att skapa detta spel och ett inkluderar användningen av Pythons PyGame-bibliotek som är ett Python-bibliotek som vi använder för att skapa spel.

Det andra sättet är genom att använda sköldpaddsbiblioteket. Denna modul kommer förinstallerad med Python och den ger en virtuell arbetsyta för användare att skapa former och bilder.

Därför kommer den här artikeln att använda sköldpaddsbiblioteket för att implementera vårt enkla ormspel som är nybörjarvänligt speciellt för nybörjare Python-utvecklare.

Utöver denna modul kommer vi även att använda två andra moduler nämligen;

  • Tidsmodul – Denna metod låter oss hålla reda på antalet sekunder som har förflutit sedan föregående gång.
  • Slumpmässig modul – Den genererar tal slumpmässigt i Python.

Andra grundläggande verktyg du behöver använda inkluderar en textredigerare som du väljer. Jag kommer att använda VSCode i den här artikeln. Självklart måste du installera Python 3 på din maskin om du inte redan har det. Du kan också använda adminvista.com-kompilatorn.

Det här ska bli kul!

Hur ormspelet fungerar

Det slutliga målet med det här spelet är att spelaren ska uppnå högsta poäng genom att kontrollera ormen för att samla maten som skärmen visar.

Spelaren styr ormen med hjälp av fyra riktningsknappar som är relativt riktningen som ormen rör sig mot. Skulle ormen träffa ett block eller sig själv, förlorar spelaren spelet.

Följande steg kommer vi att följa för att implementera detta spel.

  • Importera de förinstallerade modulerna (sköldpadda, tid och slumpmässigt) till våra program.
  • Skapa spelets skärmvisning med hjälp av sköldpaddsmodulen.
  • Ställer in nycklarna för ormens rörelseriktning runt skärmen.
  • Spelimplementeringen.

Skapa en snakegame.py-fil där vi lägger till implementeringskoden.

Importera modulerna

Denna bit av koden kommer att importera sköldpadda, tid och slumpmässiga moduler som är förinstallerade som standard i Python. Dessutom kommer vi sedan att ställa in standardvärden för spelarens initiala poäng, den högsta poängen spelaren kommer att uppnå och tiden för fördröjningen som spelaren tar i varje drag. Tidsmodulen används här för att beräkna fördröjningstiden.

Lägg till följande kodbit i din snakegame.py-fil.

import turtle
import random
import time

player_score = 0
highest_score = 0
delay_time = 0.1

Skapar spelets skärmvisning

Sköldpaddsmodulen vi importerar här gör att vi kan skapa en virtuell duk som kommer att vara spelets fönsterskärm. Härifrån kan vi skapa ormens kropp och maten som ormen kommer att samla in. Vår skärm kommer också att visa spelarens spårade poäng.

Lägg till den här koden i Python-filen.

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

Kodavsnittet ovan börjar med att initiera sköldpaddsskärmen och skickar en titel och en bakgrundsfärg till skärmen. Efter att ha definierat fönsterstorleken på vår skärm ritar vi formen på ormen på den virtuella duken.

Metoden penup() tar helt enkelt upp sköldpaddans penna så att en linje inte dras när sköldpaddan rör sig. Metoden goto(x,y) innehåller koordinatpositioner som flyttar sköldpaddan till en absolut position.

Vi skapar sedan maten som ormen samlar in. Vi kommer att vilja visa spelarens poäng varje gång ormen hämtar maten och den högsta poängen spelaren når under spelet. Därför använder vi metoden pen.write() för att implementera detta. Hideturtle() döljer sköldpaddsikonen från skärmen på rubriken som denna text är skriven.

Det är viktigt att lägga till turtle.mainloop() i slutet av din kod, som kommer att visa skärmen längre så att du som användare kan göra något på skärmen.

Kör filen och du bör ha följande utdata:

Ställa in riktningsknapparna för ormen

Här kommer vi att ställa in specifika nycklar som kommer att styra riktningen som ormen kommer att röra sig på skärmen. Vi kommer att använda ’L’ för vänster, ’R’ för höger, ’U’ för upp, ’D’ för ned. Vi kommer att implementera dessa riktningar med hjälp av sköldpaddans riktningsfunktion som vi kommer att kalla på ormen.

Lägg till följande kodavsnitt till din kod.

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

Funktionen move() ovan ställer in ormens rörelse i den definierade positionen inom ett exakt koordinatvärde.

Listen()-funktionen är en händelseavlyssnare som anropar metoderna som flyttar ormen till en viss riktning när spelaren trycker på tangenten.

Spelimplementeringen för ormen

Efter att ha fastställt grundsynen för vårt ormspel, måste vi göra spelet i realtid.

Detta kommer att involvera följande:

  • Att öka ormens längd varje gång den samlar upp maten genom att helst använda en annan färg.
  • Öka spelarens poäng varje gång ormen samlar in maten och spårar den högsta poängen.
  • Spelaren kan kontrollera ormen från att kollidera med väggen eller sin egen kropp.
  • Spelet startar om när ormen kolliderar.
  • Spelarens poäng återställs till noll när spelet startar om, medan skärmen behåller spelarens högsta poäng.

Lägg till resten av den här koden i din python-fil.

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

I kodavsnittet ovan anger vi en slumpmässig position för ormens mat på skärmen. Varje gång ormen samlar in denna mat, ökar dess kroppssegment med en annan färg; vit, i detta fall, för att särskilja dess tillväxt.

Efter att ormen samlat in maten utan att kollidera, ställs maten in på en slumpmässig position inom 270 koordinatintervallet för skärmstorleken. Varje gång ormen samlar mat ökar spelarens poäng med 5. När ormen kolliderar sätts spelarens poäng till 0 medan skärmen behåller sin högsta poäng.

Returnera nu Python-filen och du bör se din sköldpaddsskärm se ut så här:

Slutsats 🐍

Att använda sköldpaddsbiblioteket är ett roligt och enkelt sätt att skapa ormspelet som vi har sett i den här artikeln. Alternativt kan du implementera detsamma med PyGame-biblioteket. Du kan kolla in PyGame handledning här och se hur du kan implementera spelet annorlunda.

Du kan också prova ett gissningsspel för nummer i Python eller hur man får JSON-data i Python.
Njut av kodning!