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
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.
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()
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)