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!
Innholdsfortegnelse
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.
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.
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.
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!