From 6a84d114e8b5e0f2074ebc71510fbe6d9c5bcb4b Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Thu, 1 Sep 2022 12:50:17 +0200 Subject: [PATCH] Implementado el temporizador del marcador --- source/game.cpp | 3 ++- source/game.h | 1 + source/scoreboard.cpp | 20 +++++++++++++++++--- source/scoreboard.h | 14 +++++++++++++- 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/source/game.cpp b/source/game.cpp index 016e51c..dae9265 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -4,6 +4,7 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input) { // Inicia variables + clock = SDL_GetTicks(); currentRoom = "01.room"; spawnPoint = {2 * 8, 12 * 8, 0, 0, 0, STATUS_STANDING, SDL_FLIP_NONE}; debug = false; @@ -15,7 +16,7 @@ Game::Game(SDL_Renderer *renderer, Screen *screen, Asset *asset, Input *input) this->input = input; // Crea los objetos - scoreboard = new ScoreBoard(renderer, asset, &playerLives, &itemsPicked); + scoreboard = new ScoreBoard(renderer, asset, &playerLives, &itemsPicked, &clock); itemTracker = new ItemTracker(); room = new Room(asset->get(currentRoom), renderer, asset, itemTracker,&itemsPicked); player = new Player(spawnPoint, asset->get("player01.png"), asset->get("player01.ani"), renderer, asset, input, room); diff --git a/source/game.h b/source/game.h index 3c641d1..bfa0f76 100644 --- a/source/game.h +++ b/source/game.h @@ -42,6 +42,7 @@ private: bool debug; // Indica si el modo debug está activo int playerLives; // Lleva la cuenta de ls vidas restantes del jugador int itemsPicked; // Lleva la cuenta de los objetos recogidos + Uint32 clock; // Cuenta el tiempo que dura la partida // Actualiza el juego, las variables, comprueba la entrada, etc. void update(); diff --git a/source/scoreboard.cpp b/source/scoreboard.cpp index 407a17d..a2140e3 100644 --- a/source/scoreboard.cpp +++ b/source/scoreboard.cpp @@ -3,13 +3,14 @@ #include // Constructor -ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset, int *lives, int *items) +ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset, int *lives, int *items, Uint32 *clock) { // Obten punteros a objetos this->asset = asset; this->renderer = renderer; this->lives = lives; this->items = items; + this->clock = clock; // Reserva memoria para los objetos texture = new LTexture(); @@ -107,8 +108,10 @@ void ScoreBoard::render() } // Escribe los textos - // const std::string text = "Items collected 008 Time 88875"; - std::string text = "Items collected " + std::to_string(*items / 100) + std::to_string((*items % 100) / 10) + std::to_string(*items % 10) + " Time 88875"; + const clock_t clock = getTime(); + std::string itemsTxt = std::to_string(*items / 100) + std::to_string((*items % 100) / 10) + std::to_string(*items % 10); + std::string timeTxt = std::to_string((clock.minutes % 60) / 10) + std::to_string(clock.minutes % 10) + ":" + std::to_string((clock.seconds % 60) / 10) + std::to_string(clock.seconds % 10); + std::string text = "Items collected " + itemsTxt + " Time " + timeTxt; const color_t color = stringToColor("white"); this->text->writeColored(BLOCK, 21 * BLOCK, text, color); } @@ -118,4 +121,15 @@ void ScoreBoard::update() { counter++; sprite->update(); +} + +// Obtiene el tiempo transcurrido de partida +ScoreBoard::clock_t ScoreBoard::getTime() +{ + const Uint32 timeElapsed = SDL_GetTicks() - *clock; + clock_t time; + time.hours = timeElapsed / 3600000; + time.minutes = timeElapsed / 60000; + time.seconds = timeElapsed / 1000; + return time; } \ No newline at end of file diff --git a/source/scoreboard.h b/source/scoreboard.h index dd5c26e..227a271 100644 --- a/source/scoreboard.h +++ b/source/scoreboard.h @@ -15,6 +15,13 @@ class ScoreBoard { private: + struct clock_t + { + int hours; + int minutes; + int seconds; + }; + LTexture *texture; // Textura con los graficos para las vidas AnimatedSprite *sprite; // Sprite para mostrar las vidas en el marcador SDL_Renderer *renderer; // El renderizador de la ventana @@ -25,10 +32,15 @@ private: int colorChangeSpeed; // Cuanto mas alto, mas tarda en cambiar de color int *lives; // Número ara mostrar en el marcador de vidas int *items; // Número para mostrar en el marcador de items + Uint32 *clock; // Contiene el tiempo de inicio de la partida + clock_t time; // Contiene el tiempo de partida transcurrido + + // Obtiene el tiempo transcurrido de partida + clock_t getTime(); public: // Constructor - ScoreBoard(SDL_Renderer *renderer, Asset *asset, int *lives, int *items); + ScoreBoard(SDL_Renderer *renderer, Asset *asset, int *lives, int *items, Uint32 *clock); // Destructor ~ScoreBoard();