-
Notifications
You must be signed in to change notification settings - Fork 44
Description
Descripción
En el desarrollo de software, muchas soluciones no son completamente nuevas, sino que siguen estructuras ya establecidas, conocidas como patrones de diseño. Así como existe un metro patrón para definir con precisión lo que es un metro, también existen patrones en software que proporcionan modelos reutilizables para resolver problemas comunes.
Uno de estos patrones es el patrón Strategy. Este permite definir una familia de algoritmos, encapsularlos en clases independientes y hacerlos intercambiables durante la ejecución. Es especialmente útil cuando se desea modificar el comportamiento de una clase sin alterar su código.
Objetivo
En Refugio 33, podríamos aplicar este patrón para implementar distintas estrategias de búsqueda de enemigos o de exploración, desacoplando esta lógica del motor principal. Por ejemplo:
- BusquedaAgresiva: avanza directamente hacia el enemigo más cercano.
- BusquedaPrecavida: evita zonas peligrosas y busca rutas más seguras.
- BusquedaAleatoria: explora el mapa moviéndose en direcciones aleatorias.
classDiagram
class BusquedaEstrategia {
<<interface>>
+buscar(mapa: Mapa, posicion: Coordenadas): Coordenadas
}
class BusquedaAgresiva {
+buscar(mapa: Mapa, posicion: Coordenadas): Coordenadas
}
class BusquedaPrecavida {
+buscar(mapa: Mapa, posicion: Coordenadas): Coordenadas
}
class BusquedaAleatoria {
+buscar(mapa: Mapa, posicion: Coordenadas): Coordenadas
}
class NPC {
-estrategia: unique_ptr<BusquedaEstrategia>
+realizarTurno(mapa: Mapa): void
+setEstrategia(estrategia: unique_ptr<BusquedaEstrategia>): void
}
BusquedaEstrategia <|.. BusquedaAgresiva
BusquedaEstrategia <|.. BusquedaPrecavida
BusquedaEstrategia <|.. BusquedaAleatoria
NPC --> BusquedaEstrategia : usa
Cada estrategia debe implementar una interfaz común, por ejemplo:
BusquedaEstrategia::buscar(const Mapa&, const Coordenadas&)lo que permite al motor decidir dinámicamente cuál estrategia utilizar.
Tarea
- Definir la interfaz
BusquedaEstrategia, con al menos un método virtual puro. - Implementar las estrategias concretas.
- Modificar el motor o una clase NPC para que reciba una estrategia mediante un puntero y la utilice durante su turno.
- Mostrar en consola qué estrategia está en uso y qué decisión toma el personaje en base a ella.