Python Tutorial
- jetzt Python programmieren lernen

Gegner einbauen für mehr Spaß im Spiel

Und nun kommt unser Gegner: die blut- und proteinsaugende Varroamilbe. Als Grafik kann man diese herunterladen unter: https://www.python-lernen.de/bilder/varroa.png

unser Gegner – die Varroamilbe

Wer Spaß hat, kann diese ja noch als Sprite-Sheet animieren.

Unser Gegner wird wie gehabt als Bild integriert:

# Gegner
gegnerBild = pygame.image.load("bilder/varroa.png")
gegnerX = W - 100
gegnerY = 20
gegnerbewegung = 0

Da sich unser Gegner auch in X-Richtung bewegt, benötigen auch dafür eine Variable!

Nun platzieren wir zum Testen den Gegner in der Hauptschleife:

    # Spielfeld/figuren zeichnen
    animbereich  += 1

    if animbereich  > 5:
        animbereich  = 0

    fenster.blit(spieler, (100, spielerposY), bereich[animbereich])    

    fenster.blit(gegnerBild, (gegnerX , gegnerY))   

Soweit sollte das nun funktionieren. Wir erhalten als Ausgabe unsere Spielfigur und den ersten Gegner.

Spielerfigur und erster Gegner
Spielerfigur und erster Gegner

Nachdem wir nicht nur einen Gegner haben werden, ist es hilfreich eine Funktion für die Ausgabe der Gegner zu erstellen. Wir nehmen also die Ausgabe über blit(9 aus der Hauptschleife und erstellen eine Funktion:

Vor der Hauptschleife erstellen wir eine Funktion für die Ausgabe des Gegners:

def gegner(x, y):
    fenster.blit(gegnerBild, (x, y))

# Schleife Hauptprogramm

Und in der Hauptschleife den Aufruf der Funktion zum zeichnen des Gegners:

    # Spielfeld/figuren zeichnen
    animbereich  += 1

    if animbereich  > 5:
        animbereich  = 0

    fenster.blit(spieler, (100, spielerposY), bereich[animbereich])    

    gegner (gegnerX, gegnerY)

Und zum Vergleich der bisher erstellte Code komplett:

# Importieren u. initialisieren der Pygame-Bibliothek
import pygame
from pygame.locals import *
pygame.init()

# Variablen/KONSTANTEN setzen
W, H = 800, 600
FPS  = 30
SCHWARZ = ( 0, 0, 0)
WEISS   = ( 255, 255, 255)

spielaktiv = True

spieler = pygame.image.load("bilder/biene-sprite-sheet.png")
bereich = ['','','','','','']
bereich[0] = (0,0,100,100)
bereich[1] = (101,0,100,100)
bereich[2] = (202,0,100,100)
bereich[3] = (303,0,100,100)
bereich[4] = (404,0,100,100)
bereich[5] = (505,0,100,100) 
animbereich = 0

spielerposY = 300
spielerbewegung = 0 

# Gegner
gegnerBild = pygame.image.load("bilder/varroa.png")
gegnerX = W - 100
gegnerY = 20
gegnerbewegung = 0

# Definieren und Öffnen eines neuen Fensters
fenster = pygame.display.set_mode((W, H))
pygame.display.set_caption("Varroa Invaders")
clock = pygame.time.Clock()

def gegner(x, y):
    fenster.blit(gegnerBild, (x, y))

# Schleife Hauptprogramm
while spielaktiv:
    # Überprüfen, ob Nutzer eine Aktion durchgeführt hat
    for event in pygame.event.get():
        # Beenden bei [ESC] oder [X]
        if event.type==QUIT:
            spielaktiv = False

        if event.type == KEYDOWN:
            # print("Spieler hat Taste gedrückt")

            # Taste für Spieler 1
            if event.key == K_UP:
                # print("Spieler hat Pfeiltaste hoch gedrückt")
                spielerbewegung = -6
            elif event.key == K_DOWN:
                # print("Spieler hat Pfeiltaste runter gedrückt")
                spielerbewegung = 6
            elif event.key == K_ESCAPE:
                spielaktiv = False

        if event.type == KEYUP:
            # print("Spieler stoppt bewegung")
            spielerbewegung = 0

    # Spiellogik
    if spielerbewegung  != 0:
        spielerposY += spielerbewegung 

    if spielerposY < 0:
        spielerposY = 0
        spielerbewegung = 0 

    if spielerposY > H - 90:
        spielerposY = H - 90
        spielerbewegung = 0 

    # Spielfeld löschen
    fenster.fill(WEISS)

    # Spielfeld/figuren zeichnen
    animbereich  += 1

    if animbereich  > 5:
        animbereich  = 0

    fenster.blit(spieler, (100, spielerposY), bereich[animbereich])    

    gegner (gegnerX, gegnerY)

    # Fenster aktualisieren
    pygame.display.flip()
    clock.tick(FPS)

zufällige Platzierung des Gegners am Spielstart

Wenn wir nun noch eine zufällige Platzierung des Gegners für den Spielstart erreichen wollen, müssen wir unser Modul „random“ am Anfang importieren.

# Importieren u. initialisieren der Pygame-Bibliothek
import pygame
from pygame.locals import *
import random

Und nun können wir eine zufällige Position über die Anweisung random.randint() erreichen. Wir müssen uns nur überlegen, wo der Feind auftauchen soll.

Unsere Festlegungen sind:

auf der rechten Seite des Spielfelds ab der Mitte:

  • also X >= Spielfeldbreite / 2
  • und X <= Spielfeldbreite – 50 # soll nicht ganz am Rand platziert sein

Und von der Höhe her:

  • zwischen Y > 50
  • und maximal Y <= Spielfeldhöhe – 50

Und das ganze nun als Funktion integriert:

# Gegner
gegnerBild = pygame.image.load("bilder/varroa.png")
# gegnerX = W - 100
gegnerX = random.randint(W/2, W-50)
# gegnerY = 20
gegnerY = random.randint(50, H-50)