Відповідь Грегорі Вейра - моя улюблена те, як структурувати екземпляри предмета, щоб виконати кілька ролей.
Щоб завантажити з файлу:
По-перше, використовуйте YAML. YAML - це функціональна мова опису даних; його можна порівняно швидко проаналізувати, прочитати та відредагувати людиною, підтримує бінарні дані, а бібліотеки існують для більшості мов програмування, включаючи Java. Це вирішує питання "як мені отримати дані з файлів в об'єкти?"
По-друге, використовуйте візерунок з легкої ваги . Більшість даних, які ви читаєте з цих файлів, є статичними. Це не зміниться на примірник ("сокира наносить шкоду 1d10 і руйнує деревину, але не камінь" - це справедливо для всіх п'яти осей, які має гравець). Що ви насправді читаєте з файлів YAML - це платонічне визначення, а ваші окремі екземпляри предметів мають невідомі (і постійні) посилання на них, а також дані про екземпляр, наприклад "Скільки гойдалок, перш ніж я зламаю?", "Чи дав гравець мені власну назву? »тощо.
Спільний доступ до даних між-примірників в одному об’єкті ви зберігаєте багато пам’яті та полегшуєте оновлення елементів без збереженого стану гри (збереження ігор або бази даних гравців).
Тож структура вашого класу виглядає приблизно так:
- Class Item - Один екземпляр на предмет
- Володіє екземпляром зброї
- Володіє екземпляром інструмента
- Has-власна назва тощо
- Зброя класу - (до) одного примірника на предмет
- Is-a ItemComponent
- Посилається на WeaponDef
- Has-bonus рівень зачарування тощо.
- Інструмент класу - (до) одного примірника на предмет
- Is-a ItemComponent
- Посилається на ToolDef
- Має-довговічність і т.д.
- клас WeaponDef - один екземпляр на вид зброї
- Читання з файлу, поля повинні бути постійними.
- Сума-основна шкода, 1 або 2 руки тощо.
- клас ToolDef - один екземпляр на вид інструменту
- Читання з файлу, поля повинні бути постійними.
- Має-довговічність основи, матеріали, які вона може зламати і т.д.