Zephyrnet-logo

Creëer je eerste spel met Python: Snake Game

Datum:

Python is zowel leuk als eenvoudig te gebruiken. Met een breed scala aan beschikbare bibliotheken, Python maakt ons leven gemakkelijker door het maken van games en applicaties te vereenvoudigen. In dit artikel gaan we een klassiek spel maken dat velen van ons waarschijnlijk ooit in ons leven hebben gespeeld: het slangenspel. Als je dit spel nog niet eerder hebt meegemaakt, is dit je kans om je eigen versie te verkennen en te maken zonder dat je zware bibliotheken op je systeem hoeft te installeren. Het enige dat je nodig hebt om aan de slag te gaan met het maken van dit nostalgische slangenspel is een basiskennis van Python en een online codeereditor zoals repl.it.

Het slangenspel is een tijdloze arcadeklassieker waarin de speler een slang bestuurt die in lengte groeit naarmate hij voedsel consumeert. Laten we bij deze implementatie de code uitsplitsen om te begrijpen hoe het spel is gestructureerd en hoe de Turtle-bibliotheek wordt gebruikt voor afbeeldingen en gebruikersinteractie.

Inhoudsopgave

Turtle Graphics gebruiken voor eenvoudige game-ontwikkeling

De Turtle-graphics bibliotheek in Python biedt een leuke en interactieve manier om vormen te creëren, op het scherm te tekenen en te reageren op gebruikersinvoer. Het wordt vaak gebruikt voor educatieve doeleinden, waarbij programmeerconcepten worden aangeleerd via visuele feedback. Deze code maakt gebruik van Turtle om de spelelementen te creëren, zoals de weergave van de slang, het eten en de score.

Online codeereditor: Repl.it

Met een webcoderingsplatform genaamd Repl.it kunt u rechtstreeks in uw webbrowser code ontwikkelen, uitvoeren en eraan samenwerken. Het ondersteunt veel verschillende programmeertalen en heeft ingebouwde compilers en tolken naast functies zoals het delen van code, versiebeheer en teamwerk. Ontwikkelaars maken er veelvuldig gebruik van om te leren, snel prototypes te maken en code te delen, omdat het eenvoudig te gebruiken is en geen configuratie vereist.

Algoritme

Laten we beginnen met het bouwen van ons eerste spel met Python. Om dit te doen moeten we bepaalde stappen hieronder volgen:

Maak een Repl-bestand

Stap1: Installeren van de benodigde bibliotheken

Dit markeert de eerste stap in de ontwikkeling van het spel dat bekend staat als Snake. Schildpad, willekeurig en tijd behoren hiertoe.

  • Schildpad: We hebben deze bibliotheek nodig om de graphics in ons spel te maken. We zijn in staat om de bewegingen van het voedsel en de slang op het scherm te manipuleren en te tekenen.
  • Willekeurig: Om willekeurige locaties voor het voedsel op het scherm te creëren, gebruiken we de willekeurige bibliotheek. Dit zorgt ervoor dat elke keer dat het voedsel wordt gegeten, het op een andere plaats verschijnt.
  • Tijd: De slang beweegt met een kleine vertraging tussen elke beweging dankzij de tijdbibliotheek. Dit maakt het spel eenvoudiger te bedienen en leuker voor spelers.
import turtle
import time
import random

Stap2: Het opzetten van de spelomgeving.

Dit omvat het vaststellen van de afmetingen van het scherm, het toevoegen van een blauwe achtergrond en het toevoegen van een kleine vertraging om een ​​vloeiende gameplay te garanderen. We hebben ook variabelen ingesteld zoals high_score om de hoogst behaalde score te behouden, score om de score van de speler te volgen en segmenten om het lichaam van de slang te volgen.

# Initialize the screen
sc = turtle.Screen()
sc.bgcolor("blue")
sc.setup(height=1000, width=1000)
delay = 0.1

# Initialize variables
segments = []
score = 0
high_score = 0
uitgang

Stap 3: Het maken van de slang

Een schildpadobject met een vierkante vorm symboliseert de slang. We plaatsen de pen in het midden van het scherm (ga naar (0, 100)), stellen de kleur in op zwart en zetten hem vervolgens hoger om te voorkomen dat er lijnen worden getekend. Oorspronkelijk ingesteld op “stop”, blijft de richting van de slang stationair totdat de speler hem begint te bewegen.

# Create the snake
snake = turtle.Turtle()
snake.shape("square")
snake.color("black")
snake.penup()
snake.goto(0, 100)
snake.direction = "stop"
Slang creëren

Stap 4: Bewegingsfuncties

We definiëren de bewegingsfuncties van de slang (move()) volgens zijn richting op dat moment. Deze functies bepalen het vermogen van de slang om omhoog, omlaag, naar links en naar rechts te bewegen. Ze bewegen de kop van de slang 20 eenheden in de juiste richting wanneer daarom wordt gevraagd.

# Functions to move the snake
def move():
    if snake.direction == "up":
        y = snake.ycor()
        snake.sety(y + 20)
    if snake.direction == "down":
        y = snake.ycor()
        snake.sety(y - 20)
    if snake.direction == "left":
        x = snake.xcor()
        snake.setx(x - 20)
    if snake.direction == "right":
        x = snake.xcor()
        snake.setx(x + 20)

Stap 5: De slang besturen

Met behulp van sc.listen() en sc.onkey() configureren we sleutelluisteraars om de slang te besturen. De gerelateerde routines (go_up(), go_down(), go_left(), go_right()) veranderen de richting van de slang als reactie op toetsaanslagen op het w-, s-, a- of d-toetsenbord.

# Functions to link with the keys
def go_up():
    snake.direction = "up"

def go_down():
    snake.direction = "down"

def go_left():
    snake.direction = "left"

def go_right():
    snake.direction = "right"

# Listen for key inputs
sc.listen()
sc.onkey(go_up, "w")
sc.onkey(go_down, "s")
sc.onkey(go_left, "a")
sc.onkey(go_right, "d")

Stap 6: Het voedsel creëren

Het voedsel wordt weergegeven door een rond schildpadobject met een rode kleur. Aanvankelijk geplaatst op coördinaten (100, 100), dient het als doelwit voor de slang om te eten. Wanneer de slang met het voedsel in botsing komt, ‘eet’ hij het voedsel op en verschijnt er op een willekeurige locatie een nieuwe.

# Create the food
food = turtle.Turtle()
food.shape("circle")
food.color("red")
food.penup()
food.goto(100, 100)

Het voedsel creëren

Stap 7: Score weergeven

Een schildpadvoorwerp (pen) geeft de score van de speler en de hoogst behaalde score weer. Deze informatie wordt elke keer bijgewerkt als de slang het voedsel eet.

# Create the score display
pen = turtle.Turtle()
pen.penup()
pen.goto(0, 100)
pen.hideturtle()
pen.write("Score: 0  High Score: 0", align="center", font=("Arial", 30, "normal")
Score weergeven

Stap 8: Hoofdspellus

De kern van het Snake-spel is de primaire spelloop. Het beheert de gebruikersinvoer, werkt het scherm bij, beweegt de slang, zoekt naar botsingen en regelt hoe het spel verloopt. Laten we de specifieke functies van elke sectie van de hoofdlus in meer detail bekijken:

while True:
    sc.update()  # Update the screen
    move()  # Move the snake
    time.sleep(delay)  # Introduce a slight delay for smooth gameplay
  • sc.update() : werkt het scherm bij om eventuele wijzigingen in het spel weer te geven. Zonder dit zou het scherm niet worden vernieuwd en zouden spelers de slangbeweging of de score-update niet zien.
  • move(): Deze functie bestuurt de beweging van de slang op basis van de huidige richting. Het verplaatst de kop van de slang met 20 eenheden in de richting die wordt aangegeven door de invoer van de speler. De slang beweegt voortdurend in de richting waarin hij het laatst werd geleid, totdat de speler van richting verandert.
  • time.sleep(delay): introduceert een kleine vertraging tussen elke beweging van de slang. De delay variabele is ingesteld op 0.1 aan het begin van de code. Het doel van deze vertraging is om de snelheid van het spel te beheersen. Zonder dit zou de slang te snel bewegen zodat de speler niet kon reageren, waardoor het spel moeilijk te spelen was.

Voedsel eten en de slang laten groeien

    if snake.distance(food) < 20:
        x = random.randint(-200, 200)
        y = random.randint(-200, 200)
        food.penup()
        food.goto(x, y)
        food.pendown()

        # Increase the length of the snake
        new_segment = turtle.Turtle()
        new_segment.shape("square")
        new_segment.color("grey")
        new_segment.penup()
        segments.append(new_segment)
        score += 1

        # Update score and high score
        if score > high_score:
            high_score = score
        pen.clear()
        pen.write("Score: {}  High Score: {}".format(score, high_score), align="center", font=("Arial", 30, "normal"))

Voedsel eten

  • Wanneer de kop van de slang (snake) binnen een afstand van 20 eenheden van het voedsel komt (food), betekent dit dat de slang het voedsel heeft “opgegeten”.
  • De positie van het voedsel wordt vervolgens gereset naar een nieuwe willekeurige locatie op het scherm met behulp van random.randint().
  • Deze actie wekt de illusie dat het voedsel elke keer dat het wordt gegeten op verschillende plekken “verschijnt”.

Het slangenlichaam laten groeien

  • Wanneer de slang het voedsel eet, voegt de code een nieuw segment toe aan het lichaam van de slang om het te laten groeien.
  • Een nieuw schildpadobject (new_segment) wordt gemaakt, dat onderdeel wordt van de segments lijst.
  • Deze lijst houdt alle segmenten bij waaruit het lichaam van de slang bestaat.
  • De score van de speler wordt verhoogd (score += 1) elke keer dat de slang voedsel eet.

Score-update

  • Na het eten van voedsel en het bijwerken van de score, wordt de scoreweergave bijgewerkt met behulp van de pen voorwerp.
  • De pen.clear() functie wist de vorige partituurweergave.
  • Vervolgens worden de bijgewerkte score en de hoogste score naar het scherm geschreven met behulp van pen.write().

Het lichaam van de slang verplaatsen

    for i in range(len(segments) - 1, 0, -1):
        x = segments[i - 1].xcor()
        y = segments[i - 1].ycor()
        segments[i].goto(x, y)

    # Move the first segment to follow the head
    if len(segments) > 0:
        x = snake.xcor()
        y = snake.ycor()
        segments[0].goto(x, y)
  • Dit codegedeelte zorgt ervoor dat het lichaam van de slang zijn kop volgt.
  • Het itereert door de segments lijst, beginnend bij het laatste segment (len(segments) - 1) tot aan het tweede segment (0), waarbij elk segment naar de positie van het segment ervoor wordt verplaatst.
  • Hierdoor ontstaat het effect dat het lichaam van de slang de kop volgt terwijl deze beweegt.

Het eerste segment (hoofd) bijwerken

  • Nadat alle lichaamssegmenten zijn verplaatst, wordt de positie van het eerste segment (de kop) bijgewerkt zodat deze overeenkomt met de huidige positie van de slang (snake).
  • Dit zorgt ervoor dat de kop van de slang het lichaam blijft leiden terwijl het beweegt.

Einde opmerking

Deze code biedt een basisstructuur voor een Snake-spel met behulp van de grafische bibliotheek van Turtle. Het spel omvat het besturen van een slang om voedsel te eten en langer te groeien, terwijl botsingen met muren en zijn eigen staart worden vermeden. Het is een geweldig beginnersproject om te leren over game-ontwikkelingsconcepten, basisprogrammering in Python en het werken met gebruikersinvoer en afbeeldingen. Voel je vrij om deze code aan te passen en uit te breiden om functies toe te voegen zoals botsingsdetectie, het verhogen van de moeilijkheidsgraad of het toevoegen van niveaus om je Snake-spel nog spannender te maken!

Als je meer wilt weten over Python, schrijf je dan in voor onze gratis pythoncursus.

Lees hier ook onze meer artikelen met betrekking tot Python:

spot_img

Laatste intelligentie

spot_img