Estoy diseñando un juego, pero no puedo entender bien la estructura de herencia. Normalmente soy bastante bueno en eso, pero este tiene demasiada superposición y no puedo decidir sobre todo.Herencia/diseño de interfaz de un juego
Estoy buscando modelar veleros - piense en Age of Sail. Presumiblemente, por lo tanto, todo se extiende a una clase de buque.
Existen varios tipos de estilo de barco: remo (galeras, canoas), plataforma cuadrada, plataforma delantera y trasera, con diferente comportamiento. Cada uno de estos se subdivide en varios otros tipos. No puedo decidir si esto debería ser una serie de interfaces o extensiones de Vessel. Tenga en cuenta también que puede haber un cruce (un buque puede ser tanto remolcado como cuadrado) lo que me lleva a pensar en las interfaces.
Los barcos también tienen diferentes comportamientos: buques mercantes, hombres de guerra, corsarios, piratas. Realmente no puedo determinar si esto debería ser una interfaz o una extensión de otra clase. Sin embargo, no hay cruce de tipos en este caso.
Finalmente, existen varios comportamientos que los barcos individuales pueden tener. Los mercaderes pueden estar en un convoy (defenderse) o independientes (huir). Los hombres de guerra casi siempre atacan a menos que superen las armas ... pero pueden trabajar en flotas, escuadrones o independientemente. Los corsarios y los piratas solo atacan si son más débiles, por lo general de forma independiente, pero ocasionalmente en parejas. ¿Asumo que esto también debería ser una interfaz?
Mi gran problema es que cada estilo de barco (fragata, barco de guerra, etc.) puede cumplir casi con cualquiera de estos roles, por lo que no puedo construir una estructura de herencia sólida simple. Fragata no puede extender man-o-war porque algunos son corsarios. Sloop no puede extenderse cuadrado aparejado porque algunos están aparejados. etcétera etcétera.
Cualquier pensamiento sería apreciado, estoy un poco suelto. Gracias
Las dos ideas que me vienen a la mente de la cabeza son "diseño basado en componentes" y "patrón de estrategia". En cuanto a los diferentes comportamientos que pueden tener los barcos individuales, eso definitivamente es un patrón de estrategia para mí: cada barco está utilizando una de una variedad de estrategias diferentes. Consulte aquí en Wikipedia: http://en.wikipedia.org/wiki/Strategy_pattern –
Un barco puede pasar de buque mercante a pirata ** en tiempo de ejecución **, por lo que las interfaces no funcionarán para este tipo de comportamiento dinámico. –
@amadeus: no entiendo tu punto. Si está "programando para interfaces", puede hacerlo con precisión. – Bhushan