Modificado el parser para leer archivos de texto

This commit is contained in:
2024-06-26 13:35:28 +02:00
parent c8d1e79e1d
commit 9065dd1b94
5 changed files with 97 additions and 17 deletions

View File

@@ -1,7 +1,16 @@
#GAME
gameWidth 320
gameHeight 240
#FADE
numSquaresWidth 160
numSquaresHeight 120
fadeRandomSquaresDelay 1
fadeRandomSquaresMult 500
fadePostDuration 50
#SCOREBOARD
scoreboard.x 10
scoreboard.y 208
scoreboard.w 300
scoreboard.h 32

View File

@@ -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";

View File

@@ -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;

View File

@@ -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())
{
success = false;
// 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)
{
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;

View File

@@ -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