J'implémente un système de compétences et d'attributs de base, bien que j'aie des doutes sur la façon de procéder.
Par exemple, je pourrais utiliser un Dictionary / HashMap qui utilise des énumérations SkillType pour représenter les clés et des valeurs entières représentant les valeurs. Mais dois-je faire ça?
public class Skills
{
public IDictionary<StatType, Int> skills; //StatType is enum, being the key; the int //is the value.
}
vs.
public class Skills
{
public int LongBlade, Armor, Marksman; //...etc
}
J'aimerais connaître les avantages de la sécurité des types ici, par opposition à l'utilisation de nombres entiers de base. Des recommandations?
interface Skill { /* ... */ int toInt(); }; public class Skills : IList { private ArrayList<Skill> skills; /* ... */ };
, en fait ...Réponses:
S'il finira par y avoir:
puis je commence à préférer la flexibilité des chaînes ou des clés entières dans un dictionnaire plutôt que des champs d'instance individuels ou même un dictionnaire avec une clé enum.
Mon raisonnement - Parce que vous vous rendez peut-être bientôt compte ...
... à quel point un dictionnaire avec des chaînes ou des clés entières devient un ajustement plus naturel que d'avoir à maintenir vous-même des valeurs d'énumération ou une longue liste de champs d'instance. Cependant, cet outil peut toujours être écrit pour générer du code C # aussi, donc vous pourrez peut-être trouver un hybride heureux.
Si la complexité de votre jeu va être assez simple et votre variété de compétences petite, alors la gestion des champs d'instance à la main (au lieu du dictionnaire et de l'énumération) semble plus pratique et évite un niveau d'indirection, à la fois lors de l'exécution et de la "frappe" - temps.
la source