From 24556eeaa8f8fba1afe27142b5b710153503b2f1 Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Wed, 16 Oct 2024 09:18:22 +0200 Subject: [PATCH] Implementat contador per a posar el nom al acabar la partida --- data/config/param_320x240.txt | 15 ++++++++------- data/config/param_320x256.txt | 15 ++++++++------- source/param.cpp | 5 +++++ source/player.cpp | 31 ++++++++++++++++++++++++++++++- source/player.h | 28 ++++++++++++++++++---------- source/utils.h | 11 ++++++----- 6 files changed, 75 insertions(+), 30 deletions(-) diff --git a/data/config/param_320x240.txt b/data/config/param_320x240.txt index 0df82af..da674f8 100644 --- a/data/config/param_320x240.txt +++ b/data/config/param_320x240.txt @@ -1,11 +1,12 @@ ## GAME -game.item_size 20 -game.width 320 -game.height 240 -game.play_area.rect.x 0 -game.play_area.rect.y 0 -game.play_area.rect.w 320 -game.play_area.rect.h 200 +game.item_size 20 # Tamaño de los items del juego +game.width 320 # Ancho de la resolucion nativa del juego +game.height 240 # Alto de la resolucion nativa del juego +game.play_area.rect.x 0 # Rectangulo con la posición de la zona de juego +game.play_area.rect.y 0 # Rectangulo con la posición de la zona de juego +game.play_area.rect.w 320 # Rectangulo con la posición de la zona de juego +game.play_area.rect.h 200 # Rectangulo con la posición de la zona de juego +game.enter_name_seconds 30 # Duración en segundos para introducir el nombre al finalizar la partida ## FADE fade.num_squares_width 160 diff --git a/data/config/param_320x256.txt b/data/config/param_320x256.txt index 2eeb011..040e23b 100644 --- a/data/config/param_320x256.txt +++ b/data/config/param_320x256.txt @@ -1,11 +1,12 @@ ## GAME -game.item_size 20 -game.width 320 -game.height 256 -game.play_area.rect.x 0 -game.play_area.rect.y 0 -game.play_area.rect.w 320 -game.play_area.rect.h 216 +game.item_size 20 # Tamaño de los items del juego +game.width 320 # Ancho de la resolucion nativa del juego +game.height 256 # Alto de la resolucion nativa del juego +game.play_area.rect.x 0 # Rectangulo con la posición de la zona de juego +game.play_area.rect.y 0 # Rectangulo con la posición de la zona de juego +game.play_area.rect.w 320 # Rectangulo con la posición de la zona de juego +game.play_area.rect.h 216 # Rectangulo con la posición de la zona de juego +game.enter_name_seconds 30 # Duración en segundos para introducir el nombre al finalizar la partida ## FADE fade.num_squares_width 160 diff --git a/source/param.cpp b/source/param.cpp index e4a9aa0..39f8c28 100644 --- a/source/param.cpp +++ b/source/param.cpp @@ -255,6 +255,11 @@ bool setParams(const std::string &var, const std::string &value) param.game.play_area.rect.h = std::stoi(value); } + else if (var == "game.enter_name_seconds") + { + param.game.enter_name_seconds = std::stoi(value); + } + // FADE else if (var == "fade.num_squares_width") { diff --git a/source/player.cpp b/source/player.cpp index 3f85476..6cc8a5b 100644 --- a/source/player.cpp +++ b/source/player.cpp @@ -55,7 +55,9 @@ void Player::init() coffees_ = 0; input_ = true; continue_ticks_ = 0; - continue_counter_ = 20; + continue_counter_ = 10; + enter_name_ticks_ = 0; + enter_name_counter_ = param.game.enter_name_seconds; width_ = 30; height_ = 30; collider_.r = 9; @@ -347,6 +349,7 @@ void Player::update() updatePowerUpCounter(); updateInvulnerable(); updateContinueCounter(); + updateEnterNameCounter(); updateScoreboard(); } @@ -711,6 +714,20 @@ void Player::updateContinueCounter() } } +// Actualiza el contador de entrar nombre +void Player::updateEnterNameCounter() +{ + if (status_playing_ == PlayerStatus::ENTERING_NAME) + { + constexpr Uint32 ticks_speed = 1000; + + if (SDL_GetTicks() - enter_name_ticks_ > ticks_speed) + { + decEnterNameCounter(); + } + } +} + // Le asigna un panel en el marcador al jugador void Player::setScoreBoardPanel(int panel) { @@ -734,6 +751,18 @@ void Player::decContinueCounter() } } +// Decrementa el contador de entrar nombre +void Player::decEnterNameCounter() +{ + enter_name_ticks_ = SDL_GetTicks(); + --enter_name_counter_; + if (enter_name_counter_ < 0) + { + enter_name_counter_ = param.game.enter_name_seconds; + setStatusPlaying(PlayerStatus::CONTINUE); + } +} + // Establece el nombre del jugador void Player::setName(const std::string &name) { diff --git a/source/player.h b/source/player.h index fc28b1f..c9176e4 100644 --- a/source/player.h +++ b/source/player.h @@ -1,16 +1,16 @@ #pragma once -#include // for SDL_Rect -#include // for Uint32 -#include // for unique_ptr, shared_ptr -#include // for string -#include // for vector -#include "animated_sprite.h" // for AnimatedSprite -#include "enter_name.h" // for EnterName -#include "utils.h" // for Circle +#include // for SDL_Rect +#include // for Uint32 +#include // for unique_ptr, shared_ptr +#include // for string +#include // for vector +#include "animated_sprite.h" // for AnimatedSprite +#include "enter_name.h" // for EnterName +#include "utils.h" // for Circle class Texture; enum class InputType : int; -enum class ScoreboardMode; // lines 12-12 +enum class ScoreboardMode; // lines 12-12 // Estados del jugador enum class PlayerStatus @@ -77,9 +77,11 @@ private: Uint32 continue_ticks_; // Variable para poder cambiar el contador de continue en función del tiempo int scoreboard_panel_; // Panel del marcador asociado al jugador std::string name_; // Nombre del jugador - std::string record_name_; // Nombre del jugador para l atabla de mejores puntuaciones + std::string record_name_; // Nombre del jugador para la tabla de mejores puntuaciones int controller_index_; // Indice 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_; // Variable para poder cambiar el contador de poner nombre en función del tiempo // Actualiza el circulo de colisión a la posición del jugador void shiftColliders(); @@ -90,6 +92,12 @@ private: // Actualiza el contador de continue void updateContinueCounter(); + // Actualiza el contador de entrar nombre + void updateEnterNameCounter(); + + // Decrementa el contador de entrar nombre + void decEnterNameCounter(); + // Indica si el jugador se puede dibujar bool isRenderable() const; diff --git a/source/utils.h b/source/utils.h index 801c3e4..3607b83 100644 --- a/source/utils.h +++ b/source/utils.h @@ -152,11 +152,12 @@ struct Zone // param.game struct ParamGame { - int width; // Ancho de la resolucion nativa del juego - int height; // Alto de la resolucion nativa del juego - int item_size; // Tamaño de los items del juego - Zone play_area; // Rectangulo con la posición de la zona de juego - Zone game_area; // Rectangulo con las dimensiones del juego + int width; // Ancho de la resolucion nativa del juego + int height; // Alto de la resolucion nativa del juego + int item_size; // Tamaño de los items del juego + Zone play_area; // Rectangulo con la posición de la zona de juego + Zone game_area; // Rectangulo con las dimensiones del juego + int enter_name_seconds; // Duración en segundos para introducir el nombre al finalizar la partida }; // param.fade