Arreglos en la estructura i format del codi

This commit is contained in:
2025-03-01 19:33:40 +01:00
parent 31cded15cc
commit 5c371e7517
12 changed files with 98 additions and 202 deletions

View File

@@ -16,7 +16,8 @@ Scoreboard::Scoreboard(std::shared_ptr<ScoreboardData> data)
: renderer_(Screen::get()->getRenderer()), : renderer_(Screen::get()->getRenderer()),
resource_(Resource::get()), resource_(Resource::get()),
asset_(Asset::get()), asset_(Asset::get()),
data_(data) data_(data),
clock_(ClockData())
{ {
const int TEXTURE_WIDTH_ = options.game.width; const int TEXTURE_WIDTH_ = options.game.width;
constexpr int TEXTURE_HEIGHT_ = 6 * BLOCK; constexpr int TEXTURE_HEIGHT_ = 6 * BLOCK;
@@ -48,10 +49,10 @@ Scoreboard::Scoreboard(std::shared_ptr<ScoreboardData> data)
items_color_ = stringToColor(options.video.palette, "white"); items_color_ = stringToColor(options.video.palette, "white");
// Inicializa el vector de colores // Inicializa el vector de colores
const std::vector<std::string> vColors = {"blue", "magenta", "green", "cyan", "yellow", "white", "bright_blue", "bright_magenta", "bright_green", "bright_cyan", "bright_yellow", "bright_white"}; const std::vector<std::string> COLORS = {"blue", "magenta", "green", "cyan", "yellow", "white", "bright_blue", "bright_magenta", "bright_green", "bright_cyan", "bright_yellow", "bright_white"};
for (auto v : vColors) for (const auto &color : COLORS)
{ {
color_.push_back(stringToColor(options.video.palette, v)); color_.push_back(stringToColor(options.video.palette, color));
} }
} }

View File

@@ -40,6 +40,14 @@ private:
int minutes; int minutes;
int seconds; int seconds;
std::string separator; std::string separator;
// Constructor por defecto
ClockData()
: hours(0), minutes(0), seconds(0), separator(":") {}
// Constructor parametrizado
ClockData(int h, int m, int s, const std::string &sep)
: hours(h), minutes(m), seconds(s), separator(sep) {}
}; };
// Objetos y punteros // Objetos y punteros

View File

@@ -416,12 +416,3 @@ int Screen::getMaxZoom()
return max_zoom; return max_zoom;
} }
// Renderiza un frame negro
void Screen::renderBlackFrame()
{
SDL_SetRenderTarget(renderer_, nullptr);
SDL_SetRenderDrawColor(renderer_, 0x00, 0x00, 0x00, 0xFF);
SDL_RenderClear(renderer_);
SDL_RenderPresent(renderer_);
}

View File

@@ -58,9 +58,6 @@ private:
// Ajusta el tamaño lógico del renderizador // Ajusta el tamaño lógico del renderizador
void adjustRenderLogicalSize(); void adjustRenderLogicalSize();
// Renderiza un frame negro
void renderBlackFrame();
// Constructor // Constructor
Screen(SDL_Window *window, SDL_Renderer *renderer); Screen(SDL_Window *window, SDL_Renderer *renderer);

View File

@@ -4,14 +4,9 @@
#include "options.h" // for Options, OptionsStats, options #include "options.h" // for Options, OptionsStats, options
// Constructor // Constructor
Stats::Stats(std::string file, std::string buffer) Stats::Stats(const std::string &file, const std::string &buffer)
{ : bufferPath(buffer),
bufferPath = buffer; filePath(file) {}
filePath = file;
bufferList.clear();
list.clear();
dictionary.clear();
}
// Destructor // Destructor
Stats::~Stats() Stats::~Stats()
@@ -43,7 +38,7 @@ void Stats::init()
} }
// Añade una muerte a las estadisticas // Añade una muerte a las estadisticas
void Stats::addDeath(std::string name) void Stats::addDeath(const std::string &name)
{ {
// Primero busca si ya hay una entrada con ese nombre // Primero busca si ya hay una entrada con ese nombre
const int index = findByName(name, bufferList); const int index = findByName(name, bufferList);
@@ -64,7 +59,7 @@ void Stats::addDeath(std::string name)
} }
// Añade una visita a las estadisticas // Añade una visita a las estadisticas
void Stats::addVisit(std::string name) void Stats::addVisit(const std::string &name)
{ {
// Primero busca si ya hay una entrada con ese nombre // Primero busca si ya hay una entrada con ese nombre
const int index = findByName(name, bufferList); const int index = findByName(name, bufferList);
@@ -85,11 +80,11 @@ void Stats::addVisit(std::string name)
} }
// Busca una entrada en la lista por nombre // Busca una entrada en la lista por nombre
int Stats::findByName(std::string name, std::vector<stats_t> &list) int Stats::findByName(const std::string &name, const std::vector<stats_t> &list)
{ {
int i = 0; int i = 0;
for (auto l : list) for (const auto &l : list)
{ {
if (l.name == name) if (l.name == name)
{ {
@@ -102,7 +97,7 @@ int Stats::findByName(std::string name, std::vector<stats_t> &list)
} }
// Carga las estadisticas desde un fichero // Carga las estadisticas desde un fichero
bool Stats::loadFromFile(std::string filePath, std::vector<stats_t> &list) bool Stats::loadFromFile(const std::string &file_path, std::vector<stats_t> &list)
{ {
list.clear(); list.clear();
@@ -110,12 +105,12 @@ bool Stats::loadFromFile(std::string filePath, std::vector<stats_t> &list)
bool success = true; bool success = true;
// Variables para manejar el fichero // Variables para manejar el fichero
std::string line; std::ifstream file(file_path);
std::ifstream file(filePath);
// Si el fichero se puede abrir // Si el fichero se puede abrir
if (file.good()) if (file.good())
{ {
std::string line;
// Procesa el fichero linea a linea // Procesa el fichero linea a linea
while (std::getline(file, line)) while (std::getline(file, line))
{ {
@@ -150,21 +145,21 @@ bool Stats::loadFromFile(std::string filePath, std::vector<stats_t> &list)
else else
{ {
// Crea el fichero con los valores por defecto // Crea el fichero con los valores por defecto
saveToFile(filePath, list); saveToFile(file_path, list);
} }
return success; return success;
} }
// Guarda las estadisticas en un fichero // Guarda las estadisticas en un fichero
void Stats::saveToFile(std::string filePath, std::vector<stats_t> &list) void Stats::saveToFile(const std::string &file_path, const std::vector<stats_t> &list)
{ {
// Crea y abre el fichero de texto // Crea y abre el fichero de texto
std::ofstream file(filePath); std::ofstream file(file_path);
// Escribe en el fichero // Escribe en el fichero
file << "# ROOM NAME;VISITS;DEATHS" << std::endl; file << "# ROOM NAME;VISITS;DEATHS" << std::endl;
for (auto item : list) for (const auto &item : list)
{ {
file << item.name << ";" << item.visited << ";" << item.died << std::endl; file << item.name << ";" << item.visited << ";" << item.died << std::endl;
} }
@@ -177,7 +172,7 @@ void Stats::saveToFile(std::string filePath, std::vector<stats_t> &list)
void Stats::checkWorstNightmare() void Stats::checkWorstNightmare()
{ {
int deaths = 0; int deaths = 0;
for (auto item : list) for (const auto &item : list)
{ {
if (item.died > deaths) if (item.died > deaths)
{ {
@@ -188,42 +183,16 @@ void Stats::checkWorstNightmare()
} }
// Añade una entrada al diccionario // Añade una entrada al diccionario
void Stats::addDictionary(std::string number, std::string name) void Stats::addDictionary(const std::string &number, const std::string &name)
{ {
dictionary.push_back({number, name}); dictionary.push_back({number, name});
} }
// Obtiene el nombre de una habitación a partir del número
std::string Stats::numberToName(std::string number)
{
for (auto l : dictionary)
{
if (l.number == number)
{
return l.name;
}
}
return "";
}
// Obtiene el número de una habitación a partir del nombre
std::string Stats::nameToNumber(std::string name)
{
for (auto l : dictionary)
{
if (l.name == name)
{
return l.number;
}
}
return "";
}
// Vuelca los datos del buffer en la lista de estadisticas // Vuelca los datos del buffer en la lista de estadisticas
void Stats::updateListFromBuffer() void Stats::updateListFromBuffer()
{ {
// Actualiza list desde bufferList // Actualiza list desde bufferList
for (auto buffer : bufferList) for (const auto &buffer : bufferList)
{ {
int index = findByName(buffer.name, list); int index = findByName(buffer.name, list);

View File

@@ -27,29 +27,23 @@ private:
std::string filePath; // Fichero con las estadísticas completas std::string filePath; // Fichero con las estadísticas completas
// Busca una entrada en la lista por nombre // Busca una entrada en la lista por nombre
int findByName(std::string name, std::vector<stats_t> &list); int findByName(const std::string &name, const std::vector<stats_t> &list);
// Carga las estadisticas desde un fichero // Carga las estadisticas desde un fichero
bool loadFromFile(std::string filePath, std::vector<stats_t> &list); bool loadFromFile(const std::string &filePath, std::vector<stats_t> &list);
// Guarda las estadisticas en un fichero // Guarda las estadisticas en un fichero
void saveToFile(std::string filePath, std::vector<stats_t> &list); void saveToFile(const std::string &filePath, const std::vector<stats_t> &list);
// Calcula cual es la habitación con más muertes // Calcula cual es la habitación con más muertes
void checkWorstNightmare(); void checkWorstNightmare();
// Obtiene el nombre de una habitación a partir del número
std::string numberToName(std::string number);
// Obtiene el número de una habitación a partir del nombre
std::string nameToNumber(std::string name);
// Vuelca los datos del buffer en la lista de estadisticas // Vuelca los datos del buffer en la lista de estadisticas
void updateListFromBuffer(); void updateListFromBuffer();
public: public:
// Constructor // Constructor
Stats(std::string file, std::string buffer); Stats(const std::string &file, const std::string &buffer);
// Destructor // Destructor
~Stats(); ~Stats();
@@ -59,11 +53,11 @@ public:
void init(); void init();
// Añade una muerte a las estadisticas // Añade una muerte a las estadisticas
void addDeath(std::string name); void addDeath(const std::string &name);
// Añade una visita a las estadisticas // Añade una visita a las estadisticas
void addVisit(std::string name); void addVisit(const std::string &name);
// Añade una entrada al diccionario // Añade una entrada al diccionario
void addDictionary(std::string number, std::string name); void addDictionary(const std::string &number, const std::string &name);
}; };

View File

@@ -15,12 +15,10 @@ Surface::Surface(std::shared_ptr<SurfaceData> surface_dest, int w, int h)
surface_(std::make_shared<SurfaceData>(w, h)), surface_(std::make_shared<SurfaceData>(w, h)),
transparent_color_(0) {} transparent_color_(0) {}
Surface::Surface(std::shared_ptr<SurfaceData> surface_dest, std::string file_path) Surface::Surface(std::shared_ptr<SurfaceData> surface_dest, const std::string &file_path)
: surface_dest_(surface_dest), : surface_dest_(surface_dest),
surface_(std::make_shared<SurfaceData>(loadSurface(Asset::get()->get(file_path)))), surface_(std::make_shared<SurfaceData>(loadSurface(Asset::get()->get(file_path)))),
transparent_color_(0) { transparent_color_(0) {}
std::cout << "surface loaded: "<< surface_->width << "x" << surface_->height << std::endl;
}
Surface::~Surface() {} Surface::~Surface() {}

View File

@@ -74,7 +74,7 @@ private:
public: public:
// Constructor // Constructor
Surface(std::shared_ptr<SurfaceData> surface_dest, int w, int h); Surface(std::shared_ptr<SurfaceData> surface_dest, int w, int h);
Surface(std::shared_ptr<SurfaceData> surface_dest, std::string file_path); Surface(std::shared_ptr<SurfaceData> surface_dest, const std::string &file_path);
// Destructor // Destructor
~Surface(); ~Surface();

View File

@@ -196,7 +196,7 @@ void Title::updateMarquee()
// Dibuja la marquesina // Dibuja la marquesina
void Title::renderMarquee() void Title::renderMarquee()
{ {
for (auto l : letters_) for (const auto &l : letters_)
{ {
if (l.enabled) if (l.enabled)
{ {
@@ -205,14 +205,6 @@ void Title::renderMarquee()
} }
} }
// Dibuja la linea de información inferior
void Title::renderInfo()
{
const std::string version = "v.1.10";
const int x = GAMECANVAS_WIDTH - info_text_->lenght(version) - 1;
info_text_->write(x, 1, version);
}
// Actualiza las variables // Actualiza las variables
void Title::update() void Title::update()
{ {
@@ -319,40 +311,6 @@ void Title::run()
} }
} }
// Recarga las texturas
void Title::reLoadTextures()
{
// Carga la textura adecuada
if (options.video.palette == Palette::ZXSPECTRUM)
{
texture_ = resource_->getTexture("loading_screen_color.png");
}
else if (options.video.palette == Palette::ZXARNE)
{
texture_ = resource_->getTexture("loading_screen_color_zxarne.png");
}
texture_->reLoad();
}
// Cambia la paleta
void Title::switchPalette()
{
if (options.video.palette == Palette::ZXSPECTRUM)
{
options.video.palette = Palette::ZXARNE;
sprite_->setTexture(resource_->getTexture("loading_screen_color_zxarne.png"));
}
else
{
options.video.palette = Palette::ZXSPECTRUM;
sprite_->setTexture(resource_->getTexture("loading_screen_color.png"));
}
// Cambia el color del borde
screen_->setBorderColor(stringToColor(options.video.palette, "bright_blue"));
}
// Desplaza la lista de logros // Desplaza la lista de logros
void Title::moveCheevosList(int direction) void Title::moveCheevosList(int direction)
{ {
@@ -432,7 +390,7 @@ void Title::createCheevosTexture()
constexpr int LINE_X1 = (CHEEVOS_TEXTURE_WIDTH / 7) * 3; constexpr int LINE_X1 = (CHEEVOS_TEXTURE_WIDTH / 7) * 3;
constexpr int LINE_X2 = LINE_X1 + ((CHEEVOS_TEXTURE_WIDTH / 7) * 1); constexpr int LINE_X2 = LINE_X1 + ((CHEEVOS_TEXTURE_WIDTH / 7) * 1);
for (auto cheevo : cheevosList) for (const auto &cheevo : cheevosList)
{ {
cheevoColor = cheevo.completed ? CHEEVO_UNLOCKED_COLOR : CHEEVO_LOCKED_COLOR; cheevoColor = cheevo.completed ? CHEEVO_UNLOCKED_COLOR : CHEEVO_LOCKED_COLOR;
pos += CHEEVOS_PADDING; pos += CHEEVOS_PADDING;

View File

@@ -76,15 +76,6 @@ private:
// Dibuja la marquesina // Dibuja la marquesina
void renderMarquee(); void renderMarquee();
// Dibuja la linea de información inferior
void renderInfo();
// Recarga las texturas
void reLoadTextures();
// Cambia la paleta
void switchPalette();
// Desplaza la lista de logros // Desplaza la lista de logros
void moveCheevosList(int direction); void moveCheevosList(int direction);

View File

@@ -20,7 +20,7 @@ double distanceSquared(int x1, int y1, int x2, int y2)
} }
// Detector de colisiones entre dos circulos // Detector de colisiones entre dos circulos
bool checkCollision(Circle &a, Circle &b) bool checkCollision(const Circle &a, const Circle &b)
{ {
// Calcula el radio total al cuadrado // Calcula el radio total al cuadrado
int totalRadiusSquared = a.r + b.r; int totalRadiusSquared = a.r + b.r;
@@ -38,7 +38,7 @@ bool checkCollision(Circle &a, Circle &b)
} }
// Detector de colisiones entre un circulo y un rectangulo // Detector de colisiones entre un circulo y un rectangulo
bool checkCollision(Circle &a, SDL_Rect &b) bool checkCollision(const Circle &a, const SDL_Rect &b)
{ {
// Closest point on collision box // Closest point on collision box
int cX, cY; int cX, cY;
@@ -83,7 +83,7 @@ bool checkCollision(Circle &a, SDL_Rect &b)
} }
// Detector de colisiones entre dos rectangulos // Detector de colisiones entre dos rectangulos
bool checkCollision(SDL_Rect &a, SDL_Rect &b) bool checkCollision(const SDL_Rect &a, const SDL_Rect &b)
{ {
// Calcula las caras del rectangulo a // Calcula las caras del rectangulo a
const int leftA = a.x; const int leftA = a.x;
@@ -123,7 +123,7 @@ bool checkCollision(SDL_Rect &a, SDL_Rect &b)
} }
// Detector de colisiones entre un punto y un rectangulo // Detector de colisiones entre un punto y un rectangulo
bool checkCollision(SDL_Point &p, SDL_Rect &r) bool checkCollision(const SDL_Point &p, const SDL_Rect &r)
{ {
// Comprueba si el punto está a la izquierda del rectangulo // Comprueba si el punto está a la izquierda del rectangulo
if (p.x < r.x) if (p.x < r.x)
@@ -154,7 +154,7 @@ bool checkCollision(SDL_Point &p, SDL_Rect &r)
} }
// Detector de colisiones entre una linea horizontal y un rectangulo // Detector de colisiones entre una linea horizontal y un rectangulo
bool checkCollision(h_line_t &l, SDL_Rect &r) bool checkCollision(const h_line_t &l, const SDL_Rect &r)
{ {
// Comprueba si la linea esta por encima del rectangulo // Comprueba si la linea esta por encima del rectangulo
if (l.y < r.y) if (l.y < r.y)
@@ -185,7 +185,7 @@ bool checkCollision(h_line_t &l, SDL_Rect &r)
} }
// Detector de colisiones entre una linea vertical y un rectangulo // Detector de colisiones entre una linea vertical y un rectangulo
bool checkCollision(v_line_t &l, SDL_Rect &r) bool checkCollision(const v_line_t &l, const SDL_Rect &r)
{ {
// Comprueba si la linea esta por la izquierda del rectangulo // Comprueba si la linea esta por la izquierda del rectangulo
if (l.x < r.x) if (l.x < r.x)
@@ -216,7 +216,7 @@ bool checkCollision(v_line_t &l, SDL_Rect &r)
} }
// Detector de colisiones entre una linea horizontal y un punto // Detector de colisiones entre una linea horizontal y un punto
bool checkCollision(h_line_t &l, SDL_Point &p) bool checkCollision(const h_line_t &l, const SDL_Point &p)
{ {
// Comprueba si el punto esta sobre la linea // Comprueba si el punto esta sobre la linea
if (p.y > l.y) if (p.y > l.y)
@@ -247,7 +247,7 @@ bool checkCollision(h_line_t &l, SDL_Point &p)
} }
// Detector de colisiones entre dos lineas // Detector de colisiones entre dos lineas
SDL_Point checkCollision(line_t &l1, line_t &l2) SDL_Point checkCollision(const line_t &l1, const line_t &l2)
{ {
const float x1 = l1.x1; const float x1 = l1.x1;
const float y1 = l1.y1; const float y1 = l1.y1;
@@ -276,7 +276,7 @@ SDL_Point checkCollision(line_t &l1, line_t &l2)
} }
// Detector de colisiones entre dos lineas // Detector de colisiones entre dos lineas
SDL_Point checkCollision(d_line_t &l1, v_line_t &l2) SDL_Point checkCollision(const d_line_t &l1, const v_line_t &l2)
{ {
const float x1 = l1.x1; const float x1 = l1.x1;
const float y1 = l1.y1; const float y1 = l1.y1;
@@ -321,7 +321,7 @@ void normalizeLine(d_line_t &l)
} }
// Detector de colisiones entre un punto y una linea diagonal // Detector de colisiones entre un punto y una linea diagonal
bool checkCollision(SDL_Point &p, d_line_t &l) bool checkCollision(const SDL_Point &p, const d_line_t &l)
{ {
// Comprueba si el punto está en alineado con la linea // Comprueba si el punto está en alineado con la linea
if (abs(p.x - l.x1) != abs(p.y - l.y1)) if (abs(p.x - l.x1) != abs(p.y - l.y1))
@@ -464,36 +464,26 @@ bool colorAreEqual(Color color1, Color color2)
return (r && g && b); return (r && g && b);
} }
// Convierte una cadena a minusculas // Convierte una cadena a minúsculas
std::string toLower(std::string str) std::string toLower(std::string str)
{ {
const char *original = str.c_str(); for (char& c : str) {
char *lower = (char *)malloc(str.size() + 1); if (c >= 'A' && c <= 'Z') {
for (int i = 0; i < (int)str.size(); ++i) c += 32; // Convierte a minúscula
{
char c = original[i];
lower[i] = (c >= 65 && c <= 90) ? c + 32 : c;
} }
lower[str.size()] = 0; }
std::string result(lower); return str;
free(lower);
return result;
} }
// Convierte una cadena a mayúsculas // Convierte una cadena a mayúsculas
std::string toUpper(std::string str) std::string toUpper(std::string str)
{ {
const char *original = str.c_str(); for (char& c : str) {
char *upper = (char *)malloc(str.size() + 1); if (c >= 'a' && c <= 'z') {
for (int i = 0; i < (int)str.size(); ++i) c -= 32; // Convierte a mayúscula
{
char c = original[i];
upper[i] = (c >= 97 && c <= 122) ? c - 32 : c;
} }
upper[str.size()] = 0; }
std::string result(upper); return str;
free(upper);
return result;
} }
// Obtiene el nombre de un fichero a partir de una ruta completa // Obtiene el nombre de un fichero a partir de una ruta completa

View File

@@ -7,7 +7,6 @@
#include <SDL2/SDL_render.h> // for SDL_Renderer #include <SDL2/SDL_render.h> // for SDL_Renderer
#include <SDL2/SDL.h> // for SDL_Texture #include <SDL2/SDL.h> // for SDL_Texture
// Tipos de paleta // Tipos de paleta
enum class Palette : int enum class Palette : int
{ {
@@ -66,34 +65,34 @@ struct Color
double distanceSquared(int x1, int y1, int x2, int y2); double distanceSquared(int x1, int y1, int x2, int y2);
// Detector de colisiones entre dos circulos // Detector de colisiones entre dos circulos
bool checkCollision(Circle &a, Circle &b); bool checkCollision(const Circle &a, const Circle &b);
// Detector de colisiones entre un circulo y un rectangulo // Detector de colisiones entre un circulo y un rectangulo
bool checkCollision(Circle &a, SDL_Rect &b); bool checkCollision(const Circle &a, const SDL_Rect &b);
// Detector de colisiones entre un dos rectangulos // Detector de colisiones entre un dos rectangulos
bool checkCollision(SDL_Rect &a, SDL_Rect &b); bool checkCollision(const SDL_Rect &a, const SDL_Rect &b);
// Detector de colisiones entre un punto y un rectangulo // Detector de colisiones entre un punto y un rectangulo
bool checkCollision(SDL_Point &p, SDL_Rect &r); bool checkCollision(const SDL_Point &p, const SDL_Rect &r);
// Detector de colisiones entre una linea horizontal y un rectangulo // Detector de colisiones entre una linea horizontal y un rectangulo
bool checkCollision(h_line_t &l, SDL_Rect &r); bool checkCollision(const h_line_t &l, const SDL_Rect &r);
// Detector de colisiones entre una linea vertical y un rectangulo // Detector de colisiones entre una linea vertical y un rectangulo
bool checkCollision(v_line_t &l, SDL_Rect &r); bool checkCollision(const v_line_t &l, const SDL_Rect &r);
// Detector de colisiones entre una linea horizontal y un punto // Detector de colisiones entre una linea horizontal y un punto
bool checkCollision(h_line_t &l, SDL_Point &p); bool checkCollision(const h_line_t &l, const SDL_Point &p);
// Detector de colisiones entre dos lineas // Detector de colisiones entre dos lineas
SDL_Point checkCollision(line_t &l1, line_t &l2); SDL_Point checkCollision(const line_t &l1, const line_t &l2);
// Detector de colisiones entre dos lineas // Detector de colisiones entre dos lineas
SDL_Point checkCollision(d_line_t &l1, v_line_t &l2); SDL_Point checkCollision(const d_line_t &l1, const v_line_t &l2);
// Detector de colisiones entre un punto y una linea diagonal // Detector de colisiones entre un punto y una linea diagonal
bool checkCollision(SDL_Point &p, d_line_t &l); bool checkCollision(const SDL_Point &p, const d_line_t &l);
// Normaliza una linea diagonal // Normaliza una linea diagonal
void normalizeLine(d_line_t &l); void normalizeLine(d_line_t &l);