From 7039ea451144a50c2a58917db772a3cb40514245 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Mon, 30 Jun 2025 21:24:11 +0200 Subject: [PATCH] Reduit de 60 a 30 segons de temps per a posar el nom fix: quan se t'acaba el temps per a posar el nom, no posaves nom. ara posa lo que tingues posat --- data/config/param_320x240.txt | 2 +- data/config/param_320x256.txt | 2 +- source/player.cpp | 25 ++++++++++++++++++------- source/player.h | 3 ++- source/sections/game.cpp | 6 ++++-- 5 files changed, 26 insertions(+), 12 deletions(-) diff --git a/data/config/param_320x240.txt b/data/config/param_320x240.txt index a6d7fdf..13213d9 100644 --- a/data/config/param_320x240.txt +++ b/data/config/param_320x240.txt @@ -6,7 +6,7 @@ game.play_area.rect.x 0 # Posición X de la zona jugable game.play_area.rect.y 0 # Posición Y de la zona jugable game.play_area.rect.w 320 # Ancho de la zona jugable game.play_area.rect.h 200 # Alto de la zona jugable -game.enter_name_seconds 60 # Segundos para introducir el nombre al finalizar la partida +game.enter_name_seconds 30 # Segundos para introducir el nombre al finalizar la partida ## --- FADE --- fade.color 1F2B30 # Color hexadecimal para el efecto de fundido diff --git a/data/config/param_320x256.txt b/data/config/param_320x256.txt index 8cfac1e..98c97cd 100644 --- a/data/config/param_320x256.txt +++ b/data/config/param_320x256.txt @@ -6,7 +6,7 @@ game.play_area.rect.x 0 # Posición X de la zona jugable game.play_area.rect.y 0 # Posición Y de la zona jugable game.play_area.rect.w 320 # Ancho de la zona jugable game.play_area.rect.h 216 # Alto de la zona jugable -game.enter_name_seconds 60 # Segundos para introducir el nombre al finalizar la partida +game.enter_name_seconds 30 # Segundos para introducir el nombre al finalizar la partida ## --- FADE --- fade.color 1F2B30 # Color hexadecimal para el efecto de fundido diff --git a/source/player.cpp b/source/player.cpp index ba8701d..c65f8f3 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -12,6 +12,8 @@ #include "scoreboard.h" // Para Scoreboard, ScoreboardMode #include "stage.h" // Para power_can_be_added #include "texture.h" // Para Texture +#include "manage_hiscore_table.h" // Para ManageHiScoreTable, HiScoreEntry + // Constructor Player::Player(int id, float x, int y, bool demo, SDL_FRect &play_area, std::vector> texture, const std::vector> &animations) @@ -184,7 +186,7 @@ void Player::move() { player_sprite_->setPosX(std::clamp(X, MIN_X, MAX_X)); player_sprite_->setVelX(-player_sprite_->getVelX()); - playRandomBubbleSound(); + playJumpingSound(); } // Si el cadaver toca el suelo rebota y si tiene poca velocidad, se detiene y cambia de estado @@ -199,7 +201,7 @@ void Player::move() pos_y_ = default_pos_y_; player_sprite_->clear(); shiftSprite(); - playRandomBubbleSound(); + playJumpingSound(); } else { @@ -207,7 +209,7 @@ void Player::move() player_sprite_->setPosY(play_area_.h - HEIGHT_); player_sprite_->setVelY(player_sprite_->getVelY() * -0.5f); player_sprite_->setVelX(player_sprite_->getVelX() * 0.75f); - playRandomBubbleSound(); + playJumpingSound(); } } break; @@ -546,6 +548,7 @@ void Player::setPlayingState(PlayerState state) showing_name_ticks_ = SDL_GetTicks(); setScoreboardMode(ScoreboardMode::SHOW_NAME); Scoreboard::get()->setRecordName(scoreboard_panel_, last_enter_name_); + addScoreToScoreBoard(); break; } case PlayerState::DYING: @@ -780,7 +783,8 @@ void Player::decEnterNameCounter() enter_name_counter_ = param.game.enter_name_seconds; if (playing_state_ == PlayerState::ENTERING_NAME) { - setPlayingState(PlayerState::CONTINUE); + last_enter_name_ = getRecordName(); + setPlayingState(PlayerState::SHOWING_NAME); } else { @@ -809,9 +813,16 @@ void Player::shiftSprite() } // Hace sonar un ruido al azar -void Player::playRandomBubbleSound() +void Player::playJumpingSound() { - // const std::vector sounds = {"bubble1.wav", "bubble2.wav", "bubble3.wav", "bubble4.wav"}; - // Audio::get()->playSound(sounds.at(rand() % sounds.size())); Audio::get()->playSound("jump.wav"); +} + +// Añade una puntuación a la tabla de records +void Player::addScoreToScoreBoard() +{ + const auto entry = HiScoreEntry(trim(getLastEnterName()), getScore(), get1CC()); + auto manager = std::make_unique(Options::settings.hi_score_table); + Options::settings.last_hi_score_entry.at(getId() - 1) = manager->add(entry); + manager->saveToFile(Asset::get()->get("score.bin")); } \ No newline at end of file diff --git a/source/player.h b/source/player.h index 891183f..4bf9522 100644 --- a/source/player.h +++ b/source/player.h @@ -210,6 +210,7 @@ private: void decEnterNameCounter(); // Decrementa el contador de entrar nombre void updateScoreboard(); // Actualiza el panel del marcador void setScoreboardMode(ScoreboardMode mode); // Cambia el modo del marcador - void playRandomBubbleSound(); // Hace sonar un sonido aleatorio + void playJumpingSound(); // Hace sonar un sonido aleatorio bool isRenderable() const { return !isWaiting() && !isGameOver(); } + void addScoreToScoreBoard(); // Añade una puntuación a la tabla de records }; \ No newline at end of file diff --git a/source/sections/game.cpp b/source/sections/game.cpp index b0dec14..aed3103 100644 --- a/source/sections/game.cpp +++ b/source/sections/game.cpp @@ -18,7 +18,8 @@ #include "global_inputs.h" // Para check, update #include "input.h" // Para InputAction, Input, INPUT_DO_NOT_A... #include "item.h" // Para Item, ItemType -#include "audio.h" // Para Audio::icStateplaynclude "lang.h" // Para getText +#include "audio.h" // Para Audio +#include "lang.h" // Para getText #include "manage_hiscore_table.h" // Para ManageHiScoreTable, HiScoreEntry #include "notifier.h" // Para Notifier #include "param.h" // Para Param, param, ParamGame, ParamFade @@ -183,6 +184,8 @@ void Game::setResources() // Actualiza el valor de hiScore en caso necesario void Game::updateHiScore() { + hi_score_.name = Options::settings.hi_score_table.front().name; + // Si la puntuación actual es mayor que la máxima puntuación for (const auto &player : players_) { @@ -191,7 +194,6 @@ void Game::updateHiScore() // Actualiza la máxima puntuación hi_score_.score = player->getScore(); hi_score_.name.clear(); - ; // Si se supera la máxima puntuación emite sonido if (hi_score_achieved_ == false)