Python Tutorial
- jetzt Python programmieren lernen

Spiel Breakout programmieren mit Python

Breakout in Python programmieren

Wir wollen in diesem Kapitel das alte (kam 1976 raus) Spiel Breakout in Python programmieren und dadurch weitere Programmiertechniken lernen. Kurz zu Breakout.

Der Spieler muss den von oben kommenden Ball mit einem Schläger vor dem Absturz bewahren und alle Mauersteine treffen, die dann verschwinden. Sind alle Mauersteine getroffen, ist das Level geschafft und das nächste (schwierigere startet). Anfangs war dieses Spiel eigentlich noch kein Computerspiel, da die komplette Hardware fest verdrahtet war (sprich nicht wirklich ein Computer). Lustigerweise wurden die Farben über farbige Folien umgesetzt. Breakout war extrem erfolgreich und über die Jahre kamen viele Klone des Spiels mit Erweiterungen und noch mehr Spielspaß.

Was sich erst einmal wie Pong mit Mauersteinen aus dem letzten Kapitel nur um 90 Grad gedreht anhört setzten wir hier in einer komplett anderen Programmiertechnik um! Es ist immer von Vorteil, wenn man als Programmierer mehrere Optionen als Vorgehensweise hat. Also mitmachen und die Unterschiede zum vorherigen Kapitel ansehen. Es wird wieder Pygame mit eingesetzt.

Aufbau des Fensters von Breakout

Wir haben ein Spielfeld, das hochkant ausgerichtet ist. Dabei setzten wir unser Wissen aus dem Kapitel „ein Koordinatensystem für unsere Computerspiele“ ein.

Unsere Mauersteine werden für eine Vereinfachung als Quadrate (alle Seiten sind gleich lang) umgesetzt. Es geht hier um die Vorgehensweise und nicht um eine unnötige Komplizierung. Wer Spaß hat, kann am Ende sich eine Breakout-Variante mit länglichen Ziegelsteinen basteln.

Unser Ball ist gleich Breit (und somit auch gleich hoch) wie die Ziegelsteine. Somit können wir sehr einfach überprüfen, ob er im nächsten Bewegungsschritt einen Stein trifft.

Wir können also unser Spielfeld einfach über das Koordinatensystem aufbauen. Allerdings haben die Mauersteine eine vorgegebene Größe. Wir geben unseren Spielsteinen eine Feldbreite von 20 Pixel und eine Feldhöhe von 20 Pixeln. Die Zahl 20 ist schön einfach auch im Kopf zu rechnen.

Unser Spielfeld selber soll bis zu 20 Ziegelsteine nebeneinander darstellen können – somit ist es 20 x 20 = 400 Pixel breit (unsere Gesamtbreite). Die Spielfeldhöhe soll 30 Positionen haben – sprich wir haben die Feldhöhe 20 mal 30 mögliche Positionen – sprich 30 x 20 = 600 Pixel Gesamthöhe. Wir haben also einen Multiplikator (Faktor), den wir immer wieder im ganzen Spiel nutzen – sprich diesen setzen wir als Kontante im Spiel ein.

Hier nun unbedingt von Anfang an mit diesem Multiplikator rechnen. Somit ist eine Änderung der Spielfeldgröße extrem einfach umsetzbar. Hier unsere ersten Programmzeilen:

# Importieren der Pygame-Bibliothek
import pygame, sys, time, random
from pygame.locals import *

# unser Multiplikator 
MULTIPLIKATOR = 20

# Spielfeld erzeugen über Berechnung
fenster = pygame.display.set_mode((20 x MULTIPLIKATOR, 30 * MULTIPLIKATOR))

Jetzt kommt unsere typische Schleife für unser Hauptprogramm. Diese wie bereits aus dem bisherigen Kapitel einsetzt mit der Möglichkeit, dass der Spieler das Spiel über die ESCAPE-Taste beenden kann. Da wir diese Vorgehensweise schon öfters im Kurs gemacht haben, keine große Erklärung dazu (wenn gewünscht, einfach in den entsprechenden Kapiteln nachschlagen).

# Importieren der Pygame-Bibliothek
import pygame, sys, time, random
from pygame.locals import *

# unser Multiplikator 
MULTIPLIKATOR = 20

# Spielfeld erzeugen über Berechnung
fenster = pygame.display.set_mode((20 * MULTIPLIKATOR, 30 * MULTIPLIKATOR))

# Titel für Fensterkopf
pygame.display.set_caption("Breakout in Python")
spielaktiv = True

# Bildschirm Aktualisierungen einstellen
clock = pygame.time.Clock()

# Schleife Hauptprogramm
while spielaktiv:
    # Überprüfen, ob Nutzer eine Aktion durchgeführt hat
    for event in pygame.event.get():
        if event.type == pygame.QUIT or event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
            spielaktiv = False
            print("Spieler hat beendet")

    # Fenster aktualisieren
    pygame.display.flip()

    # Refresh-Zeiten festlegen
    clock.tick(10)

pygame.quit()

Wir bekommen nun unser Spielfenster mit der Größe 400 auf 600 Pixel erstellt. Ändern wir die Kontante „MULTIPLIKATOR“, ändert sich automatisch die Größe des Fensters – später auch automatisch die Größe der Spielelemente.