La réponse de Gregory Weir est ma préférée pour savoir comment structurer les instances d'élément afin de remplir plusieurs rôles.
Pour charger à partir d'un fichier:
Tout d'abord, utilisez YAML. YAML est un langage de description de données complet; il peut être analysé relativement rapidement, lu et édité par l'homme, prend en charge les données binaires et des bibliothèques existent pour la plupart des langages de programmation, y compris Java. Cela résout le "comment puis-je obtenir des données de fichiers dans des objets?"
Deuxièmement, utilisez le modèle de poids de mouche . La plupart des données que vous lisez à partir de ces fichiers sont statiques. Cela ne changera pas par instance ("la hache fait 1d10 dégâts de base et casse le bois mais pas la pierre" - c'est vrai pour les cinq axes d'un joueur). Ce que vous lisez réellement à partir des fichiers YAML sont ces définitions platoniques, et vos instances d'éléments individuelles ont des références sans propriétaire (et constantes) à celles-ci, ainsi que des données par instance telles que "Combien de swings avant de me briser?", "Le joueur a-t-il donné moi un nom personnalisé? ", et ainsi de suite.
En partageant les données inter-instances dans un seul objet, vous conservez beaucoup de mémoire et simplifiez la mise à jour des éléments sans état de jeu persistant (sauvegarde des jeux ou base de données des joueurs).
Votre structure de classe ressemble donc à:
- classe Item - Une instance par article
- Possède une instance d'arme
- Possède une instance d'outil
- A un nom personnalisé, etc.
- Arme de classe - (jusqu'à) une instance par objet
- Is-a ItemComponent
- Fait référence à WeaponDef
- A un niveau d'enchantement bonus, etc.
- Outil de classe - (jusqu'à) une instance par élément
- Is-a ItemComponent
- Se réfère à ToolDef
- A une durabilité, etc.
- class WeaponDef - Une instance par type d'arme
- Lire à partir d'un fichier, les champs doivent être constants.
- A un montant de dégâts de base, 1 ou 2 mains, etc.
- class ToolDef - Une instance par type d'outil
- Lire à partir d'un fichier, les champs doivent être constants.
- Dispose d'une durabilité de base, de matériaux pouvant se casser, etc.