#pragma once #define NUMBER_OF_ENEMY_FORMATIONS 100 #define MAX_NUMBER_OF_ENEMIES_IN_A_FORMATION 50 // Estructuras struct enemyInits_t { 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 velX; // Velocidad inicial en el eje X int kind; // Tipo de enemigo int creationCounter; // Temporizador para la creación del enemigo }; struct enemyFormation_t // Contiene la información de una formación enemiga { int numberOfEnemies; // Cantidad de enemigos que forman la formación enemyInits_t init[MAX_NUMBER_OF_ENEMIES_IN_A_FORMATION]; // Vector con todas las inicializaciones de los enemigos de la formación }; struct enemyPool_t { enemyFormation_t *set[10]; // Conjunto de formaciones enemigas }; struct stage_t // Contiene todas las variables relacionadas con una fase { enemyPool_t *enemyPool; // El conjunto de formaciones enemigas de la fase int powerToComplete; // Cantidad de poder que se necesita para completar la fase int maxMenace; // Umbral máximo de amenaza de la fase int minMenace; // 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_t stage[10]; // Variable con los datos de cada pantalla enemyFormation_t enemyFormation[NUMBER_OF_ENEMY_FORMATIONS]; // Vector con todas las formaciones enemigas enemyPool_t enemyPool[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_t getStage(int index) const; };