From 8ba77d7d5d79978f0eba2a4cfb4a21b301db815d Mon Sep 17 00:00:00 2001 From: Sergio Valor Date: Sun, 6 Oct 2024 21:07:26 +0200 Subject: [PATCH] =?UTF-8?q?Demanada=20ajuda=20a=20la=20IA=20pa=20que=20m'a?= =?UTF-8?q?rregle=20un=20poc=20la=20meua=20merda:=20Para=20optimizar=20est?= =?UTF-8?q?e=20c=C3=B3digo=20y=20evitar=20duplicar=20la=20l=C3=B3gica=20pa?= =?UTF-8?q?ra=20cada=20jugador,=20podemos=20extraer=20el=20c=C3=B3digo=20c?= =?UTF-8?q?om=C3=BAn=20en=20una=20funci=C3=B3n=20reutilizable.=20As=C3=AD,?= =?UTF-8?q?=20reducimos=20la=20repetici=C3=B3n=20y=20mejoramos=20la=20legi?= =?UTF-8?q?bilidad.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/game.cpp | 29 ++++++++++++++--------------- source/game.h | 7 +++++-- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/source/game.cpp b/source/game.cpp index 6081ed0..93a7b37 100644 --- a/source/game.cpp +++ b/source/game.cpp @@ -2817,6 +2817,17 @@ void Game::addScoreToScoreBoard(std::string name, int score) manager->saveToFile(asset->get("score.bin")); } +// Saca del estado de GAME OVER al jugador si el otro está activo +void Game::checkAndUpdatePlayerStatus(int activePlayerIndex, int inactivePlayerIndex) +{ + if (players[activePlayerIndex]->isGameOver() && + !players[inactivePlayerIndex]->isGameOver() && + !players[inactivePlayerIndex]->isWaiting()) + { + players[activePlayerIndex]->setStatusPlaying(playerStatus::WAITING); + } +} + // Comprueba el estado de los jugadores void Game::checkPlayersStatusPlaying() { @@ -2835,21 +2846,9 @@ void Game::checkPlayersStatusPlaying() } } - // Saca del estado de GAME OVER al primer jugador si el segundo está activo - const bool a1 = players[0]->isGameOver(); - const bool b1 = !players[1]->isGameOver() && !players[1]->isWaiting(); - if (a1 && b1) - { - players[0]->setStatusPlaying(playerStatus::WAITING); - } - - // Saca del estado de GAME OVER al segundo jugador si el primero está activo - const bool a2 = players[1]->isGameOver(); - const bool b2 = !players[0]->isGameOver() && !players[0]->isWaiting(); - if (a2 && b2) - { - players[1]->setStatusPlaying(playerStatus::WAITING); - } + // Comprobar estado de ambos jugadores + checkAndUpdatePlayerStatus(0, 1); + checkAndUpdatePlayerStatus(1, 0); } // Obtiene un jugador a partir de su "id" diff --git a/source/game.h b/source/game.h index 98e3d8a..b4e015a 100644 --- a/source/game.h +++ b/source/game.h @@ -124,7 +124,7 @@ private: std::vector items; // Vector con los items std::vector smartSprites; // Vector con los smartsprites - std::unique_ptr bulletTexture; // Textura para las balas + std::unique_ptr bulletTexture; // Textura para las balas std::vector itemTextures; // Vector con las texturas de los items std::vector balloonTextures; // Vector con las texturas de los globos std::vector explosionsTextures; // Vector con las texturas de las explosiones @@ -195,7 +195,7 @@ private: bool coffeeMachineEnabled; // Indica si hay una máquina de café en el terreno de juego bool gameCompleted; // Indica si se ha completado la partida, llegando al final de la ultima pantalla int gameCompletedCounter; // Contador para el tramo final, cuando se ha completado la partida y ya no aparecen más enemigos - gameDifficulty difficulty; // Dificultad del juego + gameDifficulty difficulty; // Dificultad del juego float difficultyScoreMultiplier; // Multiplicador de puntos en función de la dificultad color_t difficultyColor; // Color asociado a la dificultad int lastStageReached; // Contiene el número de la última pantalla que se ha alcanzado @@ -444,6 +444,9 @@ private: // Añade una puntuación a la tabla de records void addScoreToScoreBoard(std::string name, int score); + // Saca del estado de GAME OVER al jugador si el otro está activo + void checkAndUpdatePlayerStatus(int activePlayerIndex, int inactivePlayerIndex); + // Comprueba el estado de juego de los jugadores void checkPlayersStatusPlaying();