Añadida la clase scoreboard

This commit is contained in:
2024-05-23 13:44:21 +02:00
parent b5c04c6c26
commit bf0171b38d
5 changed files with 201 additions and 128 deletions

View File

@@ -27,6 +27,7 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr
// Crea los objetos
fade = new Fade(renderer);
eventHandler = new SDL_Event();
scoreboard = new Scoreboard(renderer, screen, asset, lang, options);
// Carga los recursos
loadMedia();
@@ -147,6 +148,8 @@ Game::~Game()
}
balloonTextures.clear();
delete scoreboard;
delete text;
delete textBig;
delete textScoreBoard;
@@ -401,7 +404,6 @@ void Game::loadMedia()
gameBuildingsTexture = new Texture(renderer, asset->get("game_buildings.png"));
gameCloudsTexture = new Texture(renderer, asset->get("game_clouds.png"));
gameGrassTexture = new Texture(renderer, asset->get("game_grass.png"));
gamePowerMeterTexture = new Texture(renderer, asset->get("game_power_meter.png"));
gameSkyColorsTexture = new Texture(renderer, asset->get("game_sky_colors.png"));
gameTextTexture = new Texture(renderer, asset->get("game_text.png"));
gameOverTexture = new Texture(renderer, asset->get("menu_game_over.png"));
@@ -1599,120 +1601,6 @@ void Game::updateHiScore()
}
}
// Transforma un valor numérico en una cadena de 6 cifras
std::string Game::updateScoreText(Uint32 num)
{
if ((num >= 0) && (num <= 9))
{
return ("000000" + std::to_string(num));
}
if ((num >= 10) && (num <= 99))
{
return ("00000" + std::to_string(num));
}
if ((num >= 100) && (num <= 999))
{
return ("0000" + std::to_string(num));
}
if ((num >= 1000) && (num <= 9999))
{
return ("000" + std::to_string(num));
}
if ((num >= 010000) && (num <= 99999))
{
return ("00" + std::to_string(num));
}
if ((num >= 100000) && (num <= 999999))
{
return ("0" + std::to_string(num));
}
if ((num >= 1000000) && (num <= 9999999))
{
return (std::to_string(num));
}
return (std::to_string(num));
}
// Pinta el marcador en pantalla usando un objeto texto
void Game::renderScoreBoard()
{
// Dibuja el fondo del marcador
if (difficulty == DIFFICULTY_NORMAL)
{ // Pone el color gris de siempre
SDL_SetRenderDrawColor(renderer, 46, 63, 71, 255);
}
else
{ // Pinta el fondo del marcador del color de la dificultad
SDL_SetRenderDrawColor(renderer, difficultyColor.r, difficultyColor.g, difficultyColor.b, 255);
}
SDL_Rect rect = {0, 160, 256, 32};
SDL_RenderFillRect(renderer, &rect);
// Dibuja la linea que separa el marcador de la zona de juego
SDL_SetRenderDrawColor(renderer, 13, 26, 43, 255);
SDL_RenderDrawLine(renderer, 0, 160, 255, 160);
// Anclas para los elementos
const int offset1 = 162;
const int offset2 = offset1 + 7;
const int offset3 = offset2 + 7;
const int offset4 = offset3 + 7;
const int offsetLeft = PLAY_AREA_LEFT + 45;
const int offsetRight = PLAY_AREA_RIGHT - 45;
// PLAYER1 - SCORE
textScoreBoard->writeCentered(offsetLeft, offset1, lang->getText(53));
textScoreBoard->writeCentered(offsetLeft, offset2, updateScoreText(players[0]->getScore()));
// PLAYER1 - MULT
textScoreBoard->writeCentered(offsetLeft, offset3, lang->getText(55));
textScoreBoard->writeCentered(offsetLeft, offset4, std::to_string(players[0]->getScoreMultiplier()).substr(0, 3));
if (numPlayers == 2)
{
// PLAYER2 - SCORE
textScoreBoard->writeCentered(offsetRight, offset1, lang->getText(54));
textScoreBoard->writeCentered(offsetRight, offset2, updateScoreText(players[1]->getScore()));
// PLAYER2 - MULT
textScoreBoard->writeCentered(offsetRight, offset3, lang->getText(55));
textScoreBoard->writeCentered(offsetRight, offset4, std::to_string(players[1]->getScoreMultiplier()).substr(0, 3));
}
else
{
// PLAYER2 - SCORE
textScoreBoard->writeCentered(offsetRight, offset1, lang->getText(54));
textScoreBoard->writeCentered(offsetRight, offset2, "0000000");
// PLAYER2 - MULT
textScoreBoard->writeCentered(offsetRight, offset3, lang->getText(55));
textScoreBoard->writeCentered(offsetRight, offset4, "1.0");
}
// STAGE
textScoreBoard->writeCentered(PLAY_AREA_CENTER_X, offset1, lang->getText(57) + std::to_string(stage[currentStage].number));
// POWERMETER
powerMeterSprite->setPosY(offset2);
powerMeterSprite->setSpriteClip(0, 0, 40, 7);
powerMeterSprite->render();
const float percent = (stage[currentStage].currentPower * 40.0f) / stage[currentStage].powerToComplete;
powerMeterSprite->setSpriteClip(40, 0, (int)percent, 7);
powerMeterSprite->render();
// HI-SCORE
textScoreBoard->writeCentered(PLAY_AREA_CENTER_X, offset3, lang->getText(56));
textScoreBoard->writeCentered(PLAY_AREA_CENTER_X, offset4, hiScoreName + updateScoreText(hiScore));
}
// Actualiza las variables del jugador
void Game::updatePlayers()
{
@@ -2928,7 +2816,7 @@ void Game::render()
renderMessages();
renderItems();
renderSmartSprites();
renderScoreBoard();
scoreboard->render();
renderPlayers();
if ((deathCounter <= 150) && !players[0]->isAlive())
@@ -3292,7 +3180,7 @@ void Game::shakeScreen()
renderBullets();
renderItems();
renderPlayers();
renderScoreBoard();
scoreboard->render();
// Vuelca el contenido del renderizador en pantalla
screen->blit();
@@ -3433,7 +3321,7 @@ void Game::renderPausedGame()
renderMessages();
renderItems();
renderSmartSprites();
renderScoreBoard();
scoreboard->render();
renderPlayers();
if ((deathCounter <= 150) && !players[0]->isAlive())