canvi de pc
This commit is contained in:
@@ -709,7 +709,4 @@ void BalloonFormations::initGameStages()
|
||||
}
|
||||
|
||||
// Devuelve una fase
|
||||
Stage BalloonFormations::getStage(int index) const
|
||||
{
|
||||
return stage_[index];
|
||||
}
|
||||
Stage BalloonFormations::getStage(int index) const { return stage_[index]; }
|
||||
@@ -4,49 +4,46 @@
|
||||
#include "balloon.h" // Para Balloon, BALLOON_SCORE, BALLOON_VE...
|
||||
#include "balloon_formations.h" // Para BalloonFormations, BalloonFormatio...
|
||||
#include "resource.h"
|
||||
#include "game.h"
|
||||
#include "screen.h"
|
||||
#include "explosions.h" // Para Explosions
|
||||
#include "explosions.h" // Para Explosions
|
||||
#include "jail_audio.h"
|
||||
|
||||
// Constructor
|
||||
BalloonManager::BalloonManager()
|
||||
: explosions_(std::make_unique<Explosions>()),
|
||||
balloon_formations_(std::make_unique<BalloonFormations>())
|
||||
balloon_formations_(std::make_unique<BalloonFormations>()) {init();}
|
||||
|
||||
// Inicializa
|
||||
void BalloonManager::init()
|
||||
{
|
||||
// Texturas - Globos
|
||||
{
|
||||
balloon_textures_.emplace_back(Resource::get()->getTexture("balloon1.png"));
|
||||
balloon_textures_.emplace_back(Resource::get()->getTexture("balloon2.png"));
|
||||
balloon_textures_.emplace_back(Resource::get()->getTexture("balloon3.png"));
|
||||
balloon_textures_.emplace_back(Resource::get()->getTexture("balloon4.png"));
|
||||
balloon_textures_.emplace_back(Resource::get()->getTexture("powerball.png"));
|
||||
}
|
||||
// Texturas - Globos
|
||||
balloon_textures_.emplace_back(Resource::get()->getTexture("balloon1.png"));
|
||||
balloon_textures_.emplace_back(Resource::get()->getTexture("balloon2.png"));
|
||||
balloon_textures_.emplace_back(Resource::get()->getTexture("balloon3.png"));
|
||||
balloon_textures_.emplace_back(Resource::get()->getTexture("balloon4.png"));
|
||||
balloon_textures_.emplace_back(Resource::get()->getTexture("powerball.png"));
|
||||
|
||||
// Texturas - Explosiones
|
||||
{
|
||||
explosions_textures_.emplace_back(Resource::get()->getTexture("explosion1.png"));
|
||||
explosions_textures_.emplace_back(Resource::get()->getTexture("explosion2.png"));
|
||||
explosions_textures_.emplace_back(Resource::get()->getTexture("explosion3.png"));
|
||||
explosions_textures_.emplace_back(Resource::get()->getTexture("explosion4.png"));
|
||||
}
|
||||
// Animaciones -- Globos
|
||||
balloon_animations_.emplace_back(Resource::get()->getAnimation("balloon1.ani"));
|
||||
balloon_animations_.emplace_back(Resource::get()->getAnimation("balloon2.ani"));
|
||||
balloon_animations_.emplace_back(Resource::get()->getAnimation("balloon3.ani"));
|
||||
balloon_animations_.emplace_back(Resource::get()->getAnimation("balloon4.ani"));
|
||||
balloon_animations_.emplace_back(Resource::get()->getAnimation("powerball.ani"));
|
||||
|
||||
// Animaciones -- Globos
|
||||
{
|
||||
balloon_animations_.emplace_back(Resource::get()->getAnimation("balloon1.ani"));
|
||||
balloon_animations_.emplace_back(Resource::get()->getAnimation("balloon2.ani"));
|
||||
balloon_animations_.emplace_back(Resource::get()->getAnimation("balloon3.ani"));
|
||||
balloon_animations_.emplace_back(Resource::get()->getAnimation("balloon4.ani"));
|
||||
balloon_animations_.emplace_back(Resource::get()->getAnimation("powerball.ani"));
|
||||
}
|
||||
// Texturas - Explosiones
|
||||
explosions_textures_.emplace_back(Resource::get()->getTexture("explosion1.png"));
|
||||
explosions_textures_.emplace_back(Resource::get()->getTexture("explosion2.png"));
|
||||
explosions_textures_.emplace_back(Resource::get()->getTexture("explosion3.png"));
|
||||
explosions_textures_.emplace_back(Resource::get()->getTexture("explosion4.png"));
|
||||
|
||||
// Animaciones -- Explosiones
|
||||
{
|
||||
explosions_animations_.emplace_back(Resource::get()->getAnimation("explosion1.ani"));
|
||||
explosions_animations_.emplace_back(Resource::get()->getAnimation("explosion2.ani"));
|
||||
explosions_animations_.emplace_back(Resource::get()->getAnimation("explosion3.ani"));
|
||||
explosions_animations_.emplace_back(Resource::get()->getAnimation("explosion4.ani"));
|
||||
}
|
||||
// Animaciones -- Explosiones
|
||||
explosions_animations_.emplace_back(Resource::get()->getAnimation("explosion1.ani"));
|
||||
explosions_animations_.emplace_back(Resource::get()->getAnimation("explosion2.ani"));
|
||||
explosions_animations_.emplace_back(Resource::get()->getAnimation("explosion3.ani"));
|
||||
explosions_animations_.emplace_back(Resource::get()->getAnimation("explosion4.ani"));
|
||||
|
||||
// Añade texturas
|
||||
explosions_->addTexture(1, explosions_textures_[0], explosions_animations_[0]);
|
||||
explosions_->addTexture(2, explosions_textures_[1], explosions_animations_[1]);
|
||||
explosions_->addTexture(3, explosions_textures_[2], explosions_animations_[2]);
|
||||
@@ -102,7 +99,7 @@ void BalloonManager::deployBalloonFormation()
|
||||
|
||||
last_balloon_deploy_ = formation;
|
||||
|
||||
const auto set = balloon_formations_->getStage(current_stage_).balloon_pool.set[formation];
|
||||
const auto set = balloon_formations_->getStage(game_.getCurrentStage()).balloon_pool.set[formation];
|
||||
const auto numEnemies = set.number_of_balloons;
|
||||
for (int i = 0; i < numEnemies; ++i)
|
||||
{
|
||||
@@ -115,27 +112,6 @@ void BalloonManager::deployBalloonFormation()
|
||||
}
|
||||
}
|
||||
|
||||
// Gestiona el nivel de amenaza
|
||||
void BalloonManager::updateMenace()
|
||||
{
|
||||
const auto stage = balloon_formations_->getStage(current_stage_);
|
||||
const float percent = current_power_ / stage.power_to_complete;
|
||||
const int difference = stage.max_menace - stage.min_menace;
|
||||
|
||||
// Aumenta el nivel de amenaza en función de la puntuación
|
||||
menace_threshold_ = stage.min_menace + (difference * percent);
|
||||
|
||||
// Si el nivel de amenza es inferior al umbral
|
||||
if (menace_current_ < menace_threshold_)
|
||||
{
|
||||
// Crea una formación de enemigos
|
||||
deployBalloonFormation();
|
||||
|
||||
// Recalcula el nivel de amenaza con el nuevo globo
|
||||
evaluateAndSetMenace();
|
||||
}
|
||||
}
|
||||
|
||||
// Vacia del vector de globos los globos que ya no sirven
|
||||
void BalloonManager::freeBalloons()
|
||||
{
|
||||
@@ -144,14 +120,6 @@ void BalloonManager::freeBalloons()
|
||||
balloons_.erase(it, balloons_.end());
|
||||
}
|
||||
|
||||
// Calcula y establece el valor de amenaza en funcion de los globos activos
|
||||
void BalloonManager::evaluateAndSetMenace()
|
||||
{
|
||||
menace_current_ = std::accumulate(
|
||||
balloons_.begin(), balloons_.end(), 0, [](int sum, const auto &balloon)
|
||||
{ return sum + (balloon->isEnabled() ? balloon->getMenace() : 0); });
|
||||
}
|
||||
|
||||
// Actualiza la variable enemyDeployCounter
|
||||
void BalloonManager::updateBalloonDeployCounter()
|
||||
{
|
||||
@@ -225,7 +193,7 @@ void BalloonManager::checkAndUpdateBalloonSpeed()
|
||||
if (difficulty_ != GameDifficulty::NORMAL)
|
||||
return;
|
||||
|
||||
const float percent = static_cast<float>(current_power_) / balloon_formations_->getStage(current_stage_).power_to_complete;
|
||||
const float percent = static_cast<float>(game_.getCurrentPower()) / balloon_formations_->getStage(game_.getCurrentStage()).power_to_complete;
|
||||
const float thresholds[] = {0.2f, 0.4f, 0.6f, 0.8f};
|
||||
|
||||
for (size_t i = 0; i < std::size(thresholds); ++i)
|
||||
@@ -240,7 +208,7 @@ void BalloonManager::checkAndUpdateBalloonSpeed()
|
||||
// Explosiona un globo. Lo destruye y crea otros dos si es el caso
|
||||
void BalloonManager::popBalloon(std::shared_ptr<Balloon> balloon)
|
||||
{
|
||||
increaseStageCurrentPower(1);
|
||||
game_.increaseStageCurrentPower(1);
|
||||
balloons_popped_++;
|
||||
|
||||
if (balloon->getType() == BalloonType::POWERBALL)
|
||||
@@ -298,7 +266,7 @@ void BalloonManager::destroyBalloon(std::shared_ptr<Balloon> &balloon)
|
||||
|
||||
// Aumenta el poder de la fase
|
||||
const auto power = balloon->getPower();
|
||||
increaseStageCurrentPower(power);
|
||||
game_.increaseStageCurrentPower(power);
|
||||
balloons_popped_ += power;
|
||||
|
||||
// Destruye el globo
|
||||
@@ -310,7 +278,9 @@ void BalloonManager::destroyBalloon(std::shared_ptr<Balloon> &balloon)
|
||||
void BalloonManager::destroyAllBalloons()
|
||||
{
|
||||
for (auto &balloon : balloons_)
|
||||
{
|
||||
destroyBalloon(balloon);
|
||||
}
|
||||
|
||||
balloon_deploy_counter_ = 300;
|
||||
JA_PlaySound(Resource::get()->getSound("powerball.wav"));
|
||||
|
||||
@@ -24,18 +24,29 @@ private:
|
||||
bool power_ball_enabled_ = false; // Indica si hay una powerball ya activa
|
||||
int power_ball_counter_ = 0; // Contador de formaciones enemigas entre la aparicion de una PowerBall y otra
|
||||
int last_balloon_deploy_ = 0; // Guarda cual ha sido la última formación desplegada para no repetir;
|
||||
int menace_current_ = 0; // Nivel de amenaza actual
|
||||
int menace_threshold_ = 0; // Umbral del nivel de amenaza. Si el nivel de amenaza cae por debajo del umbral, se generan más globos. Si el umbral aumenta, aumenta el número de globos
|
||||
|
||||
// Inicializa
|
||||
void init();
|
||||
|
||||
public:
|
||||
// Constructor
|
||||
BalloonManager();
|
||||
|
||||
// Destructor
|
||||
~BalloonManager() = default;
|
||||
|
||||
// Actualiza
|
||||
void update();
|
||||
|
||||
// Renderiza los globos
|
||||
void renderBalloons();
|
||||
|
||||
// Vacia del vector de globos los globos que ya no sirven
|
||||
void freeBalloons();
|
||||
|
||||
// Crea una formación de enemigos
|
||||
void deployBalloonFormation();
|
||||
|
||||
// Gestiona el nivel de amenaza
|
||||
void updateMenace();
|
||||
|
||||
// Calcula y establece el valor de amenaza en funcion de los globos activos
|
||||
void evaluateAndSetMenace();
|
||||
|
||||
// Actualiza la variable enemyDeployCounter
|
||||
void updateBalloonDeployCounter();
|
||||
|
||||
@@ -80,20 +91,4 @@ private:
|
||||
|
||||
// Cambia el color de todos los globos
|
||||
void normalColorsToAllBalloons();
|
||||
|
||||
public:
|
||||
// Constructor
|
||||
BalloonManager();
|
||||
|
||||
// Destructor
|
||||
~BalloonManager() = default;
|
||||
|
||||
// Actualiza
|
||||
void update();
|
||||
|
||||
// Renderiza los globos
|
||||
void renderBalloons();
|
||||
|
||||
// Vacia del vector de globos los globos que ya no sirven
|
||||
void freeBalloons();
|
||||
};
|
||||
@@ -44,6 +44,7 @@ Game::Game(int player_id, int current_stage, bool demo)
|
||||
background_(std::make_unique<Background>()),
|
||||
canvas_(SDL_CreateTexture(renderer_, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, param.game.play_area.rect.w, param.game.play_area.rect.h)),
|
||||
fade_(std::make_unique<Fade>()),
|
||||
balloon_manager_(std::make_unique<BalloonManager>(*this)),
|
||||
current_stage_(current_stage)
|
||||
{
|
||||
// Pasa variables
|
||||
@@ -171,9 +172,6 @@ void Game::setResources()
|
||||
}
|
||||
}
|
||||
|
||||
// Aumenta el poder de la fase
|
||||
void Game::increaseStageCurrentPower(int power) { current_power_ += power; }
|
||||
|
||||
// Actualiza el valor de hiScore en caso necesario
|
||||
void Game::updateHiScore()
|
||||
{
|
||||
@@ -1781,4 +1779,33 @@ void Game::cleanVectors()
|
||||
freeItems();
|
||||
freeSmartSprites();
|
||||
freePathSprites();
|
||||
}
|
||||
|
||||
// Gestiona el nivel de amenaza
|
||||
void Game::updateMenace()
|
||||
{
|
||||
const auto stage = balloon_formations_->getStage(current_stage_);
|
||||
const float percent = current_power_ / stage.power_to_complete;
|
||||
const int difference = stage.max_menace - stage.min_menace;
|
||||
|
||||
// Aumenta el nivel de amenaza en función de la puntuación
|
||||
menace_threshold_ = stage.min_menace + (difference * percent);
|
||||
|
||||
// Si el nivel de amenza es inferior al umbral
|
||||
if (menace_current_ < menace_threshold_)
|
||||
{
|
||||
// Crea una formación de enemigos
|
||||
balloon_manager_->deployBalloonFormation();
|
||||
|
||||
// Recalcula el nivel de amenaza con el nuevo globo
|
||||
evaluateAndSetMenace();
|
||||
}
|
||||
}
|
||||
|
||||
// Calcula y establece el valor de amenaza en funcion de los globos activos
|
||||
void Game::evaluateAndSetMenace()
|
||||
{
|
||||
menace_current_ = std::accumulate(
|
||||
balloons_.begin(), balloons_.end(), 0, [](int sum, const auto &balloon)
|
||||
{ return sum + (balloon->isEnabled() ? balloon->getMenace() : 0); });
|
||||
}
|
||||
@@ -121,7 +121,7 @@ private:
|
||||
Input *input_; // Manejador de entrada
|
||||
Scoreboard *scoreboard_; // Objeto para dibujar el marcador
|
||||
|
||||
std::unique_ptr<Background> background_; // Objeto para dibujar el fondo del juego
|
||||
std::unique_ptr<Background> background_; // Objeto para dibujar el fondo del juego
|
||||
|
||||
SDL_Texture *canvas_; // Textura para dibujar la zona de juego
|
||||
|
||||
@@ -137,8 +137,8 @@ private:
|
||||
|
||||
std::vector<std::shared_ptr<Texture>> game_text_textures_; // Vector con las texturas para los sprites con textos
|
||||
|
||||
std::vector<std::vector<std::string>> item_animations_; // Vector con las animaciones de los items
|
||||
std::vector<std::vector<std::string>> player_animations_; // Vector con las animaciones del jugador
|
||||
std::vector<std::vector<std::string>> item_animations_; // Vector con las animaciones de los items
|
||||
std::vector<std::vector<std::string>> player_animations_; // Vector con las animaciones del jugador
|
||||
|
||||
std::unique_ptr<Fade> fade_; // Objeto para renderizar fades
|
||||
std::unique_ptr<BalloonManager> balloon_manager_; // Objeto para gestionar los globos
|
||||
@@ -150,6 +150,7 @@ private:
|
||||
options.game.hi_score_table[0].score); // Máxima puntuación y nombre de quien la ostenta
|
||||
|
||||
int current_stage_; // Indica la fase actual
|
||||
int current_power_ = 0; // Poder actual almacenado para completar la fase
|
||||
Demo demo_; // Variable con todas las variables relacionadas con el modo demo
|
||||
GameDifficulty difficulty_ = options.game.difficulty; // Dificultad del juego
|
||||
Helper helper_; // Variable para gestionar las ayudas
|
||||
@@ -159,11 +160,12 @@ private:
|
||||
bool paused_ = false; // Indica si el juego está pausado (no se deberia de poder utilizar en el modo arcade)
|
||||
float difficulty_score_multiplier_; // Multiplicador de puntos en función de la dificultad
|
||||
int counter_ = 0; // Contador para el juego
|
||||
int current_power_ = 0; // Poder actual almacenado para completar la fase
|
||||
int game_completed_counter_ = 0; // Contador para el tramo final, cuando se ha completado la partida y ya no aparecen más enemigos
|
||||
int game_over_counter_ = GAME_OVER_COUNTER_; // Contador para el estado de fin de partida
|
||||
int time_stopped_counter_ = 0; // Temporizador para llevar la cuenta del tiempo detenido
|
||||
int total_power_to_complete_game_; // La suma del poder necesario para completar todas las fases
|
||||
int menace_current_ = 0; // Nivel de amenaza actual
|
||||
int menace_threshold_ = 0; // Umbral del nivel de amenaza. Si el nivel de amenaza cae por debajo del umbral, se generan más globos. Si el umbral aumenta, aumenta el número de globos
|
||||
GameState state_ = GameState::PLAYING; // Estado
|
||||
#ifdef DEBUG
|
||||
bool auto_pop_balloons_ = false; // Si es true, incrementa automaticamente los globos explotados
|
||||
@@ -181,9 +183,6 @@ private:
|
||||
// Asigna texturas y animaciones
|
||||
void setResources();
|
||||
|
||||
// Aumenta el poder de la fase
|
||||
void increaseStageCurrentPower(int power);
|
||||
|
||||
// Actualiza el valor de HiScore en caso necesario
|
||||
void updateHiScore();
|
||||
|
||||
@@ -199,54 +198,9 @@ private:
|
||||
// Actualiza el estado de fin de la partida
|
||||
void updateGameOverState();
|
||||
|
||||
// Actualiza los globos
|
||||
void updateBalloons();
|
||||
|
||||
// Pinta en pantalla todos los globos activos
|
||||
void renderBalloons();
|
||||
|
||||
// Crea un globo nuevo en el vector de globos
|
||||
std::shared_ptr<Balloon> createBalloon(float x, int y, BalloonType type, BalloonSize size, float velx, float speed, int stopped_counter);
|
||||
|
||||
// Crea un globo a partir de otro globo
|
||||
void createChildBalloon(const std::shared_ptr<Balloon> &balloon, const std::string &direction);
|
||||
|
||||
// Crea una PowerBall
|
||||
void createPowerBall();
|
||||
|
||||
// Establece la velocidad de los globos
|
||||
void setBalloonSpeed(float speed);
|
||||
|
||||
// Actualiza la velocidad de los globos en funcion del poder acumulado de la fase
|
||||
void checkAndUpdateBalloonSpeed();
|
||||
|
||||
// Explosiona un globo. Lo destruye y crea otros dos si es el caso
|
||||
void popBalloon(std::shared_ptr<Balloon> balloon);
|
||||
|
||||
// Explosiona un globo. Lo destruye
|
||||
void destroyBalloon(std::shared_ptr<Balloon> &balloon);
|
||||
|
||||
// Destruye todos los globos
|
||||
void destroyAllBalloons();
|
||||
|
||||
// Destruye todos los items
|
||||
void destroyAllItems();
|
||||
|
||||
// Detiene todos los globos
|
||||
void stopAllBalloons();
|
||||
|
||||
// Pone en marcha todos los globos
|
||||
void startAllBalloons();
|
||||
|
||||
// Cambia el color de todos los globos
|
||||
void reverseColorsToAllBalloons();
|
||||
|
||||
// Cambia el color de todos los globos
|
||||
void normalColorsToAllBalloons();
|
||||
|
||||
// Vacia el vector de globos
|
||||
void freeBalloons();
|
||||
|
||||
// Comprueba la colisión entre el jugador y los globos activos
|
||||
bool checkPlayerBalloonCollision(std::shared_ptr<Player> &player);
|
||||
|
||||
@@ -313,12 +267,6 @@ private:
|
||||
// Acciones a realizar cuando el jugador muere
|
||||
void killPlayer(std::shared_ptr<Player> &player);
|
||||
|
||||
// Calcula y establece el valor de amenaza en funcion de los globos activos
|
||||
void evaluateAndSetMenace();
|
||||
|
||||
// Actualiza la variable EnemyDeployCounter
|
||||
void updateBalloonDeployCounter();
|
||||
|
||||
// Actualiza y comprueba el valor de la variable
|
||||
void updateTimeStopped();
|
||||
|
||||
@@ -334,12 +282,6 @@ private:
|
||||
// Deshabilita el efecto del item de detener el tiempo
|
||||
void disableTimeStopItem();
|
||||
|
||||
// Indica si se puede crear una powerball
|
||||
bool canPowerBallBeCreated();
|
||||
|
||||
// Calcula el poder actual de los globos en pantalla
|
||||
int calculateScreenPower();
|
||||
|
||||
// Actualiza las variables de ayuda
|
||||
void updateHelper();
|
||||
|
||||
@@ -448,9 +390,6 @@ private:
|
||||
// Actualiza las variables durante el transcurso normal del juego
|
||||
void updateGame();
|
||||
|
||||
// Actualiza las variables durante el transcurso del final del juego
|
||||
void updateCompletedGame();
|
||||
|
||||
// Gestiona eventos para el estado del final del juego
|
||||
void updateCompletedState();
|
||||
|
||||
@@ -460,6 +399,12 @@ private:
|
||||
// Vacía los vectores de elementos deshabilitados
|
||||
void cleanVectors();
|
||||
|
||||
// Gestiona el nivel de amenaza
|
||||
void updateMenace();
|
||||
|
||||
// Calcula y establece el valor de amenaza en funcion de los globos activos
|
||||
void evaluateAndSetMenace();
|
||||
|
||||
public:
|
||||
// Constructor
|
||||
Game(int playerID, int current_stage, bool demo);
|
||||
@@ -469,4 +414,14 @@ public:
|
||||
|
||||
// Bucle para el juego
|
||||
void run();
|
||||
|
||||
// Aumenta el poder de la fase
|
||||
void increaseStageCurrentPower(int power) { current_power_ += power; }
|
||||
|
||||
// Getters y Setters
|
||||
int getCurrentStage() const { return current_stage_; }
|
||||
void setCurrentStage(int stage) { current_stage_ = stage; }
|
||||
|
||||
int getCurrentPower() const { return current_power_; }
|
||||
void setCurrentPower(int power) { current_power_ = power; }
|
||||
};
|
||||
Reference in New Issue
Block a user