This commit is contained in:
2026-04-18 07:48:05 +02:00
parent 20b9a95619
commit 34a41ad25c
22 changed files with 97 additions and 79 deletions

View File

@@ -265,6 +265,7 @@ if(CPPCHECK_EXE)
--inline-suppr --inline-suppr
--suppress=missingIncludeSystem --suppress=missingIncludeSystem
--suppress=toomanyconfigs --suppress=toomanyconfigs
--suppress=*:*/source/external/*
--quiet --quiet
-I ${CMAKE_SOURCE_DIR}/source -I ${CMAKE_SOURCE_DIR}/source
${CPPCHECK_SOURCES} ${CPPCHECK_SOURCES}

View File

@@ -42,7 +42,7 @@ class AnimatedSprite : public MovingSprite {
AnimatedSprite(SDL_Renderer *renderer, animatedSprite_t *animation); AnimatedSprite(SDL_Renderer *renderer, animatedSprite_t *animation);
// Destructor // Destructor
~AnimatedSprite(); ~AnimatedSprite() override;
// Calcula el frame correspondiente a la animación actual // Calcula el frame correspondiente a la animación actual
void animate(); void animate();
@@ -86,7 +86,7 @@ class AnimatedSprite : public MovingSprite {
void setCurrentAnimation(int index = 0); void setCurrentAnimation(int index = 0);
// Actualiza las variables del objeto // Actualiza las variables del objeto
void update(); void update() override;
// OLD - Establece el rectangulo para un frame de una animación // OLD - Establece el rectangulo para un frame de una animación
void setAnimationFrames(Uint8 index_animation, Uint8 index_frame, int x, int y, int w, int h); void setAnimationFrames(Uint8 index_animation, Uint8 index_frame, int x, int y, int w, int h);

View File

@@ -10,19 +10,19 @@ constexpr int FADE_RANDOM_SQUARE = 2;
// Clase Fade // Clase Fade
class Fade { class Fade {
private: private:
SDL_Renderer *mRenderer = nullptr; // El renderizador de la ventana SDL_Renderer *mRenderer = nullptr; // El renderizador de la ventana
SDL_Texture *mBackbuffer = nullptr; // Textura para usar como backbuffer SDL_Texture *mBackbuffer = nullptr; // Textura para usar como backbuffer
Uint8 mFadeType = FADE_FULLSCREEN; // Tipo de fade a realizar Uint8 mFadeType = FADE_FULLSCREEN; // Tipo de fade a realizar
Uint16 mCounter = 0; // Contador interno Uint16 mCounter = 0; // Contador interno
bool mEnabled = false; // Indica si el fade está activo bool mEnabled = false; // Indica si el fade está activo
bool mFinished = false; // Indica si ha terminado la transición bool mFinished = false; // Indica si ha terminado la transición
Uint8 mR = 0, mG = 0, mB = 0; // Colores para el fade Uint8 mR = 0, mG = 0, mB = 0; // Colores para el fade
Uint8 mROriginal = 0, mGOriginal = 0, mBOriginal = 0; // Colores originales para FADE_RANDOM_SQUARE Uint8 mROriginal = 0, mGOriginal = 0, mBOriginal = 0; // Colores originales para FADE_RANDOM_SQUARE
Uint32 mLastSquareTicks = 0; // Ticks del último cuadrado dibujado (FADE_RANDOM_SQUARE) Uint32 mLastSquareTicks = 0; // Ticks del último cuadrado dibujado (FADE_RANDOM_SQUARE)
Uint16 mSquaresDrawn = 0; // Número de cuadrados dibujados (FADE_RANDOM_SQUARE) Uint16 mSquaresDrawn = 0; // Número de cuadrados dibujados (FADE_RANDOM_SQUARE)
bool mFullscreenDone = false; // Indica si el fade fullscreen ha terminado la fase de fundido bool mFullscreenDone = false; // Indica si el fade fullscreen ha terminado la fase de fundido
SDL_Rect mRect1{}; // Rectangulo usado para crear los efectos de transición SDL_Rect mRect1{}; // Rectangulo usado para crear los efectos de transición
SDL_Rect mRect2{}; // Rectangulo usado para crear los efectos de transición SDL_Rect mRect2{}; // Rectangulo usado para crear los efectos de transición
public: public:
// Constructor // Constructor

View File

@@ -70,11 +70,13 @@ void MovingSprite::render() {
} }
// Obtiene el valor de la variable // Obtiene el valor de la variable
// cppcheck-suppress duplInheritedMember
float MovingSprite::getPosX() { float MovingSprite::getPosX() {
return x; return x;
} }
// Obtiene el valor de la variable // Obtiene el valor de la variable
// cppcheck-suppress duplInheritedMember
float MovingSprite::getPosY() { float MovingSprite::getPosY() {
return y; return y;
} }

View File

@@ -8,8 +8,10 @@ class Texture;
// Clase MovingSprite. Añade posicion y velocidad en punto flotante // Clase MovingSprite. Añade posicion y velocidad en punto flotante
class MovingSprite : public Sprite { class MovingSprite : public Sprite {
protected: protected:
float x; // Posición en el eje X // cppcheck-suppress duplInheritedMember
float y; // Posición en el eje Y float x; // Posición en el eje X (sub-pixel; Sprite::x es int)
// cppcheck-suppress duplInheritedMember
float y; // Posición en el eje Y (sub-pixel; Sprite::y es int)
float xPrev; // Posición anterior en el eje X float xPrev; // Posición anterior en el eje X
float yPrev; // Posición anterior en el eje Y float yPrev; // Posición anterior en el eje Y
@@ -42,18 +44,20 @@ class MovingSprite : public Sprite {
void rotate(); void rotate();
// Actualiza las variables internas del objeto // Actualiza las variables internas del objeto
void update(); virtual void update();
// Reinicia todas las variables // Reinicia todas las variables
void clear(); void clear();
// Muestra el sprite por pantalla // Muestra el sprite por pantalla
void render(); void render() override;
// Obten el valor de la variable // Obten el valor de la variable
// cppcheck-suppress duplInheritedMember
float getPosX(); float getPosX();
// Obten el valor de la variable // Obten el valor de la variable
// cppcheck-suppress duplInheritedMember
float getPosY(); float getPosY();
// Obten el valor de la variable // Obten el valor de la variable
@@ -84,7 +88,7 @@ class MovingSprite : public Sprite {
Uint16 getRotateSpeed(); Uint16 getRotateSpeed();
// Establece la posición y el tamaño del objeto // Establece la posición y el tamaño del objeto
void setRect(SDL_Rect rect); void setRect(SDL_Rect rect) override;
// Establece el valor de la variable // Establece el valor de la variable
void setPosX(float value); void setPosX(float value);
@@ -144,7 +148,7 @@ class MovingSprite : public Sprite {
SDL_FlipMode getFlip(); SDL_FlipMode getFlip();
// Devuelve el rectangulo donde está el sprite // Devuelve el rectangulo donde está el sprite
SDL_Rect getRect(); SDL_Rect getRect() override;
// Deshace el último movimiento // Deshace el último movimiento
void undoMove(); void undoMove();

View File

@@ -46,16 +46,6 @@ void SmartSprite::render() {
} }
} }
// Obtiene el valor de la variable
bool SmartSprite::isEnabled() {
return enabled;
}
// Establece el valor de la variable
void SmartSprite::setEnabled(bool enabled) {
this->enabled = enabled;
}
// Obtiene el valor de la variable // Obtiene el valor de la variable
int SmartSprite::getEnabledCounter() { int SmartSprite::getEnabledCounter() {
return enabledCounter; return enabledCounter;

View File

@@ -9,7 +9,6 @@ class Texture;
class SmartSprite : public AnimatedSprite { class SmartSprite : public AnimatedSprite {
private: private:
// Variables // Variables
bool enabled; // Indica si esta habilitado
bool onDestination; // Indica si está en el destino bool onDestination; // Indica si está en el destino
int destX; // Posicion de destino en el eje X int destX; // Posicion de destino en el eje X
int destY; // Posicion de destino en el eje Y int destY; // Posicion de destino en el eje Y
@@ -30,16 +29,10 @@ class SmartSprite : public AnimatedSprite {
void init(); void init();
// Actualiza la posición y comprueba si ha llegado a su destino // Actualiza la posición y comprueba si ha llegado a su destino
void update(); void update() override;
// Pinta el objeto en pantalla // Pinta el objeto en pantalla
void render(); void render() override;
// Obtiene el valor de la variable
bool isEnabled();
// Establece el valor de la variable
void setEnabled(bool enabled);
// Obtiene el valor de la variable // Obtiene el valor de la variable
int getEnabledCounter(); int getEnabledCounter();

View File

@@ -23,10 +23,10 @@ class Sprite {
Sprite(SDL_Rect rect, Texture *texture, SDL_Renderer *renderer); Sprite(SDL_Rect rect, Texture *texture, SDL_Renderer *renderer);
// Destructor // Destructor
~Sprite(); virtual ~Sprite();
// Muestra el sprite por pantalla // Muestra el sprite por pantalla
void render(); virtual void render();
// Obten el valor de la variable // Obten el valor de la variable
int getPosX(); int getPosX();
@@ -77,14 +77,14 @@ class Sprite {
void setRenderer(SDL_Renderer *renderer); void setRenderer(SDL_Renderer *renderer);
// Establece el valor de la variable // Establece el valor de la variable
void setEnabled(bool value); virtual void setEnabled(bool value);
// Comprueba si el objeto está habilitado // Comprueba si el objeto está habilitado
bool isEnabled(); virtual bool isEnabled();
// Devuelve el rectangulo donde está el sprite // Devuelve el rectangulo donde está el sprite
SDL_Rect getRect(); virtual SDL_Rect getRect();
// Establece los valores de posición y tamaño del sprite // Establece los valores de posición y tamaño del sprite
void setRect(SDL_Rect rect); virtual void setRect(SDL_Rect rect);
}; };

View File

@@ -18,8 +18,7 @@ ResourcePack::~ResourcePack() {
} }
uint32_t ResourcePack::calculateChecksum(const std::vector<uint8_t>& data) { uint32_t ResourcePack::calculateChecksum(const std::vector<uint8_t>& data) {
return std::accumulate(data.begin(), data.end(), uint32_t(0x12345678), return std::accumulate(data.begin(), data.end(), uint32_t(0x12345678), [](uint32_t acc, uint8_t b) { return ((acc << 5) + acc) + b; });
[](uint32_t acc, uint8_t b) { return ((acc << 5) + acc) + b; });
} }
void ResourcePack::encryptData(std::vector<uint8_t>& data, const std::string& key) { void ResourcePack::encryptData(std::vector<uint8_t>& data, const std::string& key) {
@@ -157,6 +156,7 @@ bool ResourcePack::addDirectory(const std::string& directory) {
return false; return false;
} }
// cppcheck-suppress useStlAlgorithm
for (const auto& entry : std::filesystem::recursive_directory_iterator(directory)) { for (const auto& entry : std::filesystem::recursive_directory_iterator(directory)) {
if (entry.is_regular_file()) { if (entry.is_regular_file()) {
std::string filepath = entry.path().string(); std::string filepath = entry.path().string();

View File

@@ -63,6 +63,9 @@ class Director {
// Destructor // Destructor
~Director(); ~Director();
Director(const Director &) = delete;
Director &operator=(const Director &) = delete;
// Ejecuta un frame del juego // Ejecuta un frame del juego
SDL_AppResult iterate(); SDL_AppResult iterate();

View File

@@ -146,6 +146,9 @@ class Balloon {
// Destructor // Destructor
~Balloon(); ~Balloon();
Balloon(const Balloon &) = delete;
Balloon &operator=(const Balloon &) = delete;
// Centra el globo en la posición X // Centra el globo en la posición X
void allignTo(int x); void allignTo(int x);

View File

@@ -42,6 +42,9 @@ class Bullet {
// Destructor // Destructor
~Bullet(); ~Bullet();
Bullet(const Bullet &) = delete;
Bullet &operator=(const Bullet &) = delete;
// Pinta el objeto en pantalla // Pinta el objeto en pantalla
void render(); void render();

View File

@@ -52,6 +52,9 @@ class Item {
// Destructor // Destructor
~Item(); ~Item();
Item(const Item &) = delete;
Item &operator=(const Item &) = delete;
// Centra el objeto en la posición X // Centra el objeto en la posición X
void allignTo(int x); void allignTo(int x);

View File

@@ -86,6 +86,9 @@ class Player {
// Destructor // Destructor
~Player(); ~Player();
Player(const Player &) = delete;
Player &operator=(const Player &) = delete;
// Iniciador // Iniciador
void init(); void init();

View File

@@ -4,9 +4,9 @@
#include <stdlib.h> // for rand #include <stdlib.h> // for rand
#include <algorithm> // for max, min #include <algorithm> // for max, min
#include <numeric> // for accumulate
#include <fstream> // for basic_ifstream #include <fstream> // for basic_ifstream
#include <iostream> // for basic_ostream, char_traits, operator<< #include <iostream> // for basic_ostream, char_traits, operator<<
#include <numeric> // for accumulate
#include "core/audio/jail_audio.hpp" // for JA_PlaySound, JA_DeleteSound, JA_LoadSound #include "core/audio/jail_audio.hpp" // for JA_PlaySound, JA_DeleteSound, JA_LoadSound
#include "core/input/global_inputs.hpp" // for GlobalInputs::handle #include "core/input/global_inputs.hpp" // for GlobalInputs::handle
@@ -2184,8 +2184,7 @@ void Game::updateDeathSequence() {
// Calcula y establece el valor de amenaza en funcion de los globos activos // Calcula y establece el valor de amenaza en funcion de los globos activos
void Game::evaluateAndSetMenace() { void Game::evaluateAndSetMenace() {
menaceCurrent = std::accumulate(balloons.begin(), balloons.end(), Uint8(0), menaceCurrent = std::accumulate(balloons.begin(), balloons.end(), Uint8(0), [](Uint8 acc, Balloon *b) { return b->isEnabled() ? acc + b->getMenace() : acc; });
[](Uint8 acc, Balloon *b) { return b->isEnabled() ? acc + b->getMenace() : acc; });
} }
// Obtiene el valor de la variable // Obtiene el valor de la variable
@@ -3048,8 +3047,7 @@ bool Game::canPowerBallBeCreated() {
// Calcula el poder actual de los globos en pantalla // Calcula el poder actual de los globos en pantalla
int Game::calculateScreenPower() { int Game::calculateScreenPower() {
return std::accumulate(balloons.begin(), balloons.end(), 0, return std::accumulate(balloons.begin(), balloons.end(), 0, [](int acc, Balloon *b) { return b->isEnabled() ? acc + b->getPower() : acc; });
[](int acc, Balloon *b) { return b->isEnabled() ? acc + b->getPower() : acc; });
} }
// Inicializa las variables que contienen puntos de ruta para mover objetos // Inicializa las variables que contienen puntos de ruta para mover objetos

View File

@@ -243,7 +243,7 @@ class Game {
Uint8 lastStageReached; // Contiene el numero de la última pantalla que se ha alcanzado Uint8 lastStageReached; // Contiene el numero de la última pantalla que se ha alcanzado
demo_t demo; // Variable con todas las variables relacionadas con el modo demo demo_t demo; // Variable con todas las variables relacionadas con el modo demo
int totalPowerToCompleteGame; // La suma del poder necesario para completar todas las fases int totalPowerToCompleteGame; // La suma del poder necesario para completar todas las fases
int cloudsSpeed; // Velocidad a la que se desplazan las nubes int cloudsSpeed{0}; // Velocidad a la que se desplazan las nubes
int pauseCounter; // Contador para salir del menu de pausa y volver al juego int pauseCounter; // Contador para salir del menu de pausa y volver al juego
bool leavingPauseMenu; // Indica si esta saliendo del menu de pausa para volver al juego bool leavingPauseMenu; // Indica si esta saliendo del menu de pausa para volver al juego
bool pauseInitialized; // Indica si la pausa ha sido inicializada bool pauseInitialized; // Indica si la pausa ha sido inicializada
@@ -524,6 +524,9 @@ class Game {
// Destructor // Destructor
~Game(); ~Game();
Game(const Game &) = delete;
Game &operator=(const Game &) = delete;
// Bucle para el juego // Bucle para el juego
void run(); void run();

View File

@@ -26,14 +26,14 @@ class Instructions {
section_t *section; // Estado del bucle principal para saber si continua o se sale section_t *section; // Estado del bucle principal para saber si continua o se sale
// Variables // Variables
Uint16 counter; // Contador Uint16 counter; // Contador
Uint16 counterEnd; // Valor final para el contador Uint16 counterEnd; // Valor final para el contador
Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa Uint32 ticks; // Contador de ticks para ajustar la velocidad del programa
Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa Uint32 ticksSpeed; // Velocidad a la que se repiten los bucles del programa
bool manualQuit; // Indica si se quiere salir del modo manual bool manualQuit; // Indica si se quiere salir del modo manual
mode_e mode; // Modo en el que se van a ejecutar las instrucciones mode_e mode{m_auto}; // Modo en el que se van a ejecutar las instrucciones
bool finished; // Indica si las instrucciones han terminado bool finished; // Indica si las instrucciones han terminado
bool quitRequested; // Indica si se ha solicitado salir de la aplicación bool quitRequested; // Indica si se ha solicitado salir de la aplicación
// Comprueba las entradas // Comprueba las entradas
void checkInput(); void checkInput();
@@ -45,6 +45,9 @@ class Instructions {
// Destructor // Destructor
~Instructions(); ~Instructions();
Instructions(const Instructions &) = delete;
Instructions &operator=(const Instructions &) = delete;
// Bucle principal // Bucle principal
void run(mode_e mode); void run(mode_e mode);

View File

@@ -47,6 +47,9 @@ class Intro {
// Destructor // Destructor
~Intro(); ~Intro();
Intro(const Intro &) = delete;
Intro &operator=(const Intro &) = delete;
// Bucle principal // Bucle principal
void run(); void run();

View File

@@ -42,6 +42,9 @@ class Logo {
// Destructor // Destructor
~Logo(); ~Logo();
Logo(const Logo &) = delete;
Logo &operator=(const Logo &) = delete;
// Bucle principal // Bucle principal
void run(); void run();

View File

@@ -860,11 +860,13 @@ void Title::iterate() {
demoGame->iterate(); demoGame->iterate();
if (demoGame->hasFinished()) { if (demoGame->hasFinished()) {
bool wasQuit = (section->name == SECTION_PROG_QUIT); // cppcheck-suppress knownConditionTrueFalse
const bool wasQuit = (section->name == SECTION_PROG_QUIT);
delete demoGame; delete demoGame;
demoGame = nullptr; demoGame = nullptr;
demoGameActive = false; demoGameActive = false;
// cppcheck-suppress knownConditionTrueFalse
if (wasQuit) { if (wasQuit) {
section->name = SECTION_PROG_QUIT; section->name = SECTION_PROG_QUIT;
} else if (demoThenInstructions) { } else if (demoThenInstructions) {

View File

@@ -38,11 +38,11 @@ class Title {
}; };
// Objetos y punteros // Objetos y punteros
SDL_Renderer *renderer; // El renderizador de la ventana SDL_Renderer *renderer; // El renderizador de la ventana
Instructions *instructions; // Objeto para la sección de las instrucciones Instructions *instructions{nullptr}; // Objeto para la sección de las instrucciones
Game *demoGame; // Objeto para lanzar la demo del juego Game *demoGame{nullptr}; // Objeto para lanzar la demo del juego
SDL_Event *eventHandler; // Manejador de eventos SDL_Event *eventHandler; // Manejador de eventos
section_t *section; // Indicador para el bucle del titulo section_t *section; // Indicador para el bucle del titulo
Texture *dustTexture; // Textura con los graficos del polvo Texture *dustTexture; // Textura con los graficos del polvo
Texture *coffeeTexture; // Textura con los graficos de la palabra coffee Texture *coffeeTexture; // Textura con los graficos de la palabra coffee
@@ -87,16 +87,16 @@ class Title {
std::vector<int> deviceIndex; // Indice para el jugador [i] del vector de dispositivos de entrada disponibles std::vector<int> deviceIndex; // Indice para el jugador [i] del vector de dispositivos de entrada disponibles
// Variables para la vibración del título (SUBSECTION_TITLE_2) // Variables para la vibración del título (SUBSECTION_TITLE_2)
int vibrationStep; // Paso actual de la vibración int vibrationStep; // Paso actual de la vibración
int vibrationCoffeeBaseX; // Posición X base del bitmap Coffee int vibrationCoffeeBaseX{0}; // Posición X base del bitmap Coffee
int vibrationCrisisBaseX; // Posición X base del bitmap Crisis int vibrationCrisisBaseX{0}; // Posición X base del bitmap Crisis
bool vibrationInitialized; // Indica si se han capturado las posiciones base bool vibrationInitialized; // Indica si se han capturado las posiciones base
// Variables para sub-estados delegados (instrucciones y demo) // Variables para sub-estados delegados (instrucciones y demo)
bool instructionsActive; // Indica si las instrucciones están activas bool instructionsActive; // Indica si las instrucciones están activas
bool demoGameActive; // Indica si el juego demo está activo bool demoGameActive; // Indica si el juego demo está activo
mode_e instructionsMode; // Modo de las instrucciones activas mode_e instructionsMode{m_auto}; // Modo de las instrucciones activas
bool demoThenInstructions; // Indica si tras la demo hay que mostrar instrucciones bool demoThenInstructions; // Indica si tras la demo hay que mostrar instrucciones
// Inicializa los valores // Inicializa los valores
void init(); void init();
@@ -147,6 +147,9 @@ class Title {
// Destructor // Destructor
~Title(); ~Title();
Title(const Title &) = delete;
Title &operator=(const Title &) = delete;
// Bucle para el titulo del juego // Bucle para el titulo del juego
void run(); void run();

View File

@@ -430,8 +430,7 @@ void Menu::setSelectorPos(int index) {
// Obtiene la anchura del elemento más ancho del menu // Obtiene la anchura del elemento más ancho del menu
int Menu::getWidestItem() { int Menu::getWidestItem() {
return std::accumulate(item.begin(), item.end(), 0, return std::accumulate(item.begin(), item.end(), 0, [](int acc, const item_t &i) { return std::max(acc, i.rect.w); });
[](int acc, const item_t &i) { return std::max(acc, i.rect.w); });
} }
// Deja el menu apuntando al primer elemento // Deja el menu apuntando al primer elemento
@@ -792,8 +791,7 @@ int Menu::findWidth() {
// Calcula el alto del menu // Calcula el alto del menu
int Menu::findHeight() { int Menu::findHeight() {
const int height = std::accumulate(item.begin(), item.end(), 0, const int height = std::accumulate(item.begin(), item.end(), 0, [](int acc, const item_t &i) { return acc + i.rect.h + i.hPaddingDown; });
[](int acc, const item_t &i) { return acc + i.rect.h + i.hPaddingDown; });
return height - item.back().hPaddingDown; return height - item.back().hPaddingDown;
} }