diff --git a/source/common/utils.cpp b/source/common/utils.cpp index 94f740b..151ce75 100644 --- a/source/common/utils.cpp +++ b/source/common/utils.cpp @@ -211,4 +211,15 @@ JA_Music_t *getMusic(std::vector music, std::string name) } return nullptr; +} + +// Ordena las entradas de la tabla de records +hiScoreEntry_t sortHiScoreTable(hiScoreEntry_t entry1, hiScoreEntry_t entry2) +{ + if (entry1.score > entry2.score) + { + return entry1; + } + + return entry2; } \ No newline at end of file diff --git a/source/common/utils.h b/source/common/utils.h index d4b6e5a..07c260f 100644 --- a/source/common/utils.h +++ b/source/common/utils.h @@ -76,6 +76,13 @@ struct section_t Uint8 subsection; }; +// Estructura para las entradas de la tabla de recirds +struct hiScoreEntry_t +{ + std::string name; // Nombre + int score; // Puntuación +}; + // Estructura para mapear el teclado usado en la demo struct demoKeys_t { @@ -142,8 +149,9 @@ struct op_audio_t // Estructura para las opciones del juego struct op_game_t { - Uint8 difficulty; // Dificultad del juego - Uint8 language; // Idioma usado en el juego + Uint8 difficulty; // Dificultad del juego + Uint8 language; // Idioma usado en el juego + std::vector hiScoreTable; // Tabla con las mejores puntuaciones }; // Estructura para los controles del juego @@ -238,4 +246,7 @@ JA_Sound_t *getSound(std::vector sounds, std::string name); // Obtiene el fichero de música a partir de un nombre JA_Music_t *getMusic(std::vector music, std::string name); +// Ordena las entradas de la tabla de records +hiScoreEntry_t sortHiScoreTable(hiScoreEntry_t entry1, hiScoreEntry_t entry2); + #endif \ No newline at end of file diff --git a/source/manage_hiscore_table.cpp b/source/manage_hiscore_table.cpp new file mode 100644 index 0000000..cd78d57 --- /dev/null +++ b/source/manage_hiscore_table.cpp @@ -0,0 +1,58 @@ +#include "manage_hiscore_table.h" + +// Constructor +ManageHiScoreTable::ManageHiScoreTable(std::vector *table) +{ + this->table = table; +} + +// Destructor +ManageHiScoreTable::~ManageHiScoreTable() +{ +} + +// Borra toda la tabla +void ManageHiScoreTable::clear() +{ + // Limpia la tabla + table->clear(); + + // Añade 10 entradas predefinidas + table->push_back({"Bry", 1000000}); + table->push_back({"Usufondo", 500000}); + table->push_back({"G.Lucas", 100000}); + table->push_back({"P.Delgat", 50000}); + table->push_back({"P.Arrabalera", 10000}); + table->push_back({"Pelechano", 5000}); + table->push_back({"Sahuquillo", 1000}); + table->push_back({"Bacteriol", 500}); + table->push_back({"Pepe", 200}); + table->push_back({"Rosita", 100}); +} + +// Añade un elemento a la tabla +void ManageHiScoreTable::add(hiScoreEntry_t entry) +{ + // Añade la entrada a la tabla + table->push_back(entry); + + // Ordena la tabla + sort(); + + // Deja solo las 10 primeras entradas + if ((int)table->size() >= 10) + { + table->resize(table->size() - 10); + } +} + +// Ordena la tabla +void ManageHiScoreTable::sort() +{ + struct + { + bool operator()(hiScoreEntry_t a, hiScoreEntry_t b) const { return a.score < b.score; } + } customLess; + + std::sort(table->begin(), table->end(), customLess); +} \ No newline at end of file diff --git a/source/manage_hiscore_table.h b/source/manage_hiscore_table.h new file mode 100644 index 0000000..679ac7e --- /dev/null +++ b/source/manage_hiscore_table.h @@ -0,0 +1,28 @@ +#pragma once + +#include +#include "common/utils.h" + +// Clase ManageHiScoreTable +class ManageHiScoreTable +{ +private: + // Variables + std::vector *table; // Tabla con los records + + // Ordena la tabla + void sort(); + +public: + // Constructor + ManageHiScoreTable(std::vector *table); + + // Destructor + ~ManageHiScoreTable(); + + // Borra toda la tabla + void clear(); + + // Añade un elemento a la tabla + void add(hiScoreEntry_t entry); +}; \ No newline at end of file