Hvordan lage et slangespill i Python

Hvis du er en som liker å spille slangespillet, er jeg sikker på at du vil finne denne artikkelen interessant.

I denne artikkelen vil jeg lære deg hvordan du kommer opp med et enkelt slangespill som selv en nybegynner i Python ville finne lett å utvikle.

Det finnes en rekke måter å lage dette spillet på, og en inkluderer bruken av Pythons PyGame-bibliotek som er et Python-bibliotek vi bruker til å lage spill.

Den andre måten er ved bruk av skilpaddebiblioteket. Denne modulen leveres forhåndsinstallert med Python, og den gir et virtuelt lerret for brukere å lage former og bilder.

Derfor vil denne artikkelen bruke skilpaddebiblioteket til å implementere vårt enkle slangespill som er nybegynnervennlig spesielt for nybegynnere av Python-utviklere.

I tillegg til denne modulen vil vi også bruke to andre moduler nemlig;

  • Tidsmodul – Denne metoden lar oss holde styr på antall sekunder som har gått siden forrige gang.
  • Tilfeldig modul – Den genererer tall tilfeldig i Python.

Andre grunnleggende verktøy du må bruke inkluderer et tekstredigeringsprogram etter eget valg. Jeg vil bruke VSCode i denne artikkelen. Selvfølgelig må du installere Python 3 på maskinen din hvis du ikke allerede har det. Du kan også bruke tipsbilk.net-kompilatoren.

Dette skal bli gøy!

Hvordan slangespillet fungerer

Det endelige målet med dette spillet er at spilleren skal oppnå høyest poengsum ved å kontrollere slangen for å samle maten skjermen viser.

Spilleren kontrollerer slangen ved hjelp av fire retningstaster som er i forhold til retningen slangen beveger seg mot. Skulle slangen treffe en blokk eller seg selv, taper spilleren spillet.

Følgende trinn vil vi følge for å implementere dette spillet.

  • Importerer de forhåndsinstallerte modulene til programmene våre (skilpadde, tid og tilfeldig).
  • Opprette spillets skjermvisning ved hjelp av skilpaddemodulen.
  • Stille inn tastene for slangens bevegelsesretning rundt skjermen.
  • Spillimplementeringen.
  10 gode ressurser for å lære Big Data og Hadoop

Lag en snakegame.py-fil der vi legger til implementeringskoden.

Importerer modulene

Denne delen av koden vil importere skilpadde, tid og tilfeldige moduler som er forhåndsinstallert som standard i Python. I tillegg vil vi deretter sette standardverdier for spillerens første poengsum, den høyeste poengsummen spilleren vil oppnå, og forsinkelsestiden tatt av spilleren i hvert trekk. Tidsmodulen brukes her for å beregne forsinkelsestid.

Legg til følgende kodebit i snakegame.py-filen.

import turtle
import random
import time

player_score = 0
highest_score = 0
delay_time = 0.1

Opprette spillets skjermvisning

Skilpaddemodulen vi importerer her vil tillate oss å lage et virtuelt lerret som vil være spillets vindusskjerm. Herfra kan vi lage slangens kropp og maten slangen skal samle. Skjermen vår vil også vise spillerens sporede poengsum.

Legg til denne 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()

Kodebiten ovenfor starter med initialisering av skilpaddeskjermen og sender en tittel og en bakgrunnsfarge til skjermen. Etter å ha definert vindusstørrelsen på skjermen vår, tegner vi formen til slangen på det virtuelle lerretet.

Penup()-metoden plukker ganske enkelt opp skilpaddens penn slik at det ikke blir tegnet en linje når skilpadden beveger seg. Goto(x,y)-metoden inneholder koordinatposisjoner som flytter skilpadden til en absolutt posisjon.

Vi lager så maten som slangen samler. Vi vil vise spillerens poengsum hver gang slangen samler maten og den høyeste poengsummen spilleren oppnår i løpet av spillet. Derfor bruker vi pen.write()-metoden for å implementere dette. Hideturtle() skjuler skilpaddeikonet fra skjermen på overskriftsdelen som denne teksten er skrevet.

Det er viktig å legge til turtle.mainloop() på slutten av koden din, som vil vise skjermen lenger slik at du som bruker kan gjøre noe på skjermen.

Kjør filen og du bør ha følgende utdata:

Sette opp retningstastene for slangen

Her vil vi sette opp spesifikke taster som vil lede retningen slangen vil bevege seg på skjermen. Vi bruker «L» for venstre, «R» for høyre, «U» for opp, «D» for ned. Vi vil implementere disse retningene ved å bruke skilpaddens retningsfunksjon som vi vil kalle på slangen.

  [FIXED] Ditt svar på invitasjonen kan ikke sendes

Legg til følgende kodebit i koden din.

# 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()-funksjonen ovenfor setter bevegelsen til slangen i den definerte posisjonen innenfor en presis koordinatverdi.

Listen()-funksjonen er en hendelseslytter som kaller på metodene som beveger slangen til en bestemt retning når spilleren trykker på tasten.

Implementeringen av slangespillet

Etter å ha lagt ned de grunnleggende utsiktene til slangespillet vårt, må vi gjøre spillet i sanntid.

Dette vil innebære følgende:

  • Øke slangens lengde hver gang den samler opp maten ved fortrinnsvis å bruke en annen farge.
  • Øker spillerens poengsum hver gang slangen samler maten og sporer den høyeste poengsummen.
  • Spilleren er i stand til å kontrollere slangen fra å kollidere med veggen eller sin egen kropp.
  • Spillet starter på nytt når slangen kolliderer.
  • Spillerens poengsum tilbakestilles til null når spillet starter på nytt, mens skjermen beholder spillerens høyeste poengsum.

Legg til resten av denne koden i python-filen din.

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 kodebiten ovenfor angir vi en tilfeldig posisjon for slangens mat på skjermen. Hver gang slangen samler denne maten, øker kroppssegmentet med en annen farge; hvit, i dette tilfellet, for å skille veksten.

  10 beste Cloud GPU-plattformer for AI og massiv arbeidsbelastning

Etter at slangen har samlet maten uten å kollidere, settes maten i en tilfeldig posisjon innenfor 270 koordinatområdet til skjermstørrelsen. Hver gang slangen samler mat, øker spillerens poengsum med 5. Når slangen kolliderer, settes spillerens poengsum til 0 mens skjermen beholder sin høyeste poengsum.

Returner nå Python-filen og du skal se skilpaddeskjermen din se slik ut:

Konklusjon 🐍

Å bruke skilpaddebiblioteket er en morsom og enkel måte å lage slangespillet på, som vi har sett i denne artikkelen. Alternativt kan du implementere det samme ved å bruke PyGame-biblioteket. Du kan sjekke ut PyGame-opplæringen her og se hvordan du kan implementere spillet annerledes.

Du kan også prøve ut et tallgjettingspill i Python eller hvordan du får JSON-data i Python.
Kos deg med koding!

x