Muntat a c++14 per a make_unique

Mes autos, const i constexpr perl codi
Ara la classe Screen es un poc pitjor
This commit is contained in:
2024-10-06 14:58:00 +02:00
parent 25a2753b13
commit afe092c742
16 changed files with 290 additions and 381 deletions

View File

@@ -52,12 +52,14 @@ Game::Game(int playerID, int currentStage, bool demo, JA_Music_t *music)
difficulty = options.game.difficulty;
// Crea los objetos
fade = new Fade(renderer);
eventHandler = new SDL_Event();
scoreboard = new Scoreboard(renderer);
background = new Background(renderer);
explosions = new Explosions();
enemyFormations = new EnemyFormations();
Scoreboard::init(renderer);
scoreboard = Scoreboard::get();
eventHandler = std::make_unique<SDL_Event>();
fade = std::make_unique<Fade>(renderer);
background = std::make_unique<Background>(renderer);
explosions = std::make_unique<Explosions>();
enemyFormations = std::make_unique<EnemyFormations>();
// Carga los recursos
loadMedia();
@@ -65,17 +67,17 @@ Game::Game(int playerID, int currentStage, bool demo, JA_Music_t *music)
// Inicializa los vectores con los datos para la demo
if (demo)
{ // Aleatoriza la asignación del fichero
const int index1 = rand() % 2;
const int index2 = (index1 + 1) % 2;
const auto index1 = rand() % 2;
const auto index2 = (index1 + 1) % 2;
loadDemoFile(asset->get("demo1.bin"), &this->demo.dataFile[index1]);
loadDemoFile(asset->get("demo2.bin"), &this->demo.dataFile[index2]);
}
background->setPos(param.game.playArea.rect);
n1000Sprite = new SmartSprite(gameTextTexture);
n2500Sprite = new SmartSprite(gameTextTexture);
n5000Sprite = new SmartSprite(gameTextTexture);
n1000Sprite = std::make_unique<SmartSprite>(gameTextTexture.get());
n2500Sprite = std::make_unique<SmartSprite>(gameTextTexture.get());
n5000Sprite = std::make_unique<SmartSprite>(gameTextTexture.get());
explosions->addTexture(1, explosionsTextures[0], explosionsAnimations[0]);
explosions->addTexture(2, explosionsTextures[1], explosionsAnimations[1]);
@@ -92,9 +94,8 @@ Game::Game(int playerID, int currentStage, bool demo, JA_Music_t *music)
Game::~Game()
{
// Guarda las puntuaciones en un fichero
ManageHiScoreTable *manager = new ManageHiScoreTable(&options.game.hiScoreTable);
auto manager = std::make_unique<ManageHiScoreTable>(&options.game.hiScoreTable);
manager->saveToFile(asset->get("score.bin"));
delete manager;
#ifdef RECORDING
saveDemoFile(asset->get("demo1.bin"));
#endif
@@ -105,18 +106,8 @@ Game::~Game()
// Libera los recursos
unloadMedia();
delete scoreboard;
delete background;
delete explosions;
delete enemyFormations;
delete fade;
delete eventHandler;
delete n1000Sprite;
delete n2500Sprite;
delete n5000Sprite;
Scoreboard::destroy();
SDL_DestroyTexture(canvas);
}
@@ -163,7 +154,7 @@ void Game::init(int playerID)
// Variables relacionadas con la dificultad
switch (difficulty)
{
case DIFFICULTY_EASY:
case gameDifficulty::EASY:
{
defaultEnemySpeed = BALLOON_SPEED_1;
difficultyScoreMultiplier = 0.5f;
@@ -172,7 +163,7 @@ void Game::init(int playerID)
break;
}
case DIFFICULTY_NORMAL:
case gameDifficulty::NORMAL:
{
defaultEnemySpeed = BALLOON_SPEED_1;
difficultyScoreMultiplier = 1.0f;
@@ -181,7 +172,7 @@ void Game::init(int playerID)
break;
}
case DIFFICULTY_HARD:
case gameDifficulty::HARD:
{
defaultEnemySpeed = BALLOON_SPEED_5;
difficultyScoreMultiplier = 1.5f;
@@ -312,10 +303,10 @@ void Game::init(int playerID)
evaluateAndSetMenace();
// Inicializa el bitmap de 1000 puntos
const int height = 15;
const int sprite1Width = 35;
const int sprite2Width = 38;
const int sprite3Width = 39;
constexpr int height = 15;
constexpr int sprite1Width = 35;
constexpr int sprite2Width = 38;
constexpr int sprite3Width = 39;
n1000Sprite->setPosX(0);
n1000Sprite->setPosY(0);
n1000Sprite->setWidth(sprite1Width);
@@ -379,8 +370,8 @@ void Game::loadMedia()
explosionsTextures.clear();
// Texturas
bulletTexture = new Texture(renderer, asset->get("bullet.png"));
gameTextTexture = new Texture(renderer, asset->get("game_text.png"));
bulletTexture = std::make_unique<Texture>(renderer, asset->get("bullet.png"));
gameTextTexture = std::make_unique<Texture>(renderer, asset->get("game_text.png"));
// Texturas - Globos
Texture *balloon1Texture = new Texture(renderer, asset->get("balloon1.png"));
@@ -566,9 +557,6 @@ void Game::loadMedia()
void Game::unloadMedia()
{
// Texturas
delete bulletTexture;
delete gameTextTexture;
for (auto texture : player1Textures)
{
if (texture)
@@ -1059,7 +1047,7 @@ void Game::setBalloonSpeed(float speed)
void Game::incBalloonSpeed()
{
// La velocidad solo se incrementa en el modo normal
if (difficulty == DIFFICULTY_NORMAL)
if (difficulty == gameDifficulty::NORMAL)
{
if (enemySpeed == BALLOON_SPEED_1)
{
@@ -1089,7 +1077,7 @@ void Game::incBalloonSpeed()
void Game::decBalloonSpeed()
{
// La velocidad solo se decrementa en el modo normal
if (difficulty == DIFFICULTY_NORMAL)
if (difficulty == gameDifficulty::NORMAL)
{
if (enemySpeed == BALLOON_SPEED_5)
{
@@ -1383,21 +1371,21 @@ void Game::checkPlayerItemCollision(Player *player)
case ITEM_POINTS_1_DISK:
player->addScore(1000);
updateHiScore();
createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (n1000Sprite->getWidth() / 2), player->getPosY(), n1000Sprite);
createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (n1000Sprite->getWidth() / 2), player->getPosY(), n1000Sprite.get());
JA_PlaySound(itemPickUpSound);
break;
case ITEM_POINTS_2_GAVINA:
player->addScore(2500);
updateHiScore();
createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (n2500Sprite->getWidth() / 2), player->getPosY(), n2500Sprite);
createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (n2500Sprite->getWidth() / 2), player->getPosY(), n2500Sprite.get());
JA_PlaySound(itemPickUpSound);
break;
case ITEM_POINTS_3_PACMAR:
player->addScore(5000);
updateHiScore();
createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (n5000Sprite->getWidth() / 2), player->getPosY(), n5000Sprite);
createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (n5000Sprite->getWidth() / 2), player->getPosY(), n5000Sprite.get());
JA_PlaySound(itemPickUpSound);
break;
@@ -1411,7 +1399,7 @@ void Game::checkPlayerItemCollision(Player *player)
{
player->addScore(5000);
updateHiScore();
createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (n5000Sprite->getWidth() / 2), player->getPosY(), n5000Sprite);
createItemScoreSprite(item->getPosX() + (item->getWidth() / 2) - (n5000Sprite->getWidth() / 2), player->getPosY(), n5000Sprite.get());
}
player->giveExtraHit();
JA_PlaySound(itemPickUpSound);
@@ -1517,7 +1505,7 @@ void Game::renderBullets()
// Crea un objeto bala
void Game::createBullet(int x, int y, BulletType kind, bool poweredUp, int owner)
{
Bullet *b = new Bullet(x, y, kind, poweredUp, owner, &(param.game.playArea.rect), bulletTexture);
Bullet *b = new Bullet(x, y, kind, poweredUp, owner, &(param.game.playArea.rect), bulletTexture.get());
bullets.push_back(b);
}
@@ -2629,7 +2617,7 @@ bool Game::allPlayersAreNotPlaying()
// Comprueba los eventos que hay en cola
void Game::checkEvents()
{
while (SDL_PollEvent(eventHandler) != 0)
while (SDL_PollEvent(eventHandler.get()) != 0)
{
// Evento de salida de la aplicación
if (eventHandler->type == SDL_QUIT)
@@ -2815,11 +2803,10 @@ void Game::pause(bool value)
// Añade una puntuación a la tabla de records
void Game::addScoreToScoreBoard(std::string name, int score)
{
const hiScoreEntry_t entry = {trim(name), score};
ManageHiScoreTable *manager = new ManageHiScoreTable(&options.game.hiScoreTable);
const auto entry = (hiScoreEntry_t){trim(name), score};
auto manager = std::make_unique<ManageHiScoreTable>(&options.game.hiScoreTable);
manager->add(entry);
manager->saveToFile(asset->get("score.bin"));
delete manager;
}
// Comprueba el estado de los jugadores
@@ -2860,7 +2847,6 @@ void Game::checkPlayersStatusPlaying()
{
const playerStatus nextPlayerStatus = IsEligibleForHighScore(player->getScore()) ? playerStatus::ENTERING_NAME : playerStatus::CONTINUE;
demo.enabled ? player->setStatusPlaying(playerStatus::WAITING) : player->setStatusPlaying(nextPlayerStatus);
// addScoreToScoreBoard(player->getName(), player->getScore());
break;
}