#pragma once constexpr int NUMBER_OF_ENEMY_FORMATIONS = 100; constexpr int MAX_NUMBER_OF_ENEMIES_IN_A_FORMATION = 50; // Estructuras struct EnemyFormationInit { 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 EnemyFormationUnit // Contiene la información de una formación enemiga { int number_of_enemies; // Cantidad de enemigos que forman la formación EnemyFormationInit init[MAX_NUMBER_OF_ENEMIES_IN_A_FORMATION]; // Vector con todas las inicializaciones de los enemigos de la formación }; struct EnemyFormationPool { EnemyFormationUnit *set[10]; // Conjunto de formaciones enemigas }; struct Stage // Contiene todas las variables relacionadas con una fase { EnemyFormationPool *enemy_pool; // El conjunto de formaciones enemigas 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 EnemyFormations, para gestionar las formaciones enemigas class EnemyFormations { private: // Variables Stage stage_[10]; // Variable con los datos de cada pantalla EnemyFormationUnit enemy_formation_[NUMBER_OF_ENEMY_FORMATIONS]; // Vector con todas las formaciones enemigas EnemyFormationPool enemy_pool_[10]; // Variable con los diferentes conjuntos de formaciones enemigas // Inicializa las formaciones enemigas void initEnemyFormations(); // Inicializa los conjuntos de formaciones void initEnemyPools(); // Inicializa las fases del juego void initGameStages(); public: // Constructor EnemyFormations(); // Destructor ~EnemyFormations() = default; // Devuelve una fase Stage getStage(int index) const; };