afegit separador de milers a la tabla de puntuacions

This commit is contained in:
2024-07-14 20:57:49 +02:00
parent 6eef3ada55
commit fef9a4f9a0
9 changed files with 85 additions and 27 deletions

View File

@@ -108,20 +108,19 @@ void HiScoreTable::fillTexture()
// Escribe el texto: Mejores puntuaciones
text->writeDX(TXT_CENTER | TXT_COLOR | TXT_SHADOW, GAMECANVAS_CENTER_X, firstLine, lang->getText(42), 1, orangeColor, 1, shdwTxtColor);
// Rellena la lista con nombres
std::vector<std::string> names;
names.insert(names.end(), {"Bry", "Usufondo", "G.Lucas", "P.Delgat", "P.Arrabalera", "Pelechano", "Sahuquillo", "Bacteriol", "Pepe", "Rosita"});
// Escribe los nombres de la tabla de puntuaciones
for (int i = 0; i < maxNames; ++i)
{
const int nameLenght = names[i].length();
const int numDots = 20 - nameLenght;
const int nameLenght = options->game.hiScoreTable[i].name.length();
const std::string score = format(options->game.hiScoreTable[i].score);
const int scoreLenght = score.size();
const int numDots = 25 - nameLenght - scoreLenght;
std::string dots = "";
for (int j = 0; j < numDots; ++j)
{
dots = dots + ".";
}
const std::string line = names[i] + dots + "0000000";
const std::string line = options->game.hiScoreTable[i].name + dots + score;
text->writeDX(TXT_CENTER | TXT_SHADOW, GAMECANVAS_CENTER_X, (i * spaceBetweenLines) + firstLine + spaceBetweenHeader, line, 1, orangeColor, 1, shdwTxtColor);
}
@@ -216,7 +215,7 @@ void HiScoreTable::run()
}
// Transforma un valor numérico en una cadena de 6 cifras
std::string HiScoreTable::scoreToString(Uint32 num)
std::string HiScoreTable::scoreToString(int num)
{
if ((num >= 0) && (num <= 9))
{
@@ -272,4 +271,44 @@ void HiScoreTable::updateFade()
{
section->name = SECTION_PROG_INSTRUCTIONS;
}
}
// Convierte un entero a un string con separadores de miles
std::string HiScoreTable::format(int number)
{
const std::string separator = ".";
if (number < 1000)
{
return std::to_string(number);
}
else if (number >= 1000 && number < 1000000)
{
const std::string num1 = std::to_string(number / 1000);
const std::string num2 = std::to_string(number % 1000);
return num1 + separator + fillZeros(num2);
}
else if (number >= 1000000)
{
const std::string num1 = std::to_string(number / 1000000);
const std::string num2 = std::to_string(number % 1000000 / 1000);
const std::string num3 = std::to_string(number % 1000000 % 1000);
return num1 + separator + fillZeros(num2) + separator + fillZeros(num3);
}
return std::to_string(number);
}
// Añade ceros a una cadena
std::string HiScoreTable::fillZeros(std::string text, int size)
{
std::string result = text;
for (int i=(int)text.size(); i < size; ++i)
{
result = '0' + result;
}
return result;
}