From 9065dd1b942f63b7a7325463ceab3f3ea39274da Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Wed, 26 Jun 2024 13:35:28 +0200 Subject: [PATCH] Modificado el parser para leer archivos de texto --- data/config/param.txt | 11 ++++- source/director.cpp | 2 + source/game.cpp | 2 +- source/load_param.cpp | 97 ++++++++++++++++++++++++++++++++++++------- source/load_param.h | 2 +- 5 files changed, 97 insertions(+), 17 deletions(-) diff --git a/data/config/param.txt b/data/config/param.txt index c2d50e4..cbb5da5 100644 --- a/data/config/param.txt +++ b/data/config/param.txt @@ -1,7 +1,16 @@ +#GAME gameWidth 320 gameHeight 240 + +#FADE numSquaresWidth 160 numSquaresHeight 120 fadeRandomSquaresDelay 1 fadeRandomSquaresMult 500 -fadePostDuration 50 \ No newline at end of file +fadePostDuration 50 + +#SCOREBOARD +scoreboard.x 10 +scoreboard.y 208 +scoreboard.w 300 +scoreboard.h 32 \ No newline at end of file diff --git a/source/director.cpp b/source/director.cpp index 3fe68de..1441d03 100644 --- a/source/director.cpp +++ b/source/director.cpp @@ -583,6 +583,7 @@ bool Director::saveConfigFile() // Opciones de video file << "## VIDEO\n"; + file << "## video mode can be: 0, SDL_WINDOW_FULLSCREEN, SDL_WINDOW_FULLSCREEN_DESKTOP\n"; if (options->video.mode == 0) { file << "mode=0\n"; @@ -600,6 +601,7 @@ bool Director::saveConfigFile() file << "window.size=" + std::to_string(options->video.window.size) + "\n"; + file << "## filter can be: FILTER_NEAREST, FILTER_LINEAL\n"; if (options->video.filter == FILTER_NEAREST) { file << "filter=FILTER_NEAREST\n"; diff --git a/source/game.cpp b/source/game.cpp index b35a418..3e50f74 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -227,7 +227,7 @@ void Game::init() gameOverMenu->setSelectorColor(difficultyColor, 255); // Variables para el marcador - scoreboard->setPos({SCOREBOARD_X, SCOREBOARD_Y, SCOREBOARD_WIDTH, SCOREBOARD_HEIGHT}); + scoreboard->setPos({param->scoreboard.x, param->scoreboard.y, param->scoreboard.w, param->scoreboard.h}); // Resto de variables gameCompleted = false; diff --git a/source/load_param.cpp b/source/load_param.cpp index 20892b5..073e5f4 100644 --- a/source/load_param.cpp +++ b/source/load_param.cpp @@ -13,7 +13,7 @@ void initParam(param_t *param) param->gameHeight = 240; // Tamaño para el marcador - param->scoreboard = {0, 240 - 32, 320, 32}; + param->scoreboard = {0, 208, 320, 32}; // Valores para el FADE_RANDOM_SQUARE param->numSquaresWidth = 80; @@ -24,41 +24,90 @@ void initParam(param_t *param) } // Establece valores para los parametros a partir de un fichero de texto -bool loadParam(param_t *param, std::string filePath) +void loadParam(param_t *param, std::string filePath) { // Pone valores por defecto a las variables initParam(param); - // Indicador de éxito en la carga - bool success = true; - // Variables para manejar el fichero std::string line; std::ifstream file(filePath); + std::string param1; + std::string param2; // Si el fichero se puede abrir if (file.good()) { + // Procesa cada linea del fichero while (std::getline(file, line)) { - // Comprueba que la linea no sea un comentario - if (line.substr(0, 1) != "#") + // Reinicia variables + param1 = ""; + param2 = ""; + + // Elimina los comentarios + line = line.substr(0, line.find("#")); + + // Ignora los espacios en blanco + int pos = 0; + while (pos < (int)line.size() && (int)line[pos] <= 32) { - // Encuentra la posición del caracter '=' - int pos = line.find(" "); - // Procesa las dos subcadenas - if (!setOptions(param, line.substr(0, pos), line.substr(pos + 1, line.length()))) + pos++; + } + + // Si no ha llegado al final de la linea, es que hay algo escrito (no es una linea vacía) + if (pos < (int)line.size()) + { + // Elimina el espacio en blanco + line = line.substr(pos, std::string::npos); + + // Se queda con todo lo que no sean espacios en blanco + pos = 1; + while (pos <= (int)line.size() && (int)line[pos] > 32) { - success = false; + pos++; + } + + // Si llega al final de la linea, falta la segunda palabra + if (pos < (int)line.size()) + { + // Se queda con la primera palabra + param1 = line.substr(0, pos); + + // Y recorta la linea + line = line.substr(pos, std::string::npos); + + // Ignora los espacios en blanco + pos = 0; + while (pos <= (int)line.size() && (int)line[pos] <= 32) + { + pos++; + } + + // Si llega al final de la linea, falta la segunda palabra + if (pos < (int)line.size()) + { + // Elimina el espacio en blanco + line = line.substr(pos, std::string::npos); + + // Ignora los espacios en blanco + pos = 1; + while (pos <= (int)line.size() && (int)line[pos] > 32) + { + pos++; + } + // Se queda con la segunda palabra + param2 = line.substr(0, pos); + } } } + + setOptions(param, param1, param2); } // Cierra el fichero file.close(); } - - return success; } // Asigna variables a partir de dos cadenas @@ -103,6 +152,26 @@ bool setOptions(param_t *param, std::string var, std::string value) param->fadePostDuration = std::stoi(value); } + else if (var == "scoreboard.x") + { + param->scoreboard.x = std::stoi(value); + } + + else if (var == "scoreboard.y") + { + param->scoreboard.y = std::stoi(value); + } + + else if (var == "scoreboard.w") + { + param->scoreboard.w = std::stoi(value); + } + + else if (var == "scoreboard.h") + { + param->scoreboard.h = std::stoi(value); + } + else { success = false; diff --git a/source/load_param.h b/source/load_param.h index d866d02..4af8d0c 100644 --- a/source/load_param.h +++ b/source/load_param.h @@ -8,6 +8,6 @@ #define LOAD_PARAM // Establece valores para los parametros a partir de un fichero de texto -bool loadParam(param_t *param, std::string filePath); +void loadParam(param_t *param, std::string filePath); #endif \ No newline at end of file