Le codage n'est pas si difficile en fait . La partie difficile est d'écrire du code qui a du sens, qui est lisible et compréhensible. Je veux donc obtenir un meilleur développeur et créer une architecture solide.
Je veux donc créer une architecture pour les PNJ dans un jeu vidéo. Il s'agit d'un jeu de stratégie en temps réel comme Starcraft, Age of Empires, Command & Conquers, etc. etc. J'aurai donc différents types de PNJ. Un PNJ peut avoir un à plusieurs capacités (méthodes) de celles - ci: Build()
, Farm()
etAttack()
.
Exemples:
travailleur peut Build()
et Farm()
guerrier peut Attack()
citoyen peut Build()
, Farm()
et Attack()
pêcheur peut Farm()
etAttack()
J'espère que tout est clair jusqu'à présent.
Alors maintenant, j'ai mes types de PNJ et leurs capacités. Mais revenons à l'aspect technique / programmatique.
Quelle serait une bonne architecture programmatique pour mes différents types de PNJ?
D'accord, je pourrais avoir une classe de base. En fait, je pense que c'est une bonne façon de s'en tenir au principe DRY . Je peux donc avoir des méthodes comme WalkTo(x,y)
dans ma classe de base car chaque PNJ pourra se déplacer. Mais maintenant, venons-en au vrai problème. Où dois-je mettre en œuvre mes capacités? (rappelez - vous: Build()
, Farm()
et Attack()
)
Puisque les capacités seront constituées de la même logique, il serait ennuyeux / de casser le principe SEC pour les implémenter pour chaque PNJ (Ouvrier, Guerrier, ..).
D'accord, je pourrais implémenter les capacités au sein de la classe de base. Cela nécessiterait une sorte de logique qui vérifie si un PNJ peut utiliser X. capacité IsBuilder
, CanBuild
.. Je pense qu'il est clair ce que je veux exprimer.
Mais je ne me sens pas très bien avec cette idée. Cela ressemble à une classe de base gonflée avec trop de fonctionnalités.
J'utilise C # comme langage de programmation. L'héritage multiple n'est donc pas une option ici. Moyens: Avoir des classes de base supplémentaires comme Fisherman : Farmer, Attacker
ne fonctionnera pas.