Die Antwort von Gregory Weir ist mein Favorit für die Strukturierung der Elementinstanzen, um mehrere Rollen auszuführen.
So laden Sie aus einer Datei:
Verwenden Sie zunächst YAML. YAML ist eine nützliche Datenbeschreibungssprache. Es kann relativ schnell analysiert, von Menschen gelesen und bearbeitet werden, unterstützt Binärdaten und es gibt Bibliotheken für die meisten Programmiersprachen, einschließlich Java. Hiermit wird die Frage gelöst, wie ich Daten aus Dateien in Objekte bekomme.
Zweitens verwenden Sie das Fliegengewicht Muster . Die meisten Daten, die Sie aus diesen Dateien lesen, sind statisch. Es ändert sich nicht pro Instanz ("Axt fügt 1W10 Grundschaden zu und bricht Holz, aber keinen Stein" - das gilt für alle fünf Achsen, die ein Spieler hat). Was Sie tatsächlich aus den YAML-Dateien lesen, sind diese platonischen Definitionen, und Ihre einzelnen Objektinstanzen haben nicht besessene (und konstante) Verweise darauf, zusammen mit instanzbezogenen Daten wie "Wie viele Schwünge, bevor ich breche?", "Hat der Spieler angegeben mir einen benutzerdefinierten Namen? "und so weiter.
Indem Sie die instanzübergreifenden Daten in einem einzelnen Objekt freigeben, sparen Sie viel Speicher und können Elemente ohne dauerhaften Spielstatus auf einfache Weise aktualisieren (Spiele oder Spielerdatenbank speichern).
Ihre Klassenstruktur sieht also ungefähr so aus:
- class Item - Eine Instanz pro Element
- Besitzt eine Waffeninstanz
- Besitzt eine Tool-Instanz
- Hat einen benutzerdefinierten Namen usw.
- Klassenwaffe - (Bis zu) eine Instanz pro Gegenstand
- Ist eine ItemComponent
- Bezieht sich auf WeaponDef
- Has-a Bonus-Verzauberungsstufe usw.
- class Tool - (Bis zu) eine Instanz pro Element
- Ist eine ItemComponent
- Bezieht sich auf ToolDef
- Hat eine Haltbarkeit usw.
- class WeaponDef - Eine Instanz pro Waffentyp
- Aus einer Datei lesen, Felder sollten konstant sein.
- Hat eine Grundschadensmenge, 1 oder 2 Hände usw.
- class ToolDef - Eine Instanz pro Art von Werkzeug
- Aus einer Datei lesen, Felder sollten konstant sein.
- Hat eine Grundhaltbarkeit, Materialien, die es brechen kann, etc.