Odpowiedź Grega Weira to moja ulubiona metoda tworzenia instancji przedmiotów w celu wykonywania wielu ról.
Aby załadować z pliku:
Najpierw użyj YAML. YAML to funkcjonalny język opisu danych; może być analizowany stosunkowo szybko, odczytywany i edytowany przez ludzi, obsługuje dane binarne, a biblioteki są dostępne dla większości języków programowania, w tym Java. To rozwiązuje problem „jak uzyskać dane z plików do obiektów?”
Po drugie, użyj wzoru flyweight . Większość danych odczytywanych z tych plików jest statyczna. Nie zmieni się na instancję („topór zadaje podstawowe obrażenia 1d10 i łamie drewno, ale nie kamień” - dotyczy to wszystkich pięciu osi gracza). To, co faktycznie odczytujesz z plików YAML, to te platoniczne definicje, a twoje indywidualne instancje przedmiotów mają do nich nieposiadane (i stałe) odniesienia do nich, wraz z danymi dla poszczególnych instancji, takimi jak „Ile huśtawek, zanim pęknę?”, „Czy odtwarzacz dał mi niestandardową nazwę? ”i tak dalej.
Udostępniając dane między instancjami w jednym obiekcie, oszczędzasz dużo pamięci i ułatwiasz aktualizację elementów bez trwałego stanu gry (zapisywanie gier lub bazy danych graczy).
Struktura twojej klasy wygląda więc tak:
- Przedmiot klasy - Jedna instancja na element
- Jest właścicielem instancji broni
- Jest właścicielem instancji Tool
- Ma niestandardową nazwę itp.
- Weapon klasy - (maksymalnie) jedna instancja na przedmiot
- Is-a ItemComponent
- Odnosi się do WeaponDef
- Ma dodatkowy poziom zaklęcia itp.
- narzędzie klasy - (maksymalnie) jedna instancja na element
- Is-a ItemComponent
- Odnosi się do ToolDef
- Ma trwałość itp.
- class WeaponDef - Jedna instancja na rodzaj broni
- Odczytane z pliku, pola powinny być stałe.
- Ma podstawową wartość obrażeń, 1 lub 2 ręce itp.
- klasa ToolDef - Jedna instancja dla każdego rodzaju narzędzia
- Odczytane z pliku, pola powinny być stałe.
- Ma podstawową wytrzymałość, materiały, które może złamać itp.