La codifica non è così difficile in realtà . La parte difficile è scrivere un codice che abbia 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 & Conquiste, ecc. Ecc. Quindi avrò diversi tipi di NPC. Un NPC può avere una o più abilità (metodi) tra questi: Build()
, Farm()
e Attack()
.
Esempi:
Lavoratore può Build()
e Farm()
Guerriero può Attack()
Cittadino può Build()
, Farm()
e Attack()
Pescatore può Farm()
e Attack()
Spero che tutto sia 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 base poiché ogni NPC sarà in grado di spostarsi. Ma ora veniamo al vero problema. Dove implemento le mie abilità? (ricorda: Build()
, Farm()
e Attack()
)
Dato che le abilità consisteranno nella stessa logica sarebbe fastidioso / infrangere il principio di ESSENZIALITÀ per implementarle per ogni NPC (Lavoratore, Guerriero, ...).
Okay I potrebbe 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 cosa voglio esprimere.
Ma non mi sento molto bene con questa idea. Sembra una classe base gonfia con la funzionalità troppo .
Uso C # come linguaggio di programmazione. Quindi l'ereditarietà multipla non è un'opzione qui. Mezzi: avere classi di base extra come Fisherman : Farmer, Attacker
non funzionerà.