#pragma once #include "balloon.h" constexpr int NUMBER_OF_BALLOON_FORMATIONS = 100; constexpr int MAX_NUMBER_OF_BALLOONS_IN_A_FORMATION = 50; constexpr int NUMBER_OF_SETS_PER_POOL = 10; constexpr int NUMBER_OF_STAGES = 10; // Estructuras struct BalloonFormationParams { int x = 0; // Posición en el eje X donde crear el globo int y = 0; // Posición en el eje Y donde crear el globo float vel_x = 0.0f; // Velocidad inicial en el eje X BalloonType type = BalloonType::BALLOON; // Tipo de globo BalloonSize size = BalloonSize::SIZE1; // Tamaño de globo int creation_counter = 0; // Temporizador para la creación del globo // Constructor por defecto BalloonFormationParams() = default; // Constructor con parámetros BalloonFormationParams(int x_val, int y_val, float vel_x_val, BalloonType type_val, BalloonSize size_val, int creation_counter_val) : x(x_val), y(y_val), vel_x(vel_x_val), type(type_val), size(size_val), creation_counter(creation_counter_val) {} }; struct BalloonFormationUnit // Contiene la información de una formación enemiga { int number_of_balloons; // Cantidad de globos que forman la formación BalloonFormationParams init[MAX_NUMBER_OF_BALLOONS_IN_A_FORMATION]; // Vector con todas las inicializaciones de los globos de la formación }; struct BalloonFormationPool { BalloonFormationUnit set[NUMBER_OF_SETS_PER_POOL]; // Conjunto de formaciones de globos }; struct Stage // Contiene todas las variables relacionadas con una fase { BalloonFormationPool balloon_pool; // El conjunto de formaciones de globos de la fase int power_to_complete; // Cantidad de poder que se necesita para completar la fase int max_menace; // Umbral máximo de amenaza de la fase int min_menace; // Umbral mínimo de amenaza de la fase int number; // Número de fase }; // Clase BalloonFormations, para gestionar las formaciones de globos class BalloonFormations { private: // Variables Stage stage_[NUMBER_OF_STAGES]; // Variable con los datos de cada pantalla BalloonFormationUnit balloon_formation_[NUMBER_OF_BALLOON_FORMATIONS]; // Vector con todas las formaciones enemigas BalloonFormationPool balloon_formation_pool_[NUMBER_OF_STAGES]; // Variable con los diferentes conjuntos de formaciones enemigas // Inicializa las formaciones enemigas void initBalloonFormations(); // Inicializa los conjuntos de formaciones void initBalloonFormationPools(); // Inicializa las fases del juego void initGameStages(); public: // Constructor BalloonFormations(); // Destructor ~BalloonFormations() = default; // Devuelve una fase Stage getStage(int index) const; };