#pragma once constexpr int NUMBER_OF_BALLOON_FORMATIONS = 100; constexpr int MAX_NUMBER_OF_BALLOONS_IN_A_FORMATION = 50; // Estructuras struct BalloonFormationParams { int x; // Posición en el eje X donde crear al enemigo int y; // Posición en el eje Y donde crear al enemigo float vel_x; // Velocidad inicial en el eje X int kind; // Tipo de enemigo int creation_counter; // Temporizador para la creación del enemigo }; struct BalloonFormationUnit // Contiene la información de una formación enemiga { int number_of_balloons; // Cantidad de enemigos que forman la formación BalloonFormationParams init[MAX_NUMBER_OF_BALLOONS_IN_A_FORMATION]; // Vector con todas las inicializaciones de los enemigos de la formación }; struct BalloonFormationPool { BalloonFormationUnit *set[10]; // 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_[10]; // Variable con los datos de cada pantalla BalloonFormationUnit balloon_formation_[NUMBER_OF_BALLOON_FORMATIONS]; // Vector con todas las formaciones enemigas BalloonFormationPool balloon_formation_pool_[10]; // 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; };