Discovery & Checkpoint
Betrachte folgenden Codeaufbau:
class Kaempfer:
def __init__(self, name, hp):
self.name = name
self.hp = hp
def erleide_schaden(self, punkte):
self.hp -= punkte
held = Kaempfer("Valerius", 120)
held.erleide_schaden(15)Welchen Wert besitzt held.hp nach der Ausführung?
Parsons Puzzle
Die Basisklasse Charakter ist im Hintergrund bereits vordefiniert:
Sie speichert name, hp und atk und besitzt eine Methode nimm_schaden(schaden).
Setze die spezialisierte Klasse Krieger zusammen, die im Konstruktor einen zusätzlichen wut-Wert initialisiert,
die Methode angreifen(ziel) überschreibt (Schaden = atk + wut) und anschließend ein Duell ausführt.
Tipp: Benutze die Anfasser zum Verschieben und ⇥- / ⇥+ zum Einrücken.
Scaffolding & Bugfix
In dieser Arena-Logik haben sich zwei Fehler eingeschlichen:
1. Der Konstruktor der Unterklasse Magier ruft die Elternklasse Charakter nicht korrekt auf.
2. Die Methode feuerball zieht zwar Mana ab, ruft aber nicht ziel.nimm_schaden() auf.
Korrigiere den Code, sodass der Magier erfolgreich zaubert und dem Ziel Schaden zufügt!
Tipp: Passe den Code im Editor an und klicke auf „Ausführen & Prüfen“.
class Charakter:
def __init__(self, name, hp):
self.name = name
self.hp = hp
def nimm_schaden(self, schaden):
self.hp -= schaden
class Magier(Charakter):
def __init__(self, name, hp, mana):
super().__init__(name, hp)
self.mana = mana
def feuerball(self, ziel, schaden):
self.mana -= 15
ziel.nimm_schaden(schaden)
print(f"{self.name} wirkt Feuerball!")
magier = Magier("Ignis", 120, 50)
gegner = Charakter("Boss", 120)
magier.feuerball(gegner, 15)
print("Gegner HP:", gegner.hp)
print("Magier Mana:", magier.mana)
Coding Challenge
Erstelle die Kern-Architektur für das Arena-Kampfspiel:
1. Basisklasse Charakter:
- Konstruktor __init__(self, name, hp, atk) speichert die Attribute.
- Methode nimm_schaden(self, punkte): Zieht punkte von self.hp ab (Minimum 0: nutze z. B. max(0, ...)).
- Methode ist_am_leben(self): Gibt True zurück, wenn hp > 0, sonst False.
2. Unterklasse Schurke(Charakter):
- Erbt von Charakter.
- Konstruktor __init__(self, name, hp, atk, krit_bonus): Ruft super().__init__(name, hp, atk) auf und speichert self.krit_bonus = krit_bonus.
- Methode hinterhalt(self, ziel): Berechnet Schaden als self.atk + self.krit_bonus, fügt diesen ziel über ziel.nimm_schaden(...) zu und gibt "Hinterhalt ausgefuehrt!" auf der Konsole aus.
3. Instanziierung & Duell:
- Erstelle held als Schurke mit Name 'Valerius', HP 120, ATK 15 und Krit-Bonus 5.
- Erstelle boss als Basis-Charakter mit Name 'Gegner', HP 120 und ATK 10.
- Lasse held die Methode hinterhalt(boss) ausführen.
- Gib f"Boss HP: {boss.hp}" und f"Boss Lebt: {boss.ist_am_leben()}" aus.
Tipp: Schreibe deinen Code in den Editor und klicke auf „Code testen“.
Test-Suite
class Charakter:
def __init__(self, name, hp, atk):
self.name = name
self.hp = hp
self.atk = atk
def nimm_schaden(self, punkte):
self.hp = max(0, self.hp - punkte)
def ist_am_leben(self):
return self.hp > 0
class Schurke(Charakter):
def __init__(self, name, hp, atk, krit_bonus):
super().__init__(name, hp, atk)
self.krit_bonus = krit_bonus
def hinterhalt(self, ziel):
schaden = self.atk + self.krit_bonus
ziel.nimm_schaden(schaden)
print("Hinterhalt ausgefuehrt!")
held = Schurke("Valerius", 120, 15, 5)
boss = Charakter("Gegner", 120, 10)
held.hinterhalt(boss)
print(f"Boss HP: {boss.hp}")
print(f"Boss Lebt: {boss.ist_am_leben()}")
Die vollständige Turnier-Arena
Baue die ultimative rundenbasierte Kampf-Arena!
Erstelle weitere Klassen wie Paladin (mit Schild-Attribut) oder Heiler (mit Heilzauber).
Lasse zwei Teams in einer while-Schleife gegeneinander antreten, bis ein Team komplett besiegt ist.
Tipp: Passe den Code an, führe ihn aus oder lade dein fertiges Programm als Python-Datei herunter.
Lektion vollständig abgeschlossen!
Du hast alle Phasen gemeistert und kannst hier im Sandbox-Labor frei weiterprogrammieren.