Schiff und Raketen
Abschlussbedingungen
Der Code ohne Kommentar
import pgzrun
WIDTH, HEIGHT = 500, 700
class Schiff(Actor):
def __init__(self):
Actor.__init__(self, 'schiff')
self.bottom = HEIGHT
self.centerx = WIDTH / 2
self.geschwindigkeit = 6
def aktualisiere(self):
if keyboard.left:
self.x -= self.geschwindigkeit
if keyboard.right:
self.x += self.geschwindigkeit
self.clamp_ip(0, 0, WIDTH, HEIGHT)
def rakete_abfeuern(self):
rakete = Rakete(self.x, self.y - 50)
spiel.raketen.append(rakete)
class Rakete(Actor):
def __init__(self, x, y):
Actor.__init__(self, 'rakete')
self.aktiv = True
self.x = x
self.y = y
self.geschwindigkeit = 10
def aktualisiere(self):
self.y -= self.geschwindigkeit
if(self.top < 0):
self.aktiv = False
class Spiel:
def __init__(self):
self.schiff = Schiff()
self.raketen = []
def entscheide(wahrscheinlichkeit):
return random.random() < wahrscheinlichkeit
def on_key_down():
if keyboard.space:
spiel.schiff.rakete_abfeuern()
def update():
for actor in spiel.raketen:
actor.aktualisiere()
spiel.schiff.aktualisiere()
spiel.raketen = [r for r in spiel.raketen if r.aktiv]
def draw():
screen.fill((255, 255, 255))
for actor in spiel.raketen:
actor.draw()
spiel.schiff.draw()
spiel = Spiel()
pgzrun.go()
Der Code mit Kommentar
import pgzrun
WIDTH, HEIGHT = 500, 700
class Schiff(Actor):
def __init__(self):
Actor.__init__(self, 'schiff')
self.bottom = HEIGHT
self.centerx = WIDTH / 2
self.geschwindigkeit = 6
def aktualisiere(self):
if keyboard.left:
self.x -= self.geschwindigkeit
if keyboard.right:
self.x += self.geschwindigkeit
self.clamp_ip(0, 0, WIDTH, HEIGHT)
# NEU: Funktion zum Starten von Raketen:
def rakete_abfeuern(self):
# Neue Rakete wird erzeugt, Startposition ist die Position des Raumschiffs
rakete = Rakete(self.x, self.y - 50)
# Die Rakete wird der Liste mit den Raketen hinzugefügt
spiel.raketen.append(rakete)
# NEU: Klasse Rakete
class Rakete(Actor):
def __init__(self, x, y):
# Wie beim Schiff:
Actor.__init__(self, 'rakete')
# Ist die Rakete "lebendig"?
self.aktiv = True
self.x = x
self.y = y
# Die Geschwindigkeit, mit der die Rakete sich nach oben bewegt.
self.geschwindigkeit = 10
# NEU: Aktualisierung der Rakete:
def aktualisiere(self):
# Die Geschwindigkeit wird zur aktuellen y-Position hinzugefügt:
self.y -= self.geschwindigkeit
# Wenn die Rakete den Bildschirm durchquert hat, wird sie deaktiviert:
if(self.top < 0):
self.aktiv = False
class Spiel:
def __init__(self):
self.schiff = Schiff()
# NEU: Liste für die Raketen
self.raketen = []
# NEU: Die Funktion on_key_down wird automatisch vom System ausgeführt,
# wenn eine Taste gedrückt wurde:
def on_key_down():
# Wenn die gedrückte Taste die Leertaste war...
if keyboard.space:
# ... dann wird eine Rakete abgefeuert:
spiel.schiff.rakete_abfeuern()
def update():
# NEU: Alle Raketen werden aktualisiert:
for actor in spiel.raketen:
actor.aktualisiere()
spiel.schiff.aktualisiere()
# NEU: nach dieser Zeile enthält spiel.raketen nur Raketen, die noch aktiv sind!
# Genaueres hierzu unter "Wichtige Python Elemente 3: Listenabstraktionen"!
spiel.raketen = [r for r in spiel.raketen if r.aktiv]
def draw():
screen.fill((255, 255, 255))
# NEU: Alle Raketen werden aktualisiert:
for actor in spiel.raketen:
actor.draw()
spiel.schiff.draw()
spiel = Spiel()
pgzrun.go()
Zuletzt geändert: Donnerstag, 20. Februar 2025, 15:35