Coding non è così difficile in realtà . La parte difficile è scrivere codice che abbia un senso, sia leggibile e comprensibile. Quindi voglio ottenere uno sviluppatore migliore e creare una solida architettura.
Quindi voglio creare un'architettura per NPC in un videogioco. È un gioco di strategia in tempo reale come Starcraft, Age of Empires, Command & Conquers, ecc. Ecc. Quindi avrò diversi tipi di NPC. Un NPC può avere uno a molte abilità (metodi) di questi: Build()
, Farm()
e Attack()
.
Esempi:
operaio può Build()
e Farm()
Warrior può Attack()
cittadino può Build()
, Farm()
e Attack()
Fisherman può Farm()
eAttack()
Spero che sia tutto chiaro finora.
Quindi ora ho i miei tipi di NPC e le loro abilità. Ma veniamo all'aspetto tecnico / programmatico.
Quale sarebbe una buona architettura programmatica per i miei diversi tipi di NPC?
Ok, potrei avere una classe base. In realtà penso che questo sia un buon modo per attenersi al principio DRY . Quindi posso avere metodi come WalkTo(x,y)
nella mia classe di base poiché ogni NPC sarà in grado di muoversi. Ma ora veniamo al vero problema. Dove posso implementare le mie capacità? (ricordate: Build()
, Farm()
e Attack()
)
Poiché le abilità saranno costituite dalla stessa logica, sarebbe fastidioso / infrangere il principio DRY per implementarle per ogni NPC (lavoratore, guerriero, ...).
Ok, potrei implementare le abilità all'interno della classe base. Ciò richiederebbe un qualche tipo di logica che verifica se un NPC può usare l'abilità X IsBuilder
, CanBuild
, .. penso che sia chiaro quello che voglio esprimere.
Ma non mi sento molto bene con questa idea. Sembra una classe base gonfia con troppe funzionalità.
Uso C # come linguaggio di programmazione. Quindi l'ereditarietà multipla non è un'opzione qui. Mezzi: avere classi base extra come Fisherman : Farmer, Attacker
non funzionerà.