Afegit dos timeouts per a posar nom: uno total i altre que suma nomes quan no es toca res

This commit is contained in:
2025-07-01 10:56:55 +02:00
parent c00738b8e2
commit 586d5df015
6 changed files with 87 additions and 69 deletions

View File

@@ -1,21 +1,22 @@
## --- GAME --- ## --- GAME ---
game.item_size 20 # Tamaño de los items del juego (en píxeles) game.item_size 20 # Tamaño de los items del juego (en píxeles)
game.width 320 # Ancho de la resolución nativa del juego (en píxeles) game.width 320 # Ancho de la resolución nativa del juego (en píxeles)
game.height 240 # Alto de la resolución nativa del juego (en píxeles) game.height 240 # Alto de la resolución nativa del juego (en píxeles)
game.play_area.rect.x 0 # Posición X de la zona jugable 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.y 0 # Posición Y de la zona jugable
game.play_area.rect.w 320 # Ancho 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.play_area.rect.h 200 # Alto de la zona jugable
game.enter_name_seconds 10 # Segundos para introducir el nombre al finalizar la partida si no se pulsa nada game.name_entry_idle_time 10 # Segundos para introducir el nombre al finalizar la partida si no se pulsa nada
game.name_entry_total_time 60 # Segundos totales para introducir el nombre al finalizar la partida
## --- FADE --- ## --- FADE ---
fade.color 1F2B30 # Color hexadecimal para el efecto de fundido fade.color 1F2B30 # Color hexadecimal para el efecto de fundido
fade.num_squares_width 160 # Número de cuadrados en el eje X para el fundido fade.num_squares_width 160 # Número de cuadrados en el eje X para el fundido
fade.num_squares_height 120 # Número de cuadrados en el eje Y para el fundido fade.num_squares_height 120 # Número de cuadrados en el eje Y para el fundido
fade.random_squares_delay 1 # Delay entre aparición de cuadrados aleatorios (frames) fade.random_squares_delay 1 # Delay entre aparición de cuadrados aleatorios (frames)
fade.random_squares_mult 500 # Multiplicador para la velocidad de aparición aleatoria fade.random_squares_mult 500 # Multiplicador para la velocidad de aparición aleatoria
fade.post_duration 80 # Duración tras el fundido (frames) fade.post_duration 80 # Duración tras el fundido (frames)
fade.venetian_size 12 # Tamaño de las bandas para el efecto veneciano (en píxeles) fade.venetian_size 12 # Tamaño de las bandas para el efecto veneciano (en píxeles)
## --- SCOREBOARD --- ## --- SCOREBOARD ---
scoreboard.rect.x 0 # Posición X del marcador scoreboard.rect.x 0 # Posición X del marcador

View File

@@ -1,21 +1,22 @@
## --- GAME --- ## --- GAME ---
game.item_size 20 # Tamaño de los items del juego (en píxeles) game.item_size 20 # Tamaño de los items del juego (en píxeles)
game.width 320 # Ancho de la resolución nativa del juego (en píxeles) game.width 320 # Ancho de la resolución nativa del juego (en píxeles)
game.height 256 # Alto de la resolución nativa del juego (en píxeles) game.height 256 # Alto de la resolución nativa del juego (en píxeles)
game.play_area.rect.x 0 # Posición X de la zona jugable 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.y 0 # Posición Y de la zona jugable
game.play_area.rect.w 320 # Ancho 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.play_area.rect.h 216 # Alto de la zona jugable
game.enter_name_seconds 10 # Segundos para introducir el nombre al finalizar la partida si no se pulsa nada game.name_entry_idle_time 10 # Segundos para introducir el nombre al finalizar la partida si no se pulsa nada
game.name_entry_total_time 60 # Segundos totales para introducir el nombre al finalizar la partida
## --- FADE --- ## --- FADE ---
fade.color 1F2B30 # Color hexadecimal para el efecto de fundido fade.color 1F2B30 # Color hexadecimal para el efecto de fundido
fade.num_squares_width 160 # Número de cuadrados en el eje X para el fundido fade.num_squares_width 160 # Número de cuadrados en el eje X para el fundido
fade.num_squares_height 128 # Número de cuadrados en el eje Y para el fundido fade.num_squares_height 128 # Número de cuadrados en el eje Y para el fundido
fade.random_squares_delay 1 # Delay entre aparición de cuadrados aleatorios (frames) fade.random_squares_delay 1 # Delay entre aparición de cuadrados aleatorios (frames)
fade.random_squares_mult 500 # Multiplicador para la velocidad de aparición aleatoria fade.random_squares_mult 500 # Multiplicador para la velocidad de aparición aleatoria
fade.post_duration 80 # Duración tras el fundido (frames) fade.post_duration 80 # Duración tras el fundido (frames)
fade.venetian_size 12 # Tamaño de las bandas para el efecto veneciano (en píxeles) fade.venetian_size 12 # Tamaño de las bandas para el efecto veneciano (en píxeles)
## --- SCOREBOARD --- ## --- SCOREBOARD ---
scoreboard.rect.x 0 # Posición X del marcador scoreboard.rect.x 0 # Posición X del marcador

View File

@@ -23,7 +23,8 @@ void initParam()
param.game.item_size = 20; param.game.item_size = 20;
param.game.game_area.rect = {0, 0, param.game.width, param.game.height}; param.game.game_area.rect = {0, 0, param.game.width, param.game.height};
param.game.play_area.rect = {0, 0, param.game.width, 216}; param.game.play_area.rect = {0, 0, param.game.width, 216};
param.game.enter_name_seconds = 30; param.game.name_entry_idle_time = 10;
param.game.name_entry_total_time = 60;
param.game.speed = 15; param.game.speed = 15;
precalculateZones(); precalculateZones();
@@ -155,9 +156,14 @@ bool setParams(const std::string &var, const std::string &value)
param.game.play_area.rect.h = std::stoi(value); param.game.play_area.rect.h = std::stoi(value);
} }
else if (var == "game.enter_name_seconds") else if (var == "game.name_entry_idle_time")
{ {
param.game.enter_name_seconds = std::stoi(value); param.game.name_entry_idle_time = std::stoi(value);
}
else if (var == "game.name_entry_total_time")
{
param.game.name_entry_total_time = std::stoi(value);
} }
// FADE // FADE

View File

@@ -9,13 +9,14 @@
// --- Parámetros del juego --- // --- Parámetros del juego ---
struct ParamGame struct ParamGame
{ {
float width; // Ancho de la resolución nativa del juego float width; // Ancho de la resolución nativa del juego
float height; // Alto de la resolución nativa del juego float height; // Alto de la resolución nativa del juego
float item_size; // Tamaño de los ítems del juego float item_size; // Tamaño de los ítems del juego
Zone play_area; // Rectángulo con la posición de la zona de juego Zone play_area; // Rectángulo con la posición de la zona de juego
Zone game_area; // Rectángulo con las dimensiones del juego Zone game_area; // Rectángulo con las dimensiones del juego
int enter_name_seconds; // Duración en segundos para introducir el nombre al finalizar la partida int name_entry_idle_time; // Segundos para introducir el nombre al finalizar la partida si no se pulsa nada
Uint32 speed; // Velocidad a la que transcurre el juego int name_entry_total_time; // Segundos totales para introducir el nombre al finalizar la partida
Uint32 speed; // Velocidad a la que transcurre el juego
}; };
// --- Parámetros del fade --- // --- Parámetros del fade ---

View File

@@ -1,20 +1,19 @@
#include "player.h" #include "player.h"
#include <SDL3/SDL_surface.h> // Para SDL_FlipMode #include <SDL3/SDL_surface.h> // Para SDL_FlipMode
#include <SDL3/SDL_timer.h> // Para SDL_GetTicks #include <SDL3/SDL_timer.h> // Para SDL_GetTicks
#include <stdlib.h> // Para rand #include <stdlib.h> // Para rand
#include <algorithm> // Para clamp, max, min #include <algorithm> // Para clamp, max, min
#include <array> // Para array #include <array> // Para array
#include "animated_sprite.h" // Para AnimatedSprite #include "animated_sprite.h" // Para AnimatedSprite
#include "input.h" // Para InputAction #include "input.h" // Para InputAction
#include "audio.h" // Para JA_PlaySound #include "audio.h" // Para JA_PlaySound
#include "param.h" // Para Param, ParamGame, param #include "param.h" // Para Param, ParamGame, param
#include "resource.h" // Para Resource #include "resource.h" // Para Resource
#include "scoreboard.h" // Para Scoreboard, ScoreboardMode #include "scoreboard.h" // Para Scoreboard, ScoreboardMode
#include "stage.h" // Para power_can_be_added #include "stage.h" // Para power_can_be_added
#include "texture.h" // Para Texture #include "texture.h" // Para Texture
#include "manage_hiscore_table.h" // Para ManageHiScoreTable, HiScoreEntry #include "manage_hiscore_table.h" // Para ManageHiScoreTable, HiScoreEntry
// Constructor // Constructor
Player::Player(int id, float x, int y, bool demo, SDL_FRect &play_area, std::vector<std::shared_ptr<Texture>> texture, const std::vector<std::vector<std::string>> &animations) Player::Player(int id, float x, int y, bool demo, SDL_FRect &play_area, std::vector<std::shared_ptr<Texture>> texture, const std::vector<std::vector<std::string>> &animations)
: player_sprite_(std::make_unique<AnimatedSprite>(texture[0], animations[0])), : player_sprite_(std::make_unique<AnimatedSprite>(texture[0], animations[0])),
@@ -53,8 +52,9 @@ void Player::init()
coffees_ = 0; coffees_ = 0;
continue_ticks_ = 0; continue_ticks_ = 0;
continue_counter_ = 10; continue_counter_ = 10;
enter_name_ticks_ = 0; name_entry_ticks_ = 0;
enter_name_counter_ = param.game.enter_name_seconds; name_entry_idle_counter_ = 0;
name_entry_total_counter_ = 0;
shiftColliders(); shiftColliders();
vel_x_ = 0; vel_x_ = 0;
vel_y_ = 0; vel_y_ = 0;
@@ -156,6 +156,7 @@ void Player::setInputEnteringName(InputAction input)
default: default:
break; break;
} }
name_entry_idle_counter_ = 0;
} }
// Mueve el jugador a la posición y animación que le corresponde // Mueve el jugador a la posición y animación que le corresponde
@@ -738,9 +739,9 @@ void Player::updateEnterNameCounter()
if (playing_state_ == PlayerState::ENTERING_NAME || playing_state_ == PlayerState::ENTERING_NAME_GAME_COMPLETED) if (playing_state_ == PlayerState::ENTERING_NAME || playing_state_ == PlayerState::ENTERING_NAME_GAME_COMPLETED)
{ {
constexpr int TICKS_SPEED = 1000; constexpr int TICKS_SPEED = 1000;
if (SDL_GetTicks() - enter_name_ticks_ > TICKS_SPEED) if (SDL_GetTicks() - name_entry_ticks_ > TICKS_SPEED)
{ {
decEnterNameCounter(); decNameEntryCounter();
} }
} }
} }
@@ -751,7 +752,7 @@ void Player::updateShowingName()
if (playing_state_ == PlayerState::SHOWING_NAME) if (playing_state_ == PlayerState::SHOWING_NAME)
{ {
constexpr int TICKS_SPEED = 5000; constexpr int TICKS_SPEED = 5000;
if (SDL_GetTicks() - enter_name_ticks_ > TICKS_SPEED) if (SDL_GetTicks() - name_entry_ticks_ > TICKS_SPEED)
{ {
game_completed_ ? setPlayingState(PlayerState::LEAVING_SCREEN) : setPlayingState(PlayerState::CONTINUE); game_completed_ ? setPlayingState(PlayerState::LEAVING_SCREEN) : setPlayingState(PlayerState::CONTINUE);
} }
@@ -774,13 +775,20 @@ void Player::decContinueCounter()
} }
// Decrementa el contador de entrar nombre // Decrementa el contador de entrar nombre
void Player::decEnterNameCounter() void Player::decNameEntryCounter()
{ {
enter_name_ticks_ = SDL_GetTicks(); name_entry_ticks_ = SDL_GetTicks();
--enter_name_counter_;
if (enter_name_counter_ < 0) // Actualiza contadores
++name_entry_idle_counter_;
++name_entry_total_counter_;
// Comprueba los contadores
if ((name_entry_total_counter_ >= param.game.name_entry_total_time) ||
(name_entry_idle_counter_ >= param.game.name_entry_idle_time))
{ {
enter_name_counter_ = param.game.enter_name_seconds; name_entry_total_counter_ = 0;
name_entry_idle_counter_ = 0;
if (playing_state_ == PlayerState::ENTERING_NAME) if (playing_state_ == PlayerState::ENTERING_NAME)
{ {
last_enter_name_ = getRecordName(); last_enter_name_ = getRecordName();

View File

@@ -191,9 +191,10 @@ private:
int scoreboard_panel_ = 0; // Panel del marcador asociado al jugador int scoreboard_panel_ = 0; // Panel del marcador asociado al jugador
std::string name_; // Nombre del jugador std::string name_; // Nombre del jugador
int controller_index_ = 0; // Índice del array de mandos que utilizará para moverse 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 bool demo_ = false; // Para que el jugador sepa si está en el modo demostración
int enter_name_counter_; // Contador para poner nombre int name_entry_idle_counter_ = 0; // Contador para poner nombre
Uint32 enter_name_ticks_ = 0; // Variable para poder cambiar el contador de poner nombre en función del tiempo int name_entry_total_counter_ = 0; // Segundos totales que lleva acumulados poniendo nombre
Uint32 name_entry_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 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 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 bool game_completed_ = false; // Indica si ha completado el juego
@@ -207,10 +208,10 @@ private:
void updateContinueCounter(); // Actualiza el contador de continue void updateContinueCounter(); // Actualiza el contador de continue
void updateEnterNameCounter(); // Actualiza el contador de entrar nombre void updateEnterNameCounter(); // Actualiza el contador de entrar nombre
void updateShowingName(); // Actualiza el estado SHOWING_NAME void updateShowingName(); // Actualiza el estado SHOWING_NAME
void decEnterNameCounter(); // Decrementa el contador de entrar nombre void decNameEntryCounter(); // Decrementa el contador de entrar nombre
void updateScoreboard(); // Actualiza el panel del marcador void updateScoreboard(); // Actualiza el panel del marcador
void setScoreboardMode(ScoreboardMode mode); // Cambia el modo del marcador void setScoreboardMode(ScoreboardMode mode); // Cambia el modo del marcador
void playSound(const std::string &name); // Hace sonar un sonido void playSound(const std::string &name); // Hace sonar un sonido
bool isRenderable() const { return !isWaiting() && !isGameOver(); } bool isRenderable() const { return !isWaiting() && !isGameOver(); }
void addScoreToScoreBoard(); // Añade una puntuación a la tabla de records void addScoreToScoreBoard(); // Añade una puntuación a la tabla de records
}; };