Übungsaufgabe: Inventarsystem für ein Spiel
Ziel der Übung
In dieser Aufgabe entwickelst du ein kleines Inventarsystem für ein einfaches Computerspiel.
Du sollst dabei selbst überlegen, wo es sinnvoll ist, gemeinsamen Code zusammenzufassen und wo ein flexibler Datentyp gebraucht wird, der mit verschiedenen Objektarten arbeiten kann.
Ausgangssituation
In einem Spiel können verschiedene Dinge gesammelt werden:
- Waffen
- Tränke
- Rüstungsteile
Alle diese Dinge haben einige gemeinsame Eigenschaften, aber sie unterscheiden sich auch in bestimmten Details.
Außerdem soll es Behälter geben, in denen nur bestimmte Arten von Gegenständen gespeichert werden können. Zum Beispiel:
- Eine Waffenkiste darf nur Waffen enthalten.
- Eine Tranktasche darf nur Tränke enthalten.
- Eine Rüstungskiste darf nur Rüstungsteile enthalten.
Aufgabe
Erstelle ein C#-Konsolenprogramm, das ein einfaches Inventarsystem umsetzt.
Das Programm soll mehrere Arten von Spielgegenständen verwalten und verschiedene Behälter verwenden, die jeweils nur passende Gegenstände aufnehmen können.
Anforderungen
1. Spielgegenstände
Jeder Spielgegenstand soll mindestens folgende Informationen besitzen:
- Name
- Gewicht
- Wert in Gold
Zusätzlich soll jeder Gegenstand eine Methode besitzen, mit der eine kurze Beschreibung auf der Konsole ausgegeben werden kann.
Beispielausgabe:
Iron Sword weighs 4.5 kg and is worth 25 gold.2. Verschiedene Gegenstandsarten
Erstelle mindestens diese drei Arten von Gegenständen:
Weapon
Eine Waffe soll zusätzlich speichern:
- Damage
Beispiel:
Iron Sword weighs 4.5 kg and is worth 25 gold. Damage: 12Potion
Ein Trank soll zusätzlich speichern:
- Effect
Beispiel:
Health Potion weighs 0.5 kg and is worth 10 gold. Effect: Restores healthArmor
Ein Rüstungsteil soll zusätzlich speichern:
- Defense
Beispiel:
Steel Helmet weighs 2.0 kg and is worth 18 gold. Defense: 53. Behälter für Gegenstände
Erstelle einen Behälter, der mehrere Gegenstände speichern kann.
Der Behälter soll:
- einen Namen haben
- Gegenstände hinzufügen können
- alle gespeicherten Gegenstände ausgeben können
- den Gesamtwert aller enthaltenen Gegenstände berechnen können
- das Gesamtgewicht aller enthaltenen Gegenstände berechnen können
Wichtig: Ein Behälter soll nur eine bestimmte Art von Gegenständen enthalten dürfen.
Beispiele:
ItemContainer<Weapon> weaponChest = new ItemContainer<Weapon>("Weapon Chest");
ItemContainer<Potion> potionBag = new ItemContainer<Potion>("Potion Bag");
ItemContainer<Armor> armorChest = new ItemContainer<Armor>("Armor Chest");Ein Versuch wie dieser soll nicht möglich sein:
weaponChest.AddItem(new Potion("Health Potion", 0.5, 10, "Restores health"));4. Test im Hauptprogramm
Erstelle im Hauptprogramm mindestens:
- zwei Waffen
- zwei Tränke
- zwei Rüstungsteile
Lege anschließend passende Behälter an und füge die Gegenstände hinzu.
Gib danach für jeden Behälter aus:
- den Namen des Behälters
- alle enthaltenen Gegenstände
- das Gesamtgewicht
- den Gesamtwert
Beispielausgabe:
=== Weapon Chest ===
Iron Sword weighs 4.5 kg and is worth 25 gold. Damage: 12
Wooden Bow weighs 2.0 kg and is worth 15 gold. Damage: 8
Total weight: 6.5 kg
Total value: 40 goldWichtige Einschränkungen
- Schreibe nicht dreimal denselben Code für Name, Gewicht und Wert.
- Verwende keinen Behälter, der einfach
objectspeichert. - Verwende keine separate Klasse wie
WeaponChest,PotionBagundArmorChest, wenn sich diese Klassen fast gleich verhalten würden. - Achte darauf, dass falsche Gegenstände möglichst schon beim Programmieren auffallen und nicht erst während das Programm läuft.
Hinweise
Diese Fragen können dir beim Entwurf helfen:
- Welche Eigenschaften haben alle Gegenstände gemeinsam?
- Welche Eigenschaften unterscheiden sich je nach Gegenstandsart?
- Wie kann man verhindern, dass eine Waffenkiste plötzlich einen Trank enthält?
- Wie kann ein Behälter mit Waffen, Tränken oder Rüstungsteilen arbeiten, ohne dreimal denselben Code zu schreiben?
Optionale Erweiterungen
Wenn du früher fertig bist, kannst du eine oder mehrere Erweiterungen einbauen:
Erweiterung 1: Maximales Gewicht
Ein Behälter bekommt ein maximales Gewicht. Ein Gegenstand darf nur hinzugefügt werden, wenn das Gesamtgewicht danach nicht zu hoch ist.
Erweiterung 2: Wertvollster Gegenstand
Der Behälter soll den wertvollsten enthaltenen Gegenstand zurückgeben können.
Erweiterung 3: Suche nach Name
Der Behälter soll einen Gegenstand anhand seines Namens suchen können.