From ead3265bfcbbe3472d6115e6f46254a31aa5698f Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Wed, 29 Oct 2025 10:58:37 +0100 Subject: [PATCH] =?UTF-8?q?style:=20arreglades=20cap=C3=A7aleres?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/core/system/director.cpp | 4 +- source/game/scenes/credits.hpp | 50 ++++------ source/game/scenes/ending.hpp | 76 +++++---------- source/game/scenes/ending2.hpp | 100 ++++++------------- source/game/scenes/game.cpp | 18 ++-- source/game/scenes/game.hpp | 167 ++++++++++---------------------- 6 files changed, 138 insertions(+), 277 deletions(-) diff --git a/source/core/system/director.cpp b/source/core/system/director.cpp index 6d55aba..3747886 100644 --- a/source/core/system/director.cpp +++ b/source/core/system/director.cpp @@ -497,7 +497,7 @@ void Director::runCredits() { // Ejecuta la seccion de la demo, donde se ven pantallas del juego void Director::runDemo() { - auto game = std::make_unique(GameMode::DEMO); + auto game = std::make_unique(Game::Mode::DEMO); game->run(); } @@ -522,7 +522,7 @@ void Director::runGameOver() { // Ejecuta la seccion de juego donde se juega void Director::runGame() { Audio::get()->stopMusic(); - auto game = std::make_unique(GameMode::GAME); + auto game = std::make_unique(Game::Mode::GAME); game->run(); } diff --git a/source/game/scenes/credits.hpp b/source/game/scenes/credits.hpp index 7b5c921..c6a11fe 100644 --- a/source/game/scenes/credits.hpp +++ b/source/game/scenes/credits.hpp @@ -9,52 +9,38 @@ class SurfaceAnimatedSprite; // lines 11-11 class Surface; class Credits { + public: + // --- Constructor y Destructor --- + Credits(); + ~Credits() = default; + + // --- Bucle principal --- + void run(); + private: struct Captions { std::string label; // Texto a escribir Uint8 color; // Color del texto }; - // Objetos y punteros + // --- Objetos y punteros --- std::shared_ptr text_surface_; // Textura para dibujar el texto std::shared_ptr cover_surface_; // Textura para cubrir el texto std::shared_ptr shining_sprite_; // Sprite para el brillo del corazón - // Variables + // --- Variables --- int counter_ = 0; // Contador bool counter_enabled_ = true; // Indica si esta activo el contador int sub_counter_ = 0; // Contador secundario Uint32 ticks_ = 0; // Contador de ticks para ajustar la velocidad del programa std::vector texts_; // Vector con los textos - // Actualiza las variables - void update(); - - // Dibuja en pantalla - void render(); - - // Comprueba el manejador de eventos - static void checkEvents(); - - // Comprueba las entradas - static void checkInput(); - - // Actualiza el contador - void updateCounter(); - - // Inicializa los textos - void iniTexts(); - - // Escribe el texto en la textura - void fillTexture(); - - public: - // Constructor - Credits(); - - // Destructor - ~Credits() = default; - - // Bucle principal - void run(); + // --- Funciones --- + void update(); // Actualiza las variables + void render(); // Dibuja en pantalla + static void checkEvents(); // Comprueba el manejador de eventos + static void checkInput(); // Comprueba las entradas + void updateCounter(); // Actualiza el contador + void iniTexts(); // Inicializa los textos + void fillTexture(); // Escribe el texto en la textura }; diff --git a/source/game/scenes/ending.hpp b/source/game/scenes/ending.hpp index dc334a2..d1cc1a8 100644 --- a/source/game/scenes/ending.hpp +++ b/source/game/scenes/ending.hpp @@ -9,8 +9,16 @@ class SurfaceSprite; // lines 8-8 class Surface; // lines 9-9 class Ending { + public: + // --- Constructor y Destructor --- + Ending(); + ~Ending() = default; + + // --- Bucle principal --- + void run(); + private: - // Estructuras + // --- Estructuras --- struct EndingSurface // Estructura con dos texturas y sprites, uno para mostrar y el otro hace de cortinilla { std::shared_ptr image_surface; // Surface a mostrar @@ -39,10 +47,10 @@ class Ending { int counter_end; // Valor del contador en el que finaliza la escena }; - // Objetos y punteros + // --- Objetos y punteros --- std::shared_ptr cover_surface_; // Surface para cubrir el texto - // Variables + // --- Variables --- int counter_; // Contador int pre_counter_; // Contador previo int cover_counter_; // Contador para la cortinilla @@ -52,52 +60,18 @@ class Ending { int current_scene_; // Escena actual std::vector scenes_; // Vector con los textos e imagenes de cada escena - // Actualiza el objeto - void update(); - - // Dibuja el final en pantalla - void render(); - - // Comprueba el manejador de eventos - static void checkEvents(); - - // Comprueba las entradas - static void checkInput(); - - // Inicializa los textos - void iniTexts(); - - // Inicializa las imagenes - void iniPics(); - - // Inicializa las escenas - void iniScenes(); - - // Actualiza los contadores - void updateCounters(); - - // Actualiza las cortinillas de los elementos - void updateSpriteCovers(); - - // Comprueba si se ha de cambiar de escena - void checkChangeScene(); - - // Rellena la textura para la cortinilla - void fillCoverTexture(); - - // Dibuja la cortinilla de cambio de escena - void renderCoverTexture(); - - // Actualiza el volumen de la musica - void updateMusicVolume() const; - - public: - // Constructor - Ending(); - - // Destructor - ~Ending() = default; - - // Bucle principal - void run(); + // --- Funciones --- + void update(); // Actualiza el objeto + void render(); // Dibuja el final en pantalla + static void checkEvents(); // Comprueba el manejador de eventos + static void checkInput(); // Comprueba las entradas + void iniTexts(); // Inicializa los textos + void iniPics(); // Inicializa las imagenes + void iniScenes(); // Inicializa las escenas + void updateCounters(); // Actualiza los contadores + void updateSpriteCovers(); // Actualiza las cortinillas de los elementos + void checkChangeScene(); // Comprueba si se ha de cambiar de escena + void fillCoverTexture(); // Rellena la textura para la cortinilla + void renderCoverTexture(); // Dibuja la cortinilla de cambio de escena + void updateMusicVolume() const; // Actualiza el volumen de la musica }; \ No newline at end of file diff --git a/source/game/scenes/ending2.hpp b/source/game/scenes/ending2.hpp index 4259459..2e5d64d 100644 --- a/source/game/scenes/ending2.hpp +++ b/source/game/scenes/ending2.hpp @@ -11,8 +11,16 @@ class SurfaceAnimatedSprite; // lines 9-9 class SurfaceMovingSprite; // lines 10-10 class Ending2 { + public: + // --- Constructor y Destructor --- --- + Ending2(); + ~Ending2() = default; + + // --- Bucle principal --- + void run(); + private: - // Enum para representar los estados del final + // --- Enum para representar los estados del final --- enum class EndingState : int { PRE_CREDITS, // Estado previo a los créditos CREDITS, // Estado de los créditos @@ -20,7 +28,7 @@ class Ending2 { FADING, // Estado de fundido de los textos a negrp }; - // Estructura para controlar los estados y su duración + // --- Estructura para controlar los estados y su duración --- struct State { EndingState state; // Estado actual Uint32 init_ticks; // Ticks en los que se inicializó el estado @@ -51,7 +59,7 @@ class Ending2 { } }; - // Constantes + // --- Constantes --- static constexpr int FIRST_COL = GAMECANVAS_FIRST_QUARTER_X + (GAMECANVAS_WIDTH / 16); // Primera columna por donde desfilan los sprites static constexpr int SECOND_COL = GAMECANVAS_THIRD_QUARTER_X - (GAMECANVAS_WIDTH / 16); // Segunda columna por donde desfilan los sprites static constexpr int DIST_SPRITE_TEXT = 8; // Distancia entre el sprite y el texto que lo acompaña @@ -61,12 +69,12 @@ class Ending2 { static constexpr int STATE_POST_CREDITS_DURATION = 5000; static constexpr int STATE_FADE_DURATION = 5000; - // Objetos y punteros + // --- Objetos y punteros --- std::vector> sprites_; // Vector con todos los sprites a dibujar std::vector> sprite_texts_; // Vector con los sprites de texto de los sprites std::vector> texts_; // Vector con los sprites de texto - // Variables + // --- Variables --- Uint32 ticks_ = 0; // Contador de ticks para ajustar la velocidad del programa std::vector sprite_list_; // Lista con todos los sprites a dibujar std::vector colors_; // Vector con los colores para el fade @@ -74,67 +82,23 @@ class Ending2 { float sprite_max_height_ = 0; // El valor de alto del sprite mas alto State state_; // Controla el estado de la clase - // Actualiza el objeto - void update(); - - // Dibuja el final en pantalla - void render(); - - // Comprueba el manejador de eventos - static void checkEvents(); - - // Comprueba las entradas - static void checkInput(); - - // Actualiza el estado - void updateState(); - - // Inicializa la lista de sprites - void iniSpriteList(); - - // Carga todos los sprites desde una lista - void loadSprites(); - - // Actualiza los sprites - void updateSprites(); - - // Actualiza los sprites de texto - void updateTextSprites(); - - // Actualiza los sprites de texto del final - void updateTexts(); - - // Dibuja los sprites - void renderSprites(); - - // Dibuja los sprites con el texto - void renderSpriteTexts(); - - // Dibuja los sprites con el texto del final - void renderTexts(); - - // Coloca los sprites en su sito - void placeSprites(); - - // Crea los sprites con las texturas con los textos - void createSpriteTexts(); - - // Crea los sprites con las texturas con los textos del final - void createTexts(); - - // Actualiza el fade final - void updateFinalFade(); - - // Actualiza el volumen de la musica - void updateMusicVolume() const; - - public: - // Constructor - Ending2(); - - // Destructor - ~Ending2() = default; - - // Bucle principal - void run(); + // --- Fucniones --- + void update(); // Actualiza el objeto + void render(); // Dibuja el final en pantalla + static void checkEvents(); // Comprueba el manejador de eventos + static void checkInput(); // Comprueba las entradas + void updateState(); // Actualiza el estado + void iniSpriteList(); // Inicializa la lista de sprites + void loadSprites(); // Carga todos los sprites desde una lista + void updateSprites(); // Actualiza los sprites + void updateTextSprites(); // Actualiza los sprites de texto + void updateTexts(); // Actualiza los sprites de texto del final + void renderSprites(); // Dibuja los sprites + void renderSpriteTexts(); // Dibuja los sprites con el texto + void renderTexts(); // Dibuja los sprites con el texto del final + void placeSprites(); // Coloca los sprites en su sito + void createSpriteTexts(); // Crea los sprites con las texturas con los textos + void createTexts(); // Crea los sprites con las texturas con los textos del final + void updateFinalFade(); // Actualiza el fade final + void updateMusicVolume() const; // Actualiza el volumen de la musica }; diff --git a/source/game/scenes/game.cpp b/source/game/scenes/game.cpp index d5f94e4..96f2246 100644 --- a/source/game/scenes/game.cpp +++ b/source/game/scenes/game.cpp @@ -28,7 +28,7 @@ #include "utils/utils.hpp" // Para PaletteColor, stringToColor // Constructor -Game::Game(GameMode mode) +Game::Game(Mode mode) : board_(std::make_shared(0, 9, 0, true, 0, SDL_GetTicks(), Options::cheats.jail_is_open == Options::Cheat::State::ENABLED)), scoreboard_(std::make_shared(board_)), room_tracker_(std::make_shared()), @@ -60,7 +60,7 @@ Game::Game(GameMode mode) Cheevos::get()->enable(!Options::cheats.enabled()); // Deshabilita los logros si hay trucos activados Cheevos::get()->clearUnobtainableState(); - SceneManager::current = (mode_ == GameMode::GAME) ? SceneManager::Scene::GAME : SceneManager::Scene::DEMO; + SceneManager::current = (mode_ == Mode::GAME) ? SceneManager::Scene::GAME : SceneManager::Scene::DEMO; SceneManager::options = SceneManager::Options::NONE; } @@ -98,7 +98,7 @@ void Game::checkInput() { // Bucle para el juego void Game::run() { keepMusicPlaying(); - if (!board_->music && mode_ == GameMode::GAME) { + if (!board_->music && mode_ == Mode::GAME) { JA_PauseMusic(); } @@ -108,7 +108,7 @@ void Game::run() { render(); } - if (mode_ == GameMode::GAME) { + if (mode_ == Mode::GAME) { JA_StopMusic(); } } @@ -127,7 +127,7 @@ void Game::update() { // Actualiza los objetos room_->update(DELTA_TIME); - if (mode_ == GameMode::GAME) { + if (mode_ == Mode::GAME) { player_->update(DELTA_TIME); checkPlayerIsOnBorder(); checkPlayerAndItems(); @@ -159,7 +159,7 @@ void Game::render() { room_->renderMap(); room_->renderEnemies(); room_->renderItems(); - if (mode_ == GameMode::GAME) { + if (mode_ == Mode::GAME) { player_->render(); } renderRoomName(); @@ -584,7 +584,7 @@ void Game::createRoomNameTexture() { // Hace sonar la música void Game::keepMusicPlaying() { - const std::string MUSIC_PATH = mode_ == GameMode::GAME ? "game.ogg" : "title.ogg"; + const std::string MUSIC_PATH = mode_ == Mode::GAME ? "game.ogg" : "title.ogg"; // Si la música no está sonando if (JA_GetMusicState() == JA_MUSIC_INVALID || JA_GetMusicState() == JA_MUSIC_STOPPED) { @@ -594,7 +594,7 @@ void Game::keepMusicPlaying() { // DEMO MODE: Inicializa las variables para el modo demo void Game::demoInit() { - if (mode_ == GameMode::DEMO) { + if (mode_ == Mode::DEMO) { demo_ = DemoData(0.0F, 0, {"04.room", "54.room", "20.room", "09.room", "05.room", "11.room", "31.room", "44.room"}); current_room_ = demo_.rooms.front(); } @@ -602,7 +602,7 @@ void Game::demoInit() { // DEMO MODE: Comprueba si se ha de cambiar de habitación void Game::demoCheckRoomChange(float delta_time) { - if (mode_ == GameMode::DEMO) { + if (mode_ == Mode::DEMO) { demo_.time_accumulator += delta_time; if (demo_.time_accumulator >= DEMO_ROOM_DURATION) { demo_.time_accumulator = 0.0F; diff --git a/source/game/scenes/game.hpp b/source/game/scenes/game.hpp index 603a303..4fe5dfe 100644 --- a/source/game/scenes/game.hpp +++ b/source/game/scenes/game.hpp @@ -16,20 +16,29 @@ class Stats; // lines 15-15 class Surface; struct ScoreboardData; // lines 16-16 -enum class GameMode { - DEMO, - GAME -}; - class Game { + public: + // --- Estructuras --- + enum class Mode { + DEMO, + GAME + }; + + // --- Constructor y Destructor --- + explicit Game(Mode mode); + ~Game(); + + // --- Bucle para el juego --- + void run(); + private: - // Constantes de tiempo + // --- Constantes de tiempo --- static constexpr float BLACK_SCREEN_DURATION = 0.30F; // Duración de la pantalla negra en segundos (20 frames a 66.67fps) static constexpr float GAME_OVER_THRESHOLD = 0.255F; // Tiempo antes del game over en segundos (17 frames a 66.67fps) static constexpr float DEMO_ROOM_DURATION = 6.0F; // Duración de cada habitación en modo demo en segundos (400 frames) static constexpr float JAIL_RESTORE_INTERVAL = 1.5F; // Intervalo de restauración de vidas en la Jail en segundos (100 frames) - // Estructuras + // --- Estructuras --- struct DemoData { float time_accumulator; // Acumulador de tiempo para el modo demo int room_index; // Índice para el vector de habitaciones @@ -48,7 +57,7 @@ class Game { rooms(rooms) {} }; - // Objetos y punteros + // --- Objetos y punteros --- std::shared_ptr board_; // Estructura con los datos del marcador std::shared_ptr scoreboard_; // Objeto encargado de gestionar el marcador std::shared_ptr room_tracker_; // Lleva el control de las habitaciones visitadas @@ -57,8 +66,8 @@ class Game { std::shared_ptr stats_; // Objeto encargado de gestionar las estadísticas std::shared_ptr room_name_surface_; // Textura para escribir el nombre de la habitación - // Variables - GameMode mode_; // Modo del juego + // --- Variables --- + Mode mode_; // Modo del juego DemoData demo_; // Variables para el modo demo DeltaTimer delta_timer_; // Timer para calcular delta time std::string current_room_; // Fichero de la habitación actual @@ -70,111 +79,39 @@ class Game { SDL_FRect room_name_rect_; // Rectangulo donde pintar la textura con el nombre de la habitación float jail_restore_time_ = 0.0F; // Tiempo acumulado para restauración de vidas en la Jail - // Actualiza el juego, las variables, comprueba la entrada, etc. - void update(); - - // Pinta los objetos en pantalla - void render(); - - // Comprueba los eventos de la cola - void checkEvents(); - + // --- Funciones --- + void update(); // Actualiza el juego, las variables, comprueba la entrada, etc. + void render(); // Pinta los objetos en pantalla + void checkEvents(); // Comprueba los eventos de la cola + void renderRoomName(); // Escribe el nombre de la pantalla + auto changeRoom(const std::string& room_path) -> bool; // Cambia de habitación + void checkInput(); // Comprueba el teclado + void checkPlayerIsOnBorder(); // Comprueba si el jugador esta en el borde de la pantalla y actua + auto checkPlayerAndEnemies() -> bool; // Comprueba las colisiones del jugador con los enemigos + void checkPlayerAndItems(); // Comprueba las colisiones del jugador con los objetos + void checkIfPlayerIsAlive(); // Comprueba si el jugador esta vivo + void checkGameOver(); // Comprueba si ha terminado la partida + void killPlayer(); // Mata al jugador + void setBlackScreen(); // Establece la pantalla en negro + void updateBlackScreen(float delta_time); // Actualiza las variables relativas a la pantalla en negro + void renderBlackScreen() const; // Dibuja la pantalla negra + void setScoreBoardColor(); // Pone el color del marcador en función del color del borde de la habitación + auto checkEndGame() -> bool; // Comprueba si ha finalizado el juego + static auto getTotalItems() -> int; // Obtiene la cantidad total de items que hay en el mapeado del juego + void togglePause(); // Pone el juego en pausa + void checkRestoringJail(float delta_time); // Da vidas al jugador cuando está en la Jail + void initStats(); // Inicializa el diccionario de las estadísticas + void fillRoomNameTexture(); // Pone el nombre de la habitación en la textura + void checkSomeCheevos(); // Comprueba algunos logros + void checkEndGameCheevos(); // Comprueba los logros de completar el juego + void initPlayer(const Player::SpawnData& spawn_point, std::shared_ptr room); // Inicializa al jugador + void createRoomNameTexture(); // Crea la textura para poner el nombre de la habitación + void keepMusicPlaying(); // Hace sonar la música + void demoInit(); // DEMO MODE: Inicializa las variables para el modo demo + void demoCheckRoomChange(float delta_time); // DEMO MODE: Comprueba si se ha de cambiar de habitación #ifdef _DEBUG - // Pone la información de debug en pantalla - void updateDebugInfo(); - - // Pone la información de debug en pantalla - static void renderDebugInfo(); - - // Comprueba los eventos - void checkDebugEvents(const SDL_Event& event); + void updateDebugInfo(); // Pone la información de debug en pantalla + static void renderDebugInfo(); // Pone la información de debug en pantalla + void checkDebugEvents(const SDL_Event& event); // Comprueba los eventos #endif - - // Escribe el nombre de la pantalla - void renderRoomName(); - - // Cambia de habitación - auto changeRoom(const std::string& room_path) -> bool; - - // Comprueba el teclado - void checkInput(); - - // Comprueba si el jugador esta en el borde de la pantalla y actua - void checkPlayerIsOnBorder(); - - // Comprueba las colisiones del jugador con los enemigos - auto checkPlayerAndEnemies() -> bool; - - // Comprueba las colisiones del jugador con los objetos - void checkPlayerAndItems(); - - // Comprueba si el jugador esta vivo - void checkIfPlayerIsAlive(); - - // Comprueba si ha terminado la partida - void checkGameOver(); - - // Mata al jugador - void killPlayer(); - - // Establece la pantalla en negro - void setBlackScreen(); - - // Actualiza las variables relativas a la pantalla en negro - void updateBlackScreen(float delta_time); - - // Dibuja la pantalla negra - void renderBlackScreen() const; - - // Pone el color del marcador en función del color del borde de la habitación - void setScoreBoardColor(); - - // Comprueba si ha finalizado el juego - auto checkEndGame() -> bool; - - // Obtiene la cantidad total de items que hay en el mapeado del juego - static auto getTotalItems() -> int; - - // Pone el juego en pausa - void togglePause(); - - // Da vidas al jugador cuando está en la Jail - void checkRestoringJail(float delta_time); - - // Inicializa el diccionario de las estadísticas - void initStats(); - - // Pone el nombre de la habitación en la textura - void fillRoomNameTexture(); - - // Comprueba algunos logros - void checkSomeCheevos(); - - // Comprueba los logros de completar el juego - void checkEndGameCheevos(); - - // Inicializa al jugador - void initPlayer(const Player::SpawnData& spawn_point, std::shared_ptr room); - - // Crea la textura para poner el nombre de la habitación - void createRoomNameTexture(); - - // Hace sonar la música - void keepMusicPlaying(); - - // DEMO MODE: Inicializa las variables para el modo demo - void demoInit(); - - // DEMO MODE: Comprueba si se ha de cambiar de habitación - void demoCheckRoomChange(float delta_time); - - public: - // Constructor - explicit Game(GameMode mode); - - // Destructor - ~Game(); - - // Bucle para el juego - void run(); }; \ No newline at end of file