Die Ufos
Abschlussbedingungen
Code ohne Kommentar
import pgzrun
WIDTH, HEIGHT = 500, 700
class UFO(Actor):
def __init__(self, x, y):
Actor.__init__(self, 'ufo')
self.aktiv = True
self.x = x
self.y = y
self.x_geschwindigkeit = 2
self.y_geschwindigkeit = 1
def aktualisiere(self):
self.x += self.x_geschwindigkeit
self.y += self.y_geschwindigkeit
if self.left < 0 and self.x_geschwindigkeit < 0:
self.x_geschwindigkeit *= -1
if self.right > WIDTH and self.x_geschwindigkeit > 0:
self.x_geschwindigkeit *= -1
if self.top > HEIGHT:
self.aktiv = False
class Spiel:
def __init__(self):
self.ufos = []
def update():
for actor in spiel.ufos:
actor.aktualisiere()
spiel.ufos = [u for u in spiel.ufos if u.aktiv]
if len(spiel.ufos) == 0:
spiel.ufos = erzeuge_ufo_geschwader(12)
def erzeuge_ufo_geschwader(anzahl_ufos):
return [UFO(i*40, -i*40) for i in range(0, anzahl_ufos)]
def draw():
screen.fill((255, 255, 255))
for actor in spiel.ufos:
actor.draw()
spiel = Spiel()
pgzrun.go()
Code mit Kommentar
import pgzrun
WIDTH, HEIGHT = 500, 700
class UFO(Actor):
def __init__(self, x, y):
Actor.__init__(self, 'ufo')
self.aktiv = True
self.x = x
self.y = y
# Das Ufo hat eine horizontale (x) und eine vertikale (y) Geschwindigkeit:
self.x_geschwindigkeit = 2
self.y_geschwindigkeit = 1
def aktualisiere(self):
# Ensprechend werden die x- und die y-Positionen aktualisiert:
self.x += self.x_geschwindigkeit
self.y += self.y_geschwindigkeit
# Wenn das Ufo links anstößt, wird die x-Geschwindigkeit umgekehrt:
if self.left < 0 and self.x_geschwindigkeit < 0:
self.x_geschwindigkeit *= -1
# Wenn das Ufo rechts anstößt, wird ebenfalls die x-Geschwindigkeit umgekehrt:
if self.right > WIDTH and self.x_geschwindigkeit > 0:
self.x_geschwindigkeit *= -1
# Wenn die Oberkante des Ufos unter der Unterkante des Fensters ist,
# hat das Ufo das Fenster durchquert und wird deaktiviert:
if self.top > HEIGHT:
self.aktiv = False
class Spiel:
def __init__(self):
self.ufos = []
def update():
for actor in spiel.ufos:
actor.aktualisiere()
# Ufos, die nicht mehr aktiv sind, werden aus der Ufo Liste entfernt.
# Genauer: Es wird eine neue Liste erzeugt, in der nur die aktiven Ufos landen.
spiel.ufos = [u for u in spiel.ufos if u.aktiv]
# Wenn die Ufo-Liste leer ist, werden neue Ufos erzeugt:
if len(spiel.ufos) == 0:
spiel.ufos = erzeuge_ufo_geschwader(12)
# Diese Funktion liefert einen neuen Schwung Ufos:
def erzeuge_ufo_geschwader(anzahl_ufos):
return [UFO(i*40, -i*40) for i in range(0, anzahl_ufos)]
def draw():
screen.fill((255, 255, 255))
for actor in spiel.ufos:
actor.draw()
spiel = Spiel()
pgzrun.go()
Zuletzt geändert: Donnerstag, 27. Februar 2025, 17:43