Spieleprogrammierung in Python

Im Rahmen eines Programmierprojektes bei FAB-Leibnitz wollen wir unser erstes kleines Spiel in Python programmieren. Wir werden dazu unsere kleine Heldin/unseren kleinen Helden kreieren, die/der über den Bildschirm huscht und kleine Münzen einsammelt. Dieser erste Grundstock kann später beliebig mit Feinden, Goodies, weiteren Levels und verbesserter Logik erweitert werden.

Pygame installieren

Bevor wir mit python komfortabel Spiele programmieren können, muss wie folgt vor gegangen werden.

Unter System and Security, System und Advanced System Settings einen neuen Pfad zum Python Installationsfolder einfügen.

In einem Kommandofenster in den Python Folder und in den Unterordner Scripts wechseln.

Dort den Befehl pip install pygame ausführen.

Nun sollte die Bibliothek mit dem Befehl import pygame in ein Python Skript eingebunden werden können.

Grundgerüst für ein Pythonspiel mit pygame

Das folgende Skript bietet ein Grundgerüst für ein Python Spiel. Die Spiellogik spielt sich in der Schleife while spielaktiv ab. Dieses Grundgerüst wurde zu großen Teilen von www.python-lernen.de übernommen.

# Importieren der Pygame-Bibliothek
import pygame

# initialisieren von pygame
pygame.init()

# genutzte Farbe
ORANGE  = ( 255, 140, 0)
ROT     = ( 255, 0, 0)
GRUEN   = ( 0, 255, 0)
SCHWARZ = ( 0, 0, 0)
WEISS   = ( 255, 255, 255)

# Fenster öffnen
fenster=pygame.display.set_mode((640, 480))

# Titel für Fensterkopf
pygame.display.set_caption("Unser erstes Pygame-Spiel")

#Bildschirmaktualisierung einstellen
clock = pygame.time.Clock()

# solange die Variable True ist, soll das Spiel laufen
spielaktiv = True

# Schleife Hauptprogramm
while spielaktiv:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            spielaktiv = False

    # Spielfeld löschen
    fenster.fill(WEISS)

    # Fenster aktualisiere
    pygame.display.flip()


    #resfresh zeit
    clock.tick(60)

pygame.quit()
quit()

Spielfigur einfügen und bewegen

Nun kommt der kreative Teil. Wir kreieren unseren kleinen Spielhelden, der über das Spielfeld huschen soll. In meinem Fall habe ich einen Superman ausgeschnitten und eingefügt.

Vor dem Aufruf des Hauptprogramm definieren wir Variablen für die x und y Position, diese werden in unserem späteren Spielefenster von Links oben aus gemessen. Um später nicht pixelgenau jede einzelne Bewegung verfolgen zu müssen führen wir einen Skalierungsfaktor ein. Unser Bildschirm wird dann in Kacheln dieser Größe unterteilt.

#Positionsvariablen
figurx = 10
figury = 10
skalierung = 25

Unser Held wird geladen und einer Variable Figur zugewiesen. So können wir unseren Helden/unsere Heldin später im Code verwenden.

# Fenster öffnen
fenster=pygame.display.set_mode((640, 480))
figur = pygame.image.load("superman.png")

Die Figur kann nun nach dem Löschen des Spielfeldes im Hauptprogramm gezeichnet werden

    # Figur zeichnen
    fenster.blit(figur, (figurx*skalierung,figury*skalierung))

Die Tastenabfrage wird so weit erweitert, dass wir die Pfeiltasten verwenden können um den Helden zu bewegen. Mit dem Befehl pygame.transform.flip(figur, True, False) kann eine Instanz der Figur erstellt werden, bei der diese nach links oder rechts schauen kann. Die unten eingefügte Implementierung ist so nicht schön, vielleicht fällt dir eine bessere Implementierung ein. Wie man die Figur über Manipulationen der Variablen figurx und figury nach links und rechts bewegt kannst du nun selbst heraus finden.

    for event in pygame.event.get():
        if event.type == pygame.QUIT or (event.type==pygame.KEYDOWN and event.key==pygame.K_ESCAPE):
            spielaktiv = False
        elif event.type == pygame.KEYDOWN:
            print("Spieler hat Taste gedrückt")

            # Tasteabfrage
            if event.key == pygame.K_RIGHT:
                print("Spieler hat Pfeiltaste rechts gedrückt")
 
            elif event.key == pygame.K_LEFT:
                print("Spieler hat Pfeiltaste links gedrückt")

                figur=pygame.transform.flip(figur,True,False)
            elif event.key == pygame.K_UP:
                print("Spieler hat Pfeiltaste hoch gedrückt")
  
            elif event.key == pygame.K_DOWN:
                print("Spieler hat Pfeiltaste runter gedrückt")
 

Münzen einzeichnen und sammeln

Bisher bewegt sich unsere Spielfigur nur etwas unmotiviert über den Bildschirm. Wir wollen ihm nun die Möglichkeit geben Münzen zu sammeln und damit eine Punktevariable nach oben zählen. Dazu definieren wir eine Variable punkte = 0 und eine Karte mit Nullen und Einsen. Überall wo eine 1 steht soll eine Münze gezeichnet werden. Mit verschieden großen Zahlenwerten könnte man verschiedene Münzen zeichnen oder auch unüberwindbare Hindernisse und Feinde definieren.

punkte = 0

karte=[
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0],
[0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0],
[0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0],
[0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0],
[0,1,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,0],
[0,1,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,1,0],
[0,0,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,0,0],
[0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0],
[0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0],
[0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0],
] 

Im Hauptprogramm werden die Münzen einfach als runde Kreise in der Farbe orange dargestellt. Man könnte zusätzlich eine Zahl in die Münzen schreiben oder kleine Bilder darstellen.

    for x in range(0,20):
        for y in range(0,17):
            if karte[y][x] != 0:
                pygame.draw.ellipse(fenster,ORANGE,[x*skalierung,y*skalierung,5,5])

Wenn die Figur auf einen Punkt trifft an dem eine Münze liegt soll die Münze entfernt werden und der Punktezähler entsprechend hochgezählt werden. Auch hier könnte man je nach Figur eine verschieden hohe Punkteanzahl hinzuzählen.


    if karte[figury][figurx] != 0:
        karte[figury][figurx] = 0
        punkte+=1
        print("Punkteanzahl: " + str(punkte))

Im folgenden wird der Punktestand auf dem Bildschirm ausgegeben. Auch dieser Codeteil kann verbessert werden indem diese Ausgabe an einer anderen Stelle platziert wird.

    ausgabetext = "Punkteanzahl: " + str(punkte)
    font = pygame.font.SysFont(None, 70)
    text = font.render(ausgabetext, True, ROT)
    fenster.blit(text, [100, 10])  

Folgende Spiele sind am FAB entstanden

Alle Spiele können als ZIP Ordner an folgender Stelle heruntergeladen werden. Dieser Ordner muss entpackt und die .exe Dateien müssen ausgeführt werden um die Spiele zu spielen.

Bayrisches Bier – Vulgo elastischer Hosenbund

Die Spiele dürfen mit freundlicher Genehmigung der Teilnehmer heruntergeladen werden. Um das Spiel spielen zu können muss jeweils der ZIP Ordner entpackt werden und eine Python Version inkl. pygame auf dem Computer installiert werden.

Collector – man beachte der Held wurde vom Entwickler selbst gezeichnet
Zauberfee – von Julian und Ann
Beerquest – der Held versucht sich zünftig zu betrinken
Willst Du Dir etwas merken oder teilen, dann klick hier:

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

code