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
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.
Inhaltsverzeichnis:
1. Vorwort2. 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