Homepage von Papa

Projekt Snake

Die Wiederholung

Die Ausgabe einer Nachricht geht im Wesentlichen analog der Anzeige des Spielstands. Im Gegensatz zu diesem, wird die Nachricht aber nur am Ende des Spiels ausgegeben und nicht permanent aktualisiert.

Zuerst brauchen wir die neue globale boolsche Variable verloren. Initial setzen wir sie auf False.

...

# Spielsteuerung
spielen = True
verloren = False
...

Als nächstes ändern wir die Abfrage, ob die Schlange aus dem Fenster gekrochen ist. Die Ausgabe "Verloren!" löschen wir und statt spielen = False s etzen wir die neue globale Variable verloren auf True:

...
        # Abfrage, ob die Schlange aus dem Fenster verschwindet.
        # Wenn ja, wird die Variable ‚verloren‘ auf True gesetzt
        if snake_x >= BREITE or snake_x < 0 or snake_y >= HOEHE or snake_y < 0:
            verloren = True
...

Jetzt springe ich etwas - unter der im letzten Kapitel angelegten Funktion spielstand_ anzeigen(), nehmen wir eine weitere Funktion auf und nennen sie nachricht_anzeigen() :

...
def spielstand_anzeigen(punktestand):
    schrift_punktestand = pygame.font.SysFont("playbill", 35)
    anzeige  = schrift_punktestand.render("Spielstand: " + str(punktestand), True, BLAU)
    fenster.blit(anzeige, [0, 0])


def nachricht_anzeigen(nachricht, farbe):
    font_style = pygame.font.SysFont("arial", 25)
    bild = font_style.render(nachricht, True, farbe)
    fenster.blit(bild, [180, HOEHE/2])
...

Als Übergabeparameter erwartet die Funktion zwei Strings, die Nachricht selbst und eine Farbe für die Schrift. In der Funktion wird zuerst die Schriftart und die -größe an eine lokale Variable übergeben, ich habe mich für "Arial" in Größe "25" entschieden.

Nehmt gerne etwas anderes! An dieser Stelle noch einmal der Hinweis auf das Hilfsprogramm zur Anzeige der Fonts in pygame.

Die Nachricht und der Text werden zu einem Bild "gerendert", das dann im Fenster angezeigt wird, an Position 180 Pixel auf der x-Achse und der Wert der Hälfte des Bildschirms auf der y-Achse .

Direkt unterhalb der Schleife while spielen bauen wir noch eine neue Schleife ein, while verloren (Achtung, das ist in der while spielen-Schleife, also eine Schleife in der Schleife!):

...
def spielschleife_aufrufen():
    print('in spielschleife_aufrufen')
    global spielen, snake_x, snake_y, quadrat_seite, snake_bewegung_x, snake_bewegung_y, \
           snake_laenge, verloren, snake_als_liste

    essen_x = random.choice(liste_essen_x)
    essen_y = random.choice(liste_essen_y)
       

    while spielen:
       
        # dieser Teil wird nur aufgerufen, wenn das Spiel verloren wurde
        while verloren:
            fenster.fill(BLAU)
            nachricht_anzeigen("Verloren! Nochmal mit \"c\", verlassen mit \"q\" ", ROT)
            pygame.display.update()
           
            for event in pygame.event.get():
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_q:
                        spielen = False
                        verloren = False
                    if event.key == pygame.K_c:
                        spielen = True
                        verloren = False
                        snake_x = BREITE/2
                        snake_y = HOEHE/2
                        snake_bewegung_x = 0
                        snake_bewegung_y = 0
                        snake_als_liste = []
                        snake_laenge = 1
                        futter_vorbereiten()
                        spielschleife_aufrufen()

                if event.type == pygame.QUIT:
                    spielen = False
                    verloren = False
 
            for event in pygame.event.get():        
...

Sobald verloren auf True gesetzt wurde, springt die Verarbeitung hier hin.

Das Fenster wird blau (Zeile 15), die Nachricht wird durch Aufruf der Funktion ausgegeben und es wird auf eine Entscheidung des Spielers in Form einer Eingabe gewartet.

Entscheidet sich der Spieler für das Drücken der q-Taste (Zeile 21), wird spielen auf False gesetzt, damit die while spielen -Schleife ihre Abbruchbedingung bekommt und verloren wird auf False gesetzt, damit wir die while verloren -Schleife verlassen können.

Gleiches geschieht, wenn der Spieler das X am oberen rechten Fensterrand klickt (Zeile 36).

Entscheidet sich der Spieler hingegen für das Drücken der c-Taste (Zeile 24) bleibt spielen explizit auf True, verloren wird zurückgesetzt auf False und alle für den Neustart notwendigen Grundwerte werden zurückgesetzt. Am Ende wird ein neues Futter-Quadrat erzeugt (Zeile 33) und die Spielschleife wird erneut aufgerufen.

Damit geht das Spiel von vorne los.

  • Zurück
  • Weiter

Inhaltsverzeichnis:

1. Vorwort
2. Das Projekt
3. Vorarbeiten
4. Projekt Snake
4.1. Der Funktionsumfang
4.2. Die Planung der Umsetzung
4.3. Das Coden
4.3.1. Das Grundgerüst
4.3.2. Das Fenster
4.3.3. Der Schlangenkopf
4.3.4. Die Bewegung der Schlange
4.3.5. Kleine Verbesserungen
4.3.6. Das Futter platzieren
4.3.7. Die Schlange wächst
4.3.8. Den Spielstand ausgeben
4.3.9. Die Wiederholung
4.3.10. Der finale Stand
5. Abschluss

© by Papa. Die Seite ist online seit 2020.

Menu

  • Startseite
  • Projekte
    • Übersicht aller Projekte
    • Nachbau Snake
    • Taschenrechner
  • Helferlein
    • Übersicht Hilfprogramme
    • Fonts in pygame
    • Quellcode nach HTML
    • Text nach HTML
  • Impressum
  • Disclaimer
This is message 1

Modal content goes here