Turn Based Dark Souls

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

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 noch hat.
  • max_mana (int): Gibt an, wie viel Mana der Player maximal haben kann.

Sowie um folgende Methoden:

  • get_damage(damage: int): Überschreiben Sie diese Methode aus Player, sodass man sich nicht mehr over-healen kann (Also über das max_health hinaus heilen). Bug fixing!
  • use_mana(mana: int): Zieht dem Player Mana ab, bzw. fügt dem Player mana hinzu, falls mana 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.
  • 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!