Turn Based Dark Souls

Diese Aufgabe wurde durch ein Studi inspiriert, welcher die Doom Aufgabe (100P/Klassen) zu galaktischen Höhen katepultiert hatte!

Diese Aufgabe ist einer Erweiterung der Doom Aufgabe (100P/Klassen).

Aufgabe

In dieser Aufgaben sollen Sie ihrem Traum, ein Gamedeveloper zu werden, noch einen weiteren Schritt näher kommen!

1.

Erstellen Sie eine Klasse Skill. Diese soll als Attribute name: str, type: str, power_scaling: float und mana_cost: int haben:

  • type: Typ des Skills. Z.b. “Sorcerie” für magische Attacken, “Miracle” für heilende Skills und “Physical” für Bonk-Attacken. (Bonus: Wenn Sie mit Enum vertraut sind, dann erstellen Sie für type gerne ein passendes Enum (siehe Aufgabe “Und Sie dachten, Sie seien fertig”))
  • power_scaling: Gibt den Faktor an, mit den ein Skill Schaden/Heilung verursacht, basierend auf die power des Players/Monsters.
  • mana_cost: Mana-Kosten des Skills. Diese kann auch 0 sein, z.B. für Basic-Skills des Typs “Physical”.
2.

Erstellen Sie eine Klasse AdvancedPlayer, welche von Ihrer alten Klassen Player erbt. Diese soll die Klasse Player um folgende weitere Attribute ergänzen:

  • skill_set: list[skill]: Gibt eine Liste an, welche alle Skills des Players enthält.
  • max_health: int: Gibt an, wie viel Leben der Player maximal haben kann.
  • mana: int: Gibt an, wie viel Mana der Player momentan hat.
  • max_mana: int: Gibt an, wie viel Mana der Player maximal haben kann.

Sowie um folgende Methoden:

  • receive_damage(damage: int): Überschreiben Sie diese Methode aus Player, sodass man sich nicht mehr over-healen kann, zu jedem Zeitpunkt soll also 0 <= health <= max_health gelten… Bug fixing!
  • use_mana(amount: int): Reduziert mana des Spielers um den Parameter amount, bzw. erhöht mana falls amount negativ. Zu jedem Zeitpunkt soll 0 <= mana <= max_mana gelten.
  • level_up(): Überschreiben Sie diese Methode aus Player, sodass man sich nun entscheiden kann, ob man max_health, power oder max_mana verbessern möchte. Außerdem sollen health und mana des Spielers aufgefüllt werden.
  • add_skill(new_skill: Skill): Fügt dem Player einen neuen Skill im skill_set hinzu! Yeay!
3.

Erstellen Sie eine Klasse AdvancedMonster, welche von Ihrer Klasse AdvancedPlayer erbt. Diese soll um folgende Attribute ergänzt werden:

  • type: str: Gibt den Typ des Monstern an, z.B. “Common” für gewöhnliche Monster und “Boss” für Bosse. (Bonus: Wenn Sie mit Enum vertraut sind, dann erstellen Sie für type gerne ein passendes Enum (siehe Aufgabe “Und Sie dachten, Sie seien fertig”))

Sowie um folgende Methoden:

  • calculate_turn -> Skill: Berechnet (entweder zufällig oder auf schlauer Art und Weise), welchen Skill aus skill_set das Monster als Nächstes nutzt. Das ist quasi die KI des Monsters :D. Achten Sie auf Mana-Kosten!

Bonus

Werden Sie nun kreativ und machen Sie daraus, wie in der Doom-Aufgabe, ein kleines Videospiel in der Konsole. Sie könnten diesmal am Anfang dem Player eine Klasse auswählen lassen. Basierend auf diese Klasse, startet der Player mit einem bestimmten skill_set, Ideen für Klassen:

  • “Sorcerer”: Startet mit einem schlechten Physical-Skill sowie zwei sehr starken Sorcerie-Skills. Der Player braucht hier gutes Mana-Management.
  • “Knight”: Startet mit zwei sehr guten Physical-Skills und einem schwachen Miracle Skills. Bonk, Bonk und noch mal Bonk!
  • “Cleric” Startet mit einem guten Physical-Skill, sowie zwei starken Miracle Skills. Heilt sich durch das ganze Game durch.
  • “Deprived”: Startet nur mit einem schlechten Physical-Skill! Die wahre Dark Souls experience!

Während Kämpfen, kann sich der Player dann aussuchen, welche Skills aus skill_set verwendet werden sollen etc. Hier und da könnte der Player dann auf Bosse treffen, welche dem Spieler bei einem Sieg mit einem neuen Skill lohnen. Werden Sie kreativ!