From 8af6d4ef2802625bb47535b5c3fa40919dd4fadb Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Sat, 28 Jun 2025 09:53:22 +0200 Subject: [PATCH] fix: si deixaves el nom en blanc, t'asigna uno de un pool pero despres no arribava a la tabla style: quan confirmes el nom, apareix centrat --- source/director.cpp | 2 +- source/game.cpp | 2 +- source/intro.cpp | 9 -- source/player.h | 206 +++++++++++++++++++++--------------------- source/scoreboard.cpp | 5 +- 5 files changed, 110 insertions(+), 114 deletions(-) diff --git a/source/director.cpp b/source/director.cpp index 0fae52a..63f65ca 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -49,7 +49,7 @@ Director::Director(int argc, const char *argv[]) Section::name = Section::Name::GAME; Section::options = Section::Options::GAME_PLAY_1P; #elif DEBUG - Section::name = Section::Name::LOGO; + Section::name = Section::Name::GAME; Section::options = Section::Options::GAME_PLAY_1P; #else // NORMAL GAME Section::name = Section::Name::LOGO; diff --git a/source/game.cpp b/source/game.cpp index a6e99b8..95bed0e 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -1261,7 +1261,7 @@ void Game::pause(bool value) // Añade una puntuación a la tabla de records void Game::addScoreToScoreBoard(const std::shared_ptr &player) { - const auto entry = HiScoreEntry(trim(player->getRecordName()), player->getScore(), player->get1CC()); + const auto entry = HiScoreEntry(trim(player->getLastEnterName()), player->getScore(), player->get1CC()); auto manager = std::make_unique(Options::settings.hi_score_table); Options::settings.last_hi_score_entry.at(player->getId() - 1) = manager->add(entry); manager->saveToFile(Asset::get()->get("score.bin")); diff --git a/source/intro.cpp b/source/intro.cpp index 4b68c09..b65a4a2 100644 --- a/source/intro.cpp +++ b/source/intro.cpp @@ -362,15 +362,6 @@ void Intro::initSprites() SDL_RenderRect(Screen::get()->getRenderer(), &rect1); SDL_RenderRect(Screen::get()->getRenderer(), &rect2); - // Copia la textura con el dibujo sobre la textura de color aplicando blend modes - // SDL_FRect rect = {BORDER / 2, BORDER / 2, SPRITE_WIDTH, SPRITE_HEIGHT}; - // auto inner_texture = Resource::get()->getTexture(TEXTURE_LIST.at(i))->getSDLTexture(); - // SDL_SetTextureBlendMode(inner_texture, SDL_BLENDMODE_BLEND); - // SDL_SetTextureAlphaMod(inner_texture, 64); - // SDL_RenderTexture(Screen::get()->getRenderer(), inner_texture, nullptr, &rect); - // SDL_SetTextureBlendMode(inner_texture, SDL_BLENDMODE_NONE); - // SDL_SetTextureAlphaMod(inner_texture, 255); - // Deja el renderizador como estaba y añade la textura a la lista SDL_SetRenderTarget(Screen::get()->getRenderer(), temp); shadow_textures.push_back(shadow_texture); diff --git a/source/player.h b/source/player.h index bc88c1a..042b61b 100644 --- a/source/player.h +++ b/source/player.h @@ -1,49 +1,52 @@ #pragma once -#include // Para SDL_FRect -#include // Para Uint32 -#include // Para unique_ptr, shared_ptr -#include // Para string -#include // Para vector -#include "animated_sprite.h" // Para AnimatedSprite -#include "enter_name.h" // Para EnterName -#include "manage_hiscore_table.h" // Para HiScoreEntry -#include "options.h" // Para Options, OptionsGame, options -#include "utils.h" // Para Circle +#include // Para SDL_FRect +#include // Para Uint32 +#include // Para unique_ptr, shared_ptr +#include // Para string +#include // Para vector +#include "animated_sprite.h" // Para AnimatedSprite +#include "enter_name.h" // Para EnterName +#include "options.h" // Para Options, OptionsGame, options +#include "utils.h" // Para Circle class Texture; enum class InputAction : int; enum class ScoreboardMode; -// --- Estados del jugador --- +// --- Estados posibles del jugador --- enum class PlayerState { - WALKING_LEFT, - WALKING_RIGHT, - WALKING_STOP, + // Estados de movimiento + WALKING_LEFT, // Caminando hacia la izquierda + WALKING_RIGHT, // Caminando hacia la derecha + WALKING_STOP, // Parado, sin moverse - FIRING_UP, - FIRING_LEFT, - FIRING_RIGHT, - FIRING_NONE, + // Estados de disparo + FIRING_UP, // Disparando hacia arriba + FIRING_LEFT, // Disparando hacia la izquierda + FIRING_RIGHT, // Disparando hacia la derecha + FIRING_NONE, // No está disparando - COOLING_UP, - COOLING_LEFT, - COOLING_RIGHT, + // Estados de enfriamiento tras disparar + COOLING_UP, // Enfriando tras disparar hacia arriba + COOLING_LEFT, // Enfriando tras disparar hacia la izquierda + COOLING_RIGHT, // Enfriando tras disparar hacia la derecha - PLAYING, // Está jugando - CONTINUE, // Cuenta atrás para continuar - WAITING, // No está jugando pero puede entrar a jugar - ENTERING_NAME, // Introduciendo nombre - SHOWING_NAME, // Mostrando el nombre introducido - DYING, // El cadáver está volando por ahí - DIED, // El cadáver ha desaparecido por el fondo - GAME_OVER, // No está jugando y no puede entrar a jugar - CELEBRATING, // Poniendo pose de victoria - ENTERING_NAME_GAME_COMPLETED, // Poniendo nombre en el tramo final del juego - LEAVING_SCREEN, // Moviéndose fuera de la pantalla - ENTERING_SCREEN, // Entrando a la pantalla - CREDITS, // Estado para los créditos del juego + // Estados generales de juego + PLAYING, // Está jugando activamente + CONTINUE, // Cuenta atrás para continuar tras perder + WAITING, // Esperando para entrar a jugar + ENTERING_NAME, // Introduciendo nombre para la tabla de puntuaciones + SHOWING_NAME, // Mostrando el nombre introducido + DYING, // El jugador está muriendo (animación de muerte) + DIED, // El jugador ha muerto y ha desaparecido + GAME_OVER, // Fin de la partida, no puede jugar + CELEBRATING, // Celebrando victoria (pose de victoria) + ENTERING_NAME_GAME_COMPLETED, // Introduciendo nombre tras completar el juego + LEAVING_SCREEN, // Saliendo de la pantalla (animación) + ENTERING_SCREEN, // Entrando a la pantalla (animación) + CREDITS, // Estado para mostrar los créditos del juego }; // --- Clase Player --- @@ -55,38 +58,38 @@ public: ~Player() = default; // --- Inicialización y ciclo de vida --- - void init(); // Inicializa el jugador - void update(); // Actualiza estado, animación y contadores - void render(); // Dibuja el jugador en pantalla + void init(); // Inicializa el jugador + void update(); // Actualiza estado, animación y contadores + void render(); // Dibuja el jugador en pantalla // --- Entrada y control --- - void setInput(InputAction input); // Procesa entrada general - void setInputPlaying(InputAction input); // Procesa entrada en modo jugando - void setInputEnteringName(InputAction input); // Procesa entrada al introducir nombre + void setInput(InputAction input); // Procesa entrada general + void setInputPlaying(InputAction input); // Procesa entrada en modo jugando + void setInputEnteringName(InputAction input); // Procesa entrada al introducir nombre // --- Movimiento y animación --- - void move(); // Mueve el jugador - void setAnimation(); // Establece la animación según el estado + void move(); // Mueve el jugador + void setAnimation(); // Establece la animación según el estado // --- Texturas y animaciones --- void setPlayerTextures(const std::vector> &texture); // Cambia las texturas del jugador // --- Estados y contadores --- - void updateCooldown(); // Actualiza el cooldown de disparo + void updateCooldown(); // Actualiza el cooldown de disparo // --- Puntuación y marcador --- - void addScore(int score); // Añade puntos - void incScoreMultiplier(); // Incrementa el multiplicador - void decScoreMultiplier(); // Decrementa el multiplicador + void addScore(int score); // Añade puntos + void incScoreMultiplier(); // Incrementa el multiplicador + void decScoreMultiplier(); // Decrementa el multiplicador // --- Estados de juego --- - void setPlayingState(PlayerState state); // Cambia el estado de juego - void setInvulnerable(bool value); // Establece el valor del estado de invulnerabilidad - void setPowerUp(); // Activa el modo PowerUp - void updatePowerUp(); // Actualiza el valor de PowerUp - void giveExtraHit(); // Concede un toque extra al jugador - void removeExtraHit(); // Quita el toque extra al jugador - void decContinueCounter(); // Decrementa el contador de continuar + void setPlayingState(PlayerState state); // Cambia el estado de juego + void setInvulnerable(bool value); // Establece el valor del estado de invulnerabilidad + void setPowerUp(); // Activa el modo PowerUp + void updatePowerUp(); // Actualiza el valor de PowerUp + void giveExtraHit(); // Concede un toque extra al jugador + void removeExtraHit(); // Quita el toque extra al jugador + void decContinueCounter(); // Decrementa el contador de continuar // --- Getters y comprobaciones de estado --- int getRecordNamePos() const; // Obtiene la posición que se está editando del nombre del jugador para la tabla de mejores puntuaciones @@ -123,6 +126,7 @@ public: int getPosY() const { return pos_y_; } int getPowerUpCounter() const { return power_up_counter_; } std::string getRecordName() const { return enter_name_ ? enter_name_->getFinalName() : "xxx"; } + std::string getLastEnterName() const { return last_enter_name_; } int getScore() const { return score_; } int getScoreBoardPanel() const { return scoreboard_panel_; } int getWidth() const { return WIDTH_; } @@ -146,11 +150,11 @@ public: private: // --- Constantes --- - static constexpr int POWERUP_COUNTER_ = 1500; // Duración del estado PowerUp - static constexpr int INVULNERABLE_COUNTER_ = 200; // Duración del estado invulnerable - static constexpr int WIDTH_ = 30; // Anchura - static constexpr int HEIGHT_ = 30; // Altura - static constexpr float BASE_SPEED_ = 1.5f; // Velocidad base del jugador + static constexpr int POWERUP_COUNTER_ = 1500; // Duración del estado PowerUp + static constexpr int INVULNERABLE_COUNTER_ = 200; // Duración del estado invulnerable + static constexpr int WIDTH_ = 30; // Anchura + static constexpr int HEIGHT_ = 30; // Altura + static constexpr float BASE_SPEED_ = 1.5f; // Velocidad base del jugador // --- Objetos y punteros --- std::unique_ptr player_sprite_; // Sprite para dibujar el jugador @@ -158,53 +162,53 @@ private: std::unique_ptr enter_name_; // Clase utilizada para introducir el nombre // --- Variables de estado --- - int id_; // Número de identificación para el jugador. Player1 = 1, Player2 = 2 - SDL_FRect play_area_; // Rectángulo con la zona de juego - float pos_x_ = 0.0f; // Posición en el eje X - int pos_y_ = 0; // Posición en el eje Y - float default_pos_x_; // Posición inicial para el jugador - int default_pos_y_; // Posición inicial para el jugador - float vel_x_ = 0.0f; // Cantidad de píxeles a desplazarse en el eje X - int vel_y_ = 0.0f; // Cantidad de píxeles a desplazarse en el eje Y - int cool_down_ = 0; // Contador durante el cual no puede disparar - int cooling_state_counter_ = 0; // Contador para la animación del estado cooling - int score_ = 0; // Puntos del jugador - float score_multiplier_ = 1.0f; // Multiplicador de puntos + int id_; // Número de identificación para el jugador. Player1 = 1, Player2 = 2 + SDL_FRect play_area_; // Rectángulo con la zona de juego + float pos_x_ = 0.0f; // Posición en el eje X + int pos_y_ = 0; // Posición en el eje Y + float default_pos_x_; // Posición inicial para el jugador + int default_pos_y_; // Posición inicial para el jugador + float vel_x_ = 0.0f; // Cantidad de píxeles a desplazarse en el eje X + int vel_y_ = 0.0f; // Cantidad de píxeles a desplazarse en el eje Y + int cool_down_ = 0; // Contador durante el cual no puede disparar + int cooling_state_counter_ = 0; // Contador para la animación del estado cooling + int score_ = 0; // Puntos del jugador + float score_multiplier_ = 1.0f; // Multiplicador de puntos PlayerState walking_state_ = PlayerState::WALKING_STOP; // Estado del jugador al moverse PlayerState firing_state_ = PlayerState::FIRING_NONE; // Estado del jugador al disparar PlayerState playing_state_ = PlayerState::WAITING; // Estado del jugador en el juego - bool invulnerable_ = true; // Indica si el jugador es invulnerable - int invulnerable_counter_ = INVULNERABLE_COUNTER_; // Contador para la invulnerabilidad - bool extra_hit_ = false; // Indica si el jugador tiene un toque extra - int coffees_ = 0; // Indica cuántos cafés lleva acumulados - bool power_up_ = false; // Indica si el jugador tiene activo el modo PowerUp - int power_up_counter_ = POWERUP_COUNTER_; // Temporizador para el modo PowerUp - int power_up_desp_x_ = 0; // Desplazamiento del sprite de PowerUp respecto al sprite del jugador - Circle collider_ = Circle(0, 0, 9); // Círculo de colisión del jugador - int continue_counter_ = 10; // Contador para poder continuar - Uint32 continue_ticks_ = 0; // Variable para poder cambiar el contador de continue en función del tiempo - int scoreboard_panel_ = 0; // Panel del marcador asociado al jugador - std::string name_; // Nombre del jugador - int controller_index_ = 0; // Índice del array de mandos que utilizará para moverse - bool demo_; // Para que el jugador sepa si está en el modo demostración - int enter_name_counter_; // Contador para poner nombre - Uint32 enter_name_ticks_ = 0; // Variable para poder cambiar el contador de poner nombre en función del tiempo - Uint32 showing_name_ticks_ = 0; // Tiempo en el que se entra al estado SHOWING_NAME - int step_counter_ = 0; // Cuenta los pasos para los estados en los que camina automáticamente - bool game_completed_ = false; // Indica si ha completado el juego - int credits_used_ = 1; // Indica el número de veces que ha continuado - std::string last_enter_name_; // Último nombre introducido en la tabla de puntuaciones + bool invulnerable_ = true; // Indica si el jugador es invulnerable + int invulnerable_counter_ = INVULNERABLE_COUNTER_; // Contador para la invulnerabilidad + bool extra_hit_ = false; // Indica si el jugador tiene un toque extra + int coffees_ = 0; // Indica cuántos cafés lleva acumulados + bool power_up_ = false; // Indica si el jugador tiene activo el modo PowerUp + int power_up_counter_ = POWERUP_COUNTER_; // Temporizador para el modo PowerUp + int power_up_desp_x_ = 0; // Desplazamiento del sprite de PowerUp respecto al sprite del jugador + Circle collider_ = Circle(0, 0, 9); // Círculo de colisión del jugador + int continue_counter_ = 10; // Contador para poder continuar + Uint32 continue_ticks_ = 0; // Variable para poder cambiar el contador de continue en función del tiempo + int scoreboard_panel_ = 0; // Panel del marcador asociado al jugador + std::string name_; // Nombre del jugador + int controller_index_ = 0; // Índice del array de mandos que utilizará para moverse + bool demo_; // Para que el jugador sepa si está en el modo demostración + int enter_name_counter_; // Contador para poner nombre + Uint32 enter_name_ticks_ = 0; // Variable para poder cambiar el contador de poner nombre en función del tiempo + Uint32 showing_name_ticks_ = 0; // Tiempo en el que se entra al estado SHOWING_NAME + int step_counter_ = 0; // Cuenta los pasos para los estados en los que camina automáticamente + bool game_completed_ = false; // Indica si ha completado el juego + int credits_used_ = 1; // Indica el número de veces que ha continuado + std::string last_enter_name_; // Último nombre introducido en la tabla de puntuaciones // --- Métodos internos --- - void shiftColliders(); // Actualiza el círculo de colisión a la posición del jugador - void shiftSprite(); // Recoloca el sprite - void updateInvulnerable(); // Monitoriza el estado de invulnerabilidad - void updateContinueCounter(); // Actualiza el contador de continue - void updateEnterNameCounter();// Actualiza el contador de entrar nombre - void updateShowingName(); // Actualiza el estado SHOWING_NAME - void decEnterNameCounter(); // Decrementa el contador de entrar nombre - void updateScoreboard(); // Actualiza el panel del marcador + void shiftColliders(); // Actualiza el círculo de colisión a la posición del jugador + void shiftSprite(); // Recoloca el sprite + void updateInvulnerable(); // Monitoriza el estado de invulnerabilidad + void updateContinueCounter(); // Actualiza el contador de continue + void updateEnterNameCounter(); // Actualiza el contador de entrar nombre + void updateShowingName(); // Actualiza el estado SHOWING_NAME + 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 - bool isRenderable() const { return !isWaiting() && !isGameOver(); } + void playRandomBubbleSound(); // Hace sonar un sonido aleatorio + bool isRenderable() const { return !isWaiting() && !isGameOver(); } }; \ No newline at end of file diff --git a/source/scoreboard.cpp b/source/scoreboard.cpp index be022e3..f784b9f 100644 --- a/source/scoreboard.cpp +++ b/source/scoreboard.cpp @@ -300,11 +300,12 @@ void Scoreboard::fillPanelTextures() // NAME text_scoreboard_->writeDX(TEXT_CENTER | TEXT_COLOR, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 11"), 1, text_color1_); + /* TEXTO CENTRADO */ - // text_scoreboard_->writeDX(TEXT_CENTER | TEXT_COLOR, slot4_4_.x, slot4_4_.y, record_name_[i], 1, getColorLikeKnightRider(name_colors_, loop_counter_ / 5)); + text_scoreboard_->writeDX(TEXT_CENTER | TEXT_COLOR, slot4_4_.x, slot4_4_.y, record_name_[i], 1, getColorLikeKnightRider(name_colors_, loop_counter_ / 5)); /* TEXTO A LA IZQUIERDA */ - text_scoreboard_->writeColored(enter_name_pos_.x, enter_name_pos_.y, record_name_[i], getColorLikeKnightRider(name_colors_, loop_counter_ / 5)); + //text_scoreboard_->writeColored(enter_name_pos_.x, enter_name_pos_.y, record_name_[i], getColorLikeKnightRider(name_colors_, loop_counter_ / 5)); break; } case ScoreboardMode::GAME_COMPLETED: