From ac9fe95e694b2f6b8f9870fa7578acb918feab68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Valor=20Mart=C3=ADnez?= Date: Thu, 23 May 2024 17:35:16 +0200 Subject: [PATCH] Acabada la clase scoreboard.. mas o menos --- Makefile | 2 +- source/common/utils.h | 13 ------------ source/director.cpp | 48 ++----------------------------------------- source/director.h | 2 +- source/game.cpp | 29 ++++++++++++++++++++------ source/game.h | 25 ++++++++++++---------- source/scoreboard.cpp | 18 ++++++++-------- source/scoreboard.h | 16 +++++++-------- source/title.cpp | 8 -------- 9 files changed, 57 insertions(+), 104 deletions(-) diff --git a/Makefile b/Makefile index b17b0db..940265e 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -executable = coffee_crisis_ae +executable = coffee_crisis_arcade_edition source = source/*.cpp source/common/*.cpp appName = Coffee Crisis Arcade Edition releaseFolder = ccae_release diff --git a/source/common/utils.h b/source/common/utils.h index 9e42760..4ee5b23 100644 --- a/source/common/utils.h +++ b/source/common/utils.h @@ -100,18 +100,6 @@ struct input_t Uint8 deviceType; // Tipo de dispositivo (teclado o mando) }; -// Estructura para el servicio online -struct online_t -{ - bool enabled; // Indica si se quiere usar el modo online o no - bool sessionEnabled; // Indica ya se ha hecho login - std::string server; // Servidor para los servicios online - int port; // Puerto del servidor - std::string gameID; // Identificador del juego para los servicios online - std::string jailerID; // Identificador del jugador para los servicios online - int score; // Puntuación almacenada online -}; - // Estructura con opciones de la pantalla struct op_screen_t { @@ -150,7 +138,6 @@ struct options_t palette_e palette; // Paleta de colores a usar en el juego bool console; // Indica si ha de mostrar información por la consola de texto - online_t online; // Datos del servicio online op_screen_t screen; // Opciones relativas a la clase screen op_notification_t notifications; // Opciones relativas a las notificaciones; }; diff --git a/source/director.cpp b/source/director.cpp index 961bd7e..2f68c93 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -27,9 +27,9 @@ Director::Director(int argc, char *argv[]) // Crea la carpeta del sistema donde guardar datos createSystemFolder("jailgames"); #ifndef DEBUG - createSystemFolder("jailgames/coffee_crisis"); + createSystemFolder("jailgames/coffee_crisis_arcade_edition"); #else - createSystemFolder("jailgames/coffee_crisis_debug"); + createSystemFolder("jailgames/coffee_crisis_arcade_edition_debug"); #endif // Crea el objeto que controla los ficheros de recursos @@ -395,18 +395,6 @@ void Director::initOptions() options->language = ba_BA; options->console = false; - // Opciones online - options->online.enabled = false; - options->online.server = "jaildoctor.duckdns.org"; - options->online.port = 9911; -#ifdef DEBUG - options->online.gameID = "coffee_crisis_test2"; -#else - options->online.gameID = "coffee_crisis"; -#endif - options->online.jailerID = ""; - options->online.score = 0; - // Opciones de las notificaciones options->notifications.posV = pos_top; options->notifications.posH = pos_left; @@ -619,13 +607,6 @@ bool Director::saveConfigFile() file << "input0=" + std::to_string(options->input[0].deviceType) + "\n"; file << "input1=" + std::to_string(options->input[1].deviceType) + "\n"; - // Opciones sobre la conexión online - file << "\n## ONLINE OPTIONS\n"; - file << "enabled=" + boolToString(options->online.enabled) + "\n"; - file << "server=" + options->online.server + "\n"; - file << "port=" + std::to_string(options->online.port) + "\n"; - file << "jailerID=" + options->online.jailerID + "\n"; - // Opciones de las notificaciones file << "\n## NOTIFICATION OPTIONS\n"; file << "## notifications.posV = pos_top | pos_bottom\n"; @@ -810,31 +791,6 @@ bool Director::setOptions(options_t *options, std::string var, std::string value options->input[1].deviceType = std::stoi(value); } - // Opciones onlince - else if (var == "enabled") - { - options->online.enabled = stringToBool(value); - } - - else if (var == "server") - { - options->online.server = value; - } - - else if (var == "port") - { - if (value == "") - { - value = "0"; - } - options->online.port = std::stoi(value); - } - - else if (var == "jailerID") - { - options->online.jailerID = toLower(value); - } - // Opciones de notificaciones else if (var == "notifications.posH") { diff --git a/source/director.h b/source/director.h index 4fb2b3f..4e7551f 100644 --- a/source/director.h +++ b/source/director.h @@ -27,7 +27,7 @@ #define DIRECTOR_H // Textos -#define WINDOW_CAPTION "Coffee Crisis" +#define WINDOW_CAPTION "Coffee Crisis Arcade Edition" class Director { diff --git a/source/game.cpp b/source/game.cpp index e71f730..f94dc83 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -246,6 +246,15 @@ void Game::init() break; } + if (difficulty == DIFFICULTY_NORMAL) + { + scoreboard->setColor({46, 63, 71}); + } + else + { + scoreboard->setColor(difficultyColor); + } + gameCompleted = false; gameCompletedCounter = 0; section->name = SECTION_PROG_GAME; @@ -1574,12 +1583,6 @@ void Game::updateHiScore() // Actualiza la máxima puntuación hiScore = player->getScore(); - // Cambia el nombre del jugador con la máxima puntuación - if (options->online.enabled) - { - hiScoreName = options->online.jailerID.substr(0, 12) + " - "; - } - // Almacena la máxima puntuación en el fichero junto con un checksum scoreDataFile[0] = hiScore; scoreDataFile[1] = hiScore % 43; @@ -2644,6 +2647,9 @@ void Game::update() // Actualiza las variables del jugador updatePlayers(); + // Actualiza el marcador + updateScoreboard(); + // Actualiza el fondo updateBackground(); @@ -3807,4 +3813,15 @@ void Game::setHiScore() loadScoreFile(); hiScoreName = ""; +} + +// Actualiza el marcador +void Game::updateScoreboard() +{ + scoreboard->setScore1(players[0]->getScore()); + scoreboard->setMult1(players[0]->getScoreMultiplier()); + scoreboard->setStage(stage[currentStage].number); + scoreboard->setPower((float)stage[currentStage].currentPower / (float)stage[currentStage].powerToComplete); + scoreboard->setHiScore(hiScore); + scoreboard->setHiScoreName(hiScoreName); } \ No newline at end of file diff --git a/source/game.h b/source/game.h index 5479dfb..85b8d41 100644 --- a/source/game.h +++ b/source/game.h @@ -137,22 +137,22 @@ private: std::vector player2Textures; // Vector con las texturas del jugador std::vector> playerTextures; // Vector con todas las texturas de los jugadores; - Texture *gameBuildingsTexture; // Textura con los edificios de fondo - Texture *gameCloudsTexture; // Textura con las nubes de fondo - Texture *gameGrassTexture; // Textura con la hierba del suelo - Texture *gameSkyColorsTexture; // Textura con los diferentes colores de fondo del juego - Texture *gameTextTexture; // Textura para los sprites con textos - Texture *gameOverTexture; // Textura para la pantalla de game over - Texture *gameOverEndTexture; // Textura para la pantalla de game over de acabar el juego + Texture *gameBuildingsTexture; // Textura con los edificios de fondo + Texture *gameCloudsTexture; // Textura con las nubes de fondo + Texture *gameGrassTexture; // Textura con la hierba del suelo + Texture *gameSkyColorsTexture; // Textura con los diferentes colores de fondo del juego + Texture *gameTextTexture; // Textura para los sprites con textos + Texture *gameOverTexture; // Textura para la pantalla de game over + Texture *gameOverEndTexture; // Textura para la pantalla de game over de acabar el juego std::vector *> itemAnimations; // Vector con las animaciones de los items std::vector *> playerAnimations; // Vector con las animaciones del jugador std::vector *> balloonAnimations; // Vector con las animaciones de los globos - Text *text; // Fuente para los textos del juego - Text *textBig; // Fuente de texto grande - Text *textNokia2; // Otra fuente de texto para mensajes - Text *textNokiaBig2; // Y la versión en grande + Text *text; // Fuente para los textos del juego + Text *textBig; // Fuente de texto grande + Text *textNokia2; // Otra fuente de texto para mensajes + Text *textNokiaBig2; // Y la versión en grande Menu *gameOverMenu; // Menú de la pantalla de game over Menu *pauseMenu; // Menú de la pantalla de pausa @@ -505,6 +505,9 @@ private: // Establece la máxima puntuación desde fichero o desde las puntuaciones online void setHiScore(); + // Actualiza el marcador + void updateScoreboard(); + public: // Constructor Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang, Input *input, bool demo, options_t *options, section_t *section); diff --git a/source/scoreboard.cpp b/source/scoreboard.cpp index 9b3f601..e829ab1 100644 --- a/source/scoreboard.cpp +++ b/source/scoreboard.cpp @@ -16,15 +16,15 @@ Scoreboard::Scoreboard(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lan textScoreBoard = new Text(asset->get("8bithud.png"), asset->get("8bithud.txt"), renderer); // Inicializa variables - stage = 0; + stage = 1; score1 = 0; score2 = 0; - mult1 = 0; - mult2 = 0; + mult1 = 1; + mult2 = 1; hiScore = 0; power = 0; hiScoreName = ""; - color = {255, 0, 0}; + color = {0, 0, 0}; } Scoreboard::~Scoreboard() @@ -120,9 +120,7 @@ void Scoreboard::render() powerMeterSprite->setPosY(offset2); powerMeterSprite->setSpriteClip(0, 0, 40, 7); powerMeterSprite->render(); - // const float percent = (stage[currentStage].currentPower * 40.0f) / stage[currentStage].powerToComplete; - const float percent = 0.5; - powerMeterSprite->setSpriteClip(40, 0, (int)percent, 7); + powerMeterSprite->setSpriteClip(40, 0, int(power * 40.0f), 7); powerMeterSprite->render(); // HI-SCORE @@ -140,12 +138,12 @@ void Scoreboard::setScore2(int score) score2 = score; } -void Scoreboard::setMult1(int mult) +void Scoreboard::setMult1(float mult) { mult1 = mult; } -void Scoreboard::setMult2(int mult) +void Scoreboard::setMult2(float mult) { mult2 = mult; } @@ -160,7 +158,7 @@ void Scoreboard::setHiScore(int hiScore) this->hiScore = hiScore; } -void Scoreboard::setPower(int power) +void Scoreboard::setPower(float power) { this->power = power; } diff --git a/source/scoreboard.h b/source/scoreboard.h index 0486e18..c8c485a 100644 --- a/source/scoreboard.h +++ b/source/scoreboard.h @@ -28,18 +28,18 @@ private: Lang *lang; // Objeto para gestionar los textos en diferentes idiomas Texture *gamePowerMeterTexture; // Textura con el marcador de poder de la fase - Sprite *powerMeterSprite; // Sprite para el medidor de poder de la fase - Text *textScoreBoard; // Fuente para el marcador del juego + Sprite *powerMeterSprite; // Sprite para el medidor de poder de la fase + Text *textScoreBoard; // Fuente para el marcador del juego // Variables struct options_t *options; // Variable con todas las variables de las opciones del programa int stage; // Numero de fase actual int score1; // Puntuación del jugador 1 int score2; // Puntuación del jugador 2 - int mult1; // Multiplicador del jugador 1 - int mult2; // MUltiplicador del jugador 2 + float mult1; // Multiplicador del jugador 1 + float mult2; // MUltiplicador del jugador 2 int hiScore; // Mäxima puntuación - int power; // Poder actual de la fase + float power; // Poder actual de la fase std::string hiScoreName; // Nombre del jugador con la máxima puntuación color_t color; // Color del marcador @@ -55,11 +55,11 @@ public: void setScore1(int score); void setScore2(int score); - void setMult1(int mult); - void setMult2(int mult); + void setMult1(float mult); + void setMult2(float mult); void setStage(int stage); void setHiScore(int hiScore); - void setPower(int power); + void setPower(float power); void setHiScoreName(std::string name); void setColor(color_t color); diff --git a/source/title.cpp b/source/title.cpp index 7dff59e..343e926 100644 --- a/source/title.cpp +++ b/source/title.cpp @@ -575,14 +575,6 @@ void Title::runInstructions(mode_e mode) // Ejecuta la parte donde se muestra la tabla de puntuaciones void Title::runHiScoreTable(mode_hiScoreTable_e mode) { - if (!options->online.enabled) - { - section->name = SECTION_PROG_TITLE; - section->subsection = SUBSECTION_TITLE_1; - - return; - } - hiScoreTable = new HiScoreTable(renderer, screen, asset, input, lang, options, section); hiScoreTable->run(mode); delete hiScoreTable;