Python Tutorial
- jetzt Python programmieren lernen

Gegner abschießen mit Honigtropfen

Jetzt wollen wir von unserer Spielerfigur aus ein Geschoss abschießen können. Dazu müssen wir immer von rechts und der Mitte unserer Spielfigur von der aktuellen Position der Spielfigur „absenden“.

Zum Schießen nutzen wir die Leertaste (und einen Honigtropfen):

Unser Geschoss: Honigtropfen

Das Bild kann über folgende URL heruntergeladen werden:
https://www.python-lernen.de/bilder/honigtropfen.png

Auch dieses Bild binden wir wie gehabt ein:

Da man nicht mit Lebensmittel spielt, nennen wir es „kugel“.

# Kugel
kugel = pygame.image.load("bilder/honigtropfen.png")

Und wir setzen gleich alle benötigten Variablen für unser Geschoss:

# Kugel
kugel = pygame.image.load("bilder/honigtropfen.png")
kugelX = 0
kugelY = 0
kugelXbewegung = 12

Und jetzt wir unsere Kugel nur in Aktion kommen, wenn der Spieler diese abfeuert. Also brauchen wir den aktuellen Status der Kugel, der für den Anfang „False“ ist:

kugelstatus = False

Diesen Status ändern wir, sobald der Spieler die Leertaste drückt. Zusätzlich geben wir der Kugel die X und Y-Position mit, die abhängig ist von der Spielerfigur. Wir brauchen zur Y-Position noch eine Addition von 50, damit die Kugel ungefähr beim Kopf der Biene startet.

            # 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

            elif event.key == K_SPACE:
                # print("Kugel abfeuern")
                kugelstatus = True
                kugelX = 200
                kugelY = spielerposY+50

Und nun kommen wir zum Teil, dass die Kugel gezeichnet wird und sich bewegt. Für das zeichnen erstellen wir eine Funktion ähnlich wir für unseren Gegner:

def kugelfliegt(x, y):
    fenster.blit(kugelBild, (x, y))

Und diese Funktion wird in der Hauptschleife aufgerufen im Bereich „# Spielfeld/figuren zeichnen“.

Der Aufruf erfolgt nur, wenn der Status der Kugel auf „True“ gesetzt ist:

    # Spielfeld/figuren zeichnen
    animbereich  += 1

    if animbereich  > 5:
        animbereich  = 0

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

    if kugelstatus == True:
        kugelfliegt(kugelX,kugelY)

Nun wird unsere Kugel angezeigt, wenn die Leertaste gedrückt wird:

unsere Kugel taucht auf dem Spielfeld auf
unsere Kugel taucht auf dem Spielfeld auf

Sobald also der Status der Kugel „True“ ist, darf diese auch losfliegen. Dazu erweitern wir unseren Bereich „# Spiellogik“

    if kugelstatus == True:
        kugelX += kugelXbewegung

Allerdings gilt auch bei der Kugel: wenn diese trifft (soweit sind wir noch nicht) oder das Spielfenster verlässt, dann müssen wir reagieren. Also erst einmal, wenn die Kugel das Fenster verlässt (was wir nur überprüfen müssen, wenn die Kugel aktiv ist):

    if kugelstatus == True:
        kugelX += kugelXbewegung

        if kugelX > W:
             kugelstatus = False

Jetzt kommt noch die Besonderheit – es darf keine neue Kugel abgeschossen werden, solange eine noch im Spiel sich befindet! Sonst wäre es ja zu einfach. Wir erweitern unsere Abfrage von der Leertaste.

            elif event.key == K_SPACE:
                # print("Kugel abfeuern")
                # nur möglich, wenn keine Kugel sichtbar ist
                if kugelstatus == False:
                    kugelstatus = True
                    kugelX = 200
                    kugelY = spielerposY+50