Sådan laver du et slangespil i Python

Hvis du er en, der nyder at spille slangespillet, er jeg sikker på, at du vil finde denne artikel interessant.

I denne artikel vil jeg lære dig, hvordan du finder på et simpelt slangespil, som selv en begynder i Python ville finde let at udvikle.

Der findes en række måder at skabe dette spil på, og en inkluderer brugen af ​​Pythons PyGame-bibliotek, som er et Python-bibliotek, vi bruger til at skabe spil.

Den anden måde er ved at bruge skildpaddebiblioteket. Dette modul leveres forudinstalleret med Python, og det giver brugerne et virtuelt lærred til at skabe former og billeder.

Derfor vil denne artikel bruge skildpaddebiblioteket til at implementere vores simple slangespil, som er begyndervenligt især for nybegyndere Python-udviklere.

Udover dette modul vil vi også bruge to andre moduler nemlig;

  • Tidsmodul – Denne metode giver os mulighed for at holde styr på antallet af sekunder, der er forløbet siden forrige gang.
  • Tilfældigt modul – Det genererer tal tilfældigt i Python.

Andre grundlæggende værktøjer, du skal bruge, inkluderer en teksteditor efter eget valg. Jeg vil bruge VSCode i denne artikel. Selvfølgelig skal du installere Python 3 på din maskine, hvis du ikke allerede har det. Du kan også bruge toadmin.dk-kompileren.

Det her skal være sjovt!

Sådan fungerer slangespillet

Det ultimative mål med dette spil er, at spilleren opnår den højeste score ved at kontrollere slangen for at indsamle den mad, skærmen viser.

Spilleren styrer slangen ved hjælp af fire retningstaster, der er i forhold til den retning, slangen bevæger sig mod. Skulle slangen ramme en blok eller sig selv, taber spilleren spillet.

De følgende trin vil vi følge for at implementere dette spil.

  • Importerer de forudinstallerede moduler til vores programmer (skildpadde, tid og tilfældig).
  • Oprettelse af spillets skærmvisning ved hjælp af skildpaddemodulet.
  • Indstilling af tasterne til slangens bevægelsesretning rundt på skærmen.
  • Implementeringen af ​​gameplayet.
  10 bedste Java-blogs til programmører på alle niveauer

Opret en snakegame.py-fil, hvori vi tilføjer implementeringskoden.

Import af moduler

Denne bit af koden vil importere skildpadde, tid og tilfældige moduler, der som standard er forudinstalleret i Python. Derudover vil vi derefter indstille standardværdier for spillerens indledende score, den højeste score, spilleren vil opnå, og forsinkelsestiden, som spilleren tager i hvert træk. Tidsmodulet bruges her til at beregne forsinkelsestidspunktet.

Tilføj følgende kodebit til din snakegame.py-fil.

import turtle
import random
import time

player_score = 0
highest_score = 0
delay_time = 0.1

Oprettelse af spillets skærmvisning

Skildpaddemodulet, vi importerer her, giver os mulighed for at skabe et virtuelt lærred, der vil være spillets vinduesskærm. Herfra kan vi skabe slangens krop og den mad slangen vil samle. Vores skærm vil også vise spillerens sporede score.

Tilføj denne kode til 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()

Kodestykket ovenfor starter med initialisering af skildpaddeskærmen og sender en titel og en baggrundsfarve til skærmen. Efter at have defineret vinduesstørrelsen på vores skærm tegner vi formen af ​​slangen på det virtuelle lærred.

Penup()-metoden samler simpelthen skildpaddens pen op, så der ikke tegnes en streg, når skildpadden bevæger sig. Goto(x,y)-metoden indeholder koordinatpositioner, der flytter skildpadden til en absolut position.

Vi skaber så den mad, som slangen samler. Vi vil gerne vise spillerens score hver gang slangen samler maden og den højeste score spilleren opnår under spillet. Derfor bruger vi pen.write() metoden til at implementere dette. Hideturtle() skjuler skildpaddeikonet fra skærmen på overskriftssektionen, hvor denne tekst er skrevet.

  Sådan installeres Drupal på Ubuntu Server

Det er vigtigt at tilføje turtle.mainloop() i slutningen af ​​din kode, som vil vise skærmen længere for at give dig som bruger mulighed for at gøre noget på skærmen.

Kør filen, og du skal have følgende output:

Opsætning af retningstasterne til slangen

Her vil vi opsætte specifikke taster, der vil guide den retning, slangen vil bevæge sig på skærmen. Vi bruger ‘L’ for venstre, ‘R’ for højre, ‘U’ for op, ‘D’ for ned. Vi vil implementere disse retninger ved hjælp af skildpaddens retningsfunktion, som vi vil kalde på slangen.

Tilføj følgende kodestykke til din kode.

# 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() ovenfor indstiller slangens bevægelse i den definerede position inden for en præcis koordinatværdi.

Listen()-funktionen er en begivenhedslytter, der kalder på de metoder, der flytter slangen til en bestemt retning, når afspilleren trykker på tasten.

Implementeringen af ​​slangespillet

Efter at have fastlagt det grundlæggende syn på vores slangespil, bliver vi nødt til at gøre spillet i realtid.

Dette vil involvere følgende:

  • At vokse slangens længde hver gang den samler maden ved helst at bruge en anden farve.
  • Forøgelse af spillerens score hver gang slangen samler maden og sporer den højeste score.
  • Spilleren er i stand til at kontrollere slangen fra at kollidere med væggen eller sin egen krop.
  • Spillet starter igen, når slangen kolliderer.
  • Spillerens score nulstilles, når spillet genstartes, mens skærmen bevarer spillerens højeste score.

Tilføj resten af ​​denne kode til 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 ovenstående kodestykke indstiller vi en tilfældig position for slangens mad på skærmen. Hver gang slangen samler denne føde, øges dens kropssegment med en anden farve; hvid, i dette tilfælde, for at skelne dens vækst.

  Photoshopped eller ej? Tre måder at fortælle, om et billede er ægte eller falsk

Efter at slangen har samlet maden uden at kollidere, sættes maden i en tilfældig position inden for 270 koordinatområdet for skærmstørrelsen. Hver gang slangen samler mad, stiger spillerens score med 5. Når slangen kolliderer, sættes spillerens score til 0, mens skærmen bevarer sin højeste score.

Returner nu Python-filen, og du skulle se din skildpaddeskærm se sådan ud:

Konklusion 🐍

Brug af skildpaddebiblioteket er en sjov og nem måde at skabe slangespillet på, som vi har set i denne artikel. Alternativt kan du implementere det samme ved hjælp af PyGame-biblioteket. Du kan tjekke ud PyGame tutorial her og se, hvordan du kan implementere spillet anderledes.

Du kan også prøve et tal-gættespil i Python eller hvordan man får JSON-data i Python.
Nyd kodning!