Skip to content

Strategy de búsquedas en Refugio 33 #48

@GabrielEValenzuela

Description

@GabrielEValenzuela

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

Loading

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions