Trabajando en poder continuar la partida al morir

This commit is contained in:
2022-09-25 22:45:09 +02:00
parent 4ebd034b59
commit ed67e429d8
4 changed files with 33 additions and 12 deletions

View File

@@ -488,9 +488,9 @@ void Director::runTitle()
void Director::runGame() void Director::runGame()
{ {
if (mSection.subsection == GAME_SECTION_PLAY_1P) if (mSection.subsection == GAME_SECTION_PLAY_1P)
mGame = new Game(1, mRenderer, mScreen, mFileList, mLang, mInput, false, mOptions); mGame = new Game(1, 0, mRenderer, mScreen, mFileList, mLang, mInput, false, mOptions);
if (mSection.subsection == GAME_SECTION_PLAY_2P) if (mSection.subsection == GAME_SECTION_PLAY_2P)
mGame = new Game(2, mRenderer, mScreen, mFileList, mLang, mInput, false, mOptions); mGame = new Game(2, 0, mRenderer, mScreen, mFileList, mLang, mInput, false, mOptions);
setSection(mGame->run()); setSection(mGame->run());
delete mGame; delete mGame;
} }

View File

@@ -1,7 +1,7 @@
#include "game.h" #include "game.h"
// Constructor // Constructor
Game::Game(int numPlayers, SDL_Renderer *renderer, Screen *screen, std::string *filelist, Lang *lang, Input *input, bool demo, options_t *options) Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *screen, std::string *filelist, Lang *lang, Input *input, bool demo, options_t *options)
{ {
// Copia los punteros // Copia los punteros
mRenderer = renderer; mRenderer = renderer;
@@ -15,6 +15,8 @@ Game::Game(int numPlayers, SDL_Renderer *renderer, Screen *screen, std::string *
// Pasa variables // Pasa variables
mDemo.enabled = demo; mDemo.enabled = demo;
mNumPlayers = numPlayers; mNumPlayers = numPlayers;
mCurrentStage = currentStage;
mLastStageReached = currentStage;
if (mNumPlayers == 1) if (mNumPlayers == 1)
{ {
mOptions->input[0].deviceType = INPUT_USE_ANY; mOptions->input[0].deviceType = INPUT_USE_ANY;
@@ -338,7 +340,7 @@ void Game::init()
mMenaceCurrent = 0; mMenaceCurrent = 0;
mMenaceThreshold = 0; mMenaceThreshold = 0;
mHiScoreAchieved = false; mHiScoreAchieved = false;
mCurrentStage = 0; // mCurrentStage = 0;
mStageBitmapCounter = STAGE_COUNTER; mStageBitmapCounter = STAGE_COUNTER;
mDeathCounter = DEATH_COUNTER; mDeathCounter = DEATH_COUNTER;
mTimeStopped = false; mTimeStopped = false;
@@ -365,7 +367,7 @@ void Game::init()
mPowerBallCounter = 0; mPowerBallCounter = 0;
mCoffeeMachineEnabled = false; mCoffeeMachineEnabled = false;
mPostFade = 0; mPostFade = 0;
mLastStageReached = 0; // mLastStageReached = 0;
if (mDemo.enabled) if (mDemo.enabled)
{ {
@@ -1687,8 +1689,9 @@ void Game::updateStage()
{ {
// Cambio de fase // Cambio de fase
mCurrentStage++; mCurrentStage++;
if (mCurrentStage == 10) // Ha llegado al final el juego mLastStageReached = mCurrentStage;
{ if (mCurrentStage == 10)
{ // Ha llegado al final el juego
mGameCompleted = true; // Marca el juego como completado mGameCompleted = true; // Marca el juego como completado
mCurrentStage = 9; // Deja el valor dentro de los limites mCurrentStage = 9; // Deja el valor dentro de los limites
mStage[mCurrentStage].currentPower = 0; // Deja el poder a cero para que no vuelva a entrar en esta condición mStage[mCurrentStage].currentPower = 0; // Deja el poder a cero para que no vuelva a entrar en esta condición
@@ -1696,8 +1699,12 @@ void Game::updateStage()
mStage[mCurrentStage].currentPower = 0; // Vuelve a dejar el poder a cero, por lo que hubiera podido subir al destruir todos lo globos mStage[mCurrentStage].currentPower = 0; // Vuelve a dejar el poder a cero, por lo que hubiera podido subir al destruir todos lo globos
mMenaceCurrent = 255; // Sube el nivel de amenaza para que no cree mas globos mMenaceCurrent = 255; // Sube el nivel de amenaza para que no cree mas globos
for (int i = 0; i < mNumPlayers; i++) // Añade un millon de puntos a los jugadores que queden vivos for (int i = 0; i < mNumPlayers; i++) // Añade un millon de puntos a los jugadores que queden vivos
{
if (mPlayer[i]->isAlive()) if (mPlayer[i]->isAlive())
{
mPlayer[i]->addScore(1000000); mPlayer[i]->addScore(1000000);
}
}
updateHiScore(); updateHiScore();
JA_StopMusic(); JA_StopMusic();
} }
@@ -1711,12 +1718,18 @@ void Game::updateStage()
// Incrementa el contador del bitmap que aparece mostrando el cambio de fase // Incrementa el contador del bitmap que aparece mostrando el cambio de fase
if (mStageBitmapCounter < STAGE_COUNTER) if (mStageBitmapCounter < STAGE_COUNTER)
{
mStageBitmapCounter++; mStageBitmapCounter++;
}
// Si el juego se ha completado, el bitmap se detiene en el centro de la pantalla // Si el juego se ha completado, el bitmap se detiene en el centro de la pantalla
if (mGameCompleted) if (mGameCompleted)
{
if (mStageBitmapCounter > 100) if (mStageBitmapCounter > 100)
{
mStageBitmapCounter = 100; mStageBitmapCounter = 100;
}
}
} }
// Actualiza el estado de muerte // Actualiza el estado de muerte
@@ -1732,13 +1745,21 @@ void Game::updateDeath()
{ {
// Animación // Animación
if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 0) if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 0)
{
mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 0, 24, 24, 24); mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 0, 24, 24, 24);
}
else if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 1) else if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 1)
{
mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 1, 24, 24, 24); mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 1, 24, 24, 24);
}
else if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 2) else if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 2)
{
mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 2, 24, 24, 24); mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 2, 24, 24, 24);
}
else if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 3) else if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 3)
{
mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 3, 24, 24, 24); mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 3, 24, 24, 24);
}
// Rebote en los laterales // Rebote en los laterales
if (mSmartSprite[mPlayer[i]->mDeathIndex]->getVelX() > 0) if (mSmartSprite[mPlayer[i]->mDeathIndex]->getVelX() > 0)

View File

@@ -518,7 +518,7 @@ private:
public: public:
// Constructor // Constructor
Game(int numPlayers, SDL_Renderer *renderer, Screen *screen, std::string *filelist, Lang *lang, Input *input, bool demo, options_t *options); Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *screen, std::string *filelist, Lang *lang, Input *input, bool demo, options_t *options);
// Destructor // Destructor
~Game(); ~Game();

View File

@@ -924,7 +924,7 @@ void Title::runInstructions(Uint8 mode)
// Ejecuta el juego en modo demo // Ejecuta el juego en modo demo
void Title::runDemoGame() void Title::runDemoGame()
{ {
mDemoGame = new Game(1, mRenderer, mScreen, mFileList, mLang, mInput, true, mOptions); mDemoGame = new Game(1, 0, mRenderer, mScreen, mFileList, mLang, mInput, true, mOptions);
mDemoGame->run(); mDemoGame->run();
delete mDemoGame; delete mDemoGame;
} }