La codificación no es tan difícil en realidad . La parte difícil es escribir código que tenga sentido, que sea legible y comprensible. Así que quiero conseguir un mejor desarrollador y crear una arquitectura sólida.
Así que quiero crear una arquitectura para NPC en un videojuego. Es un juego de estrategia en tiempo real como Starcraft, Age of Empires, Command & Conquers, etc. Así que tendré diferentes tipos de NPC. Un NPC puede tener de uno a muchas habilidades (métodos) de estos: Build()
, Farm()
y Attack()
.
Ejemplos:
trabajador puede Build()
y Farm()
Guerrero puede Attack()
ciudadano puede Build()
, Farm()
y Attack()
Fisherman puede Farm()
yAttack()
Espero que todo esté claro hasta ahora.
Así que ahora tengo mis tipos de NPC y sus habilidades. Pero pasemos al aspecto técnico / programático.
¿Cuál sería una buena arquitectura programática para mis diferentes tipos de NPC?
Bien, podría tener una clase base. En realidad, creo que esta es una buena manera de seguir con el principio DRY . Así que puedo tener métodos como WalkTo(x,y)
en mi clase base ya que cada NPC podrá moverse. Pero ahora vamos al verdadero problema. ¿Dónde implemento mis habilidades? (recuerde: Build()
, Farm()
y Attack()
)
Dado que las habilidades consistirán en la misma lógica, sería molesto / romper el principio DRY implementarlas para cada NPC (Trabajador, Guerrero, ...).
Bien, podría implementar las habilidades dentro de la clase base. Para ello sería necesario algún tipo de lógica que verifica si un NPC puede usar la habilidad X. IsBuilder
, CanBuild
.. creo que es claro lo que quiero expresar.
Pero no me siento muy bien con esta idea. Esto suena como una clase base hinchada con demasiada funcionalidad.
Yo uso C # como lenguaje de programación. Entonces, la herencia múltiple no es una opción aquí. Medios: Tener clases base adicionales como Fisherman : Farmer, Attacker
no funcionará.