From 4a0d8a78e5923a156a8ef163d56290adff9c6865 Mon Sep 17 00:00:00 2001 From: Enzo Fernandez Date: Thu, 3 Apr 2025 10:27:54 -0300 Subject: [PATCH 1/2] implmentacion de la clase refugio --- include/characters/refugio.hpp | 41 ++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/include/characters/refugio.hpp b/include/characters/refugio.hpp index e534a7d..5a086e9 100644 --- a/include/characters/refugio.hpp +++ b/include/characters/refugio.hpp @@ -41,12 +41,49 @@ class Refugio : public EntidadGenerica std::string m_leader; ///< Nombre del líder del refugio - void printRecursive(DoublyListNode* mNode); + void printRecursive(DoublyListNode* mNode) + { + if(mNode == nullptr) + { + return; + } + std::cout << "Nombre: " << mNode->data.nombre << ". Facción: " << faccionToString(mNode->data.faccion) << std::endl; + printRecursive(mNode->next); + } /** * @brief Devuelve la faccion en formato de string para su impresion. */ - std::string faccionToString(EngineData::Faction faccion) const; + std::string faccionToString(EngineData::Faction faccion) const + { + switch (faccion) + { + case EngineData::Faction::WATER_MERCHANTS: + return "Mercaderes de agua"; + case EngineData::Faction::MERCHANTS: + return "Mercaderes"; + case EngineData::Faction::REFUGEES: + return "Refugiados"; + case EngineData::Faction::LOOTERS: + return "Saqueadores"; + case EngineData::Faction::STEEL_BROTHERS: + return "Hermanos de acero"; + case EngineData::Faction::ENCLAVE: + return "Enclave"; + case EngineData::Faction::MUTANTS: + return "Mutantes"; + case EngineData::Faction::RAIDERS: + return "Asaltantes"; + case EngineData::Faction::GHOULS: + return "Ghouls"; + case EngineData::Faction::CARAVAN: + return "Caravanas"; + case EngineData::Faction::UNKNOWN: + return "Desconocido"; + default: + return "Faccion no reconocida"; + } + } public: /** From fb58a5dd80892f695a0ea3499dcbbd90eb2262af Mon Sep 17 00:00:00 2001 From: Enzo Fernandez Date: Thu, 3 Apr 2025 10:29:36 -0300 Subject: [PATCH 2/2] implmentacion de la clase refugio2 --- include/characters/refugio.hpp | 82 +++++++++++++++++++++++++++++----- 1 file changed, 71 insertions(+), 11 deletions(-) diff --git a/include/characters/refugio.hpp b/include/characters/refugio.hpp index 5a086e9..31bb61d 100644 --- a/include/characters/refugio.hpp +++ b/include/characters/refugio.hpp @@ -92,30 +92,45 @@ class Refugio : public EntidadGenerica * @param name Nombre del refugio * @param leader Nombre del líder del refugio */ - Refugio(const std::string& name, const std::string& leader); + Refugio(const std::string& name, const std::string& leader) :EntidadGenerica(name), m_leader(leader) {} /** * @brief Muestra la información del refugio */ - void showInfo() const override; + void showInfo() const override + { + std::cout << "Defensa: " << m_defense ; + std::cout << "Ataque: " << m_attack ; + std::cout << "Lider: " << m_leader ; + //(No vi oportuno agregar los moradores, recursos y visitantes) + } /** * @brief Ejecuta una acción específica del refugio */ - void doAction() const; + void doAction() const + { + std::cout << "Binevenido al refugio " << m_name ; + } /** * @brief Agrega un morador al refugio * @param refugee Nombre del morador */ - void addRefugee(const std::string& refugee); + void addRefugee(const std::string& refugee) + { + m_refugees.push_back(refugee); + } /** * @brief Agrega un recurso al refugio * @param resource Nombre del recurso * @param amount Cantidad del recurso */ - void addResource(const std::string& resource, float amount); + void addResource(const std::string& resource, float amount) + { + m_resources.push_back(std::make_pair(resource, amount)); + } /** * @brief Consume un recurso del refugio @@ -123,31 +138,76 @@ class Refugio : public EntidadGenerica * @param amount Cantidad a consumir * @return true si el consumo fue exitoso, false si no hay suficiente recurso */ - bool consumeResource(const std::string& resource, float amount); + bool consumeResource(const std::string& resource, float amount) + { + for (int i = 0; i < m_resources.size(); i++) + { + if (m_resources[i].first == resource) + { + if (m_resources[i].second >= amount) + { + m_resources[i].second -= amount; + return true; + } else + { + return false; + } + } + } + return false; + } /** * @brief Registra un visitante en el refugio (nombre y facción) * @param nombre Nombre del visitante * @param faccion Facción del visitante */ - void registerVisitant(const std::string& nombre, EngineData::Faction faccion); + void registerVisitant(const std::string& nombre, EngineData::Faction faccion) + { + Visitante newVisit{nombre,faccion}; + m_visitants->push_front(newVisit); + } /** * @brief Muestra todos los visitantes registrados */ - void showVisits(); + void showVisits() + { + printRecursive(m_visitants->get_head()); + } /** * @brief Busca si una facción ha visitado el refugio */ - bool hasFactionVisited(EngineData::Faction faccion) const; + bool hasFactionVisited(EngineData::Faction faccion) const + { + DoublyListNode* head = m_visitants->get_head(); + while (head != nullptr) + { + if(head->data.faccion == faccion) + { + return true; + } + head = head->next; + } + return false; + } /** * * @param faccion Faccion a verificar si es segura. * @return Booleano si es segura o no. */ - bool isSafeFaction(EngineData::Faction faccion) const; + bool isSafeFaction(EngineData::Faction faccion) const + { + if (faccion == EngineData::Faction::LOOTERS || + faccion == EngineData::Faction::MUTANTS || + faccion == EngineData::Faction::RAIDERS || + faccion == EngineData::Faction::GHOULS) + { + return false; + } + return true; + }; }; - #endif // REFUGIO_HPP