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()
{
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)
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());
delete mGame;
}

View File

@@ -1,7 +1,7 @@
#include "game.h"
// 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
mRenderer = renderer;
@@ -15,6 +15,8 @@ Game::Game(int numPlayers, SDL_Renderer *renderer, Screen *screen, std::string *
// Pasa variables
mDemo.enabled = demo;
mNumPlayers = numPlayers;
mCurrentStage = currentStage;
mLastStageReached = currentStage;
if (mNumPlayers == 1)
{
mOptions->input[0].deviceType = INPUT_USE_ANY;
@@ -338,7 +340,7 @@ void Game::init()
mMenaceCurrent = 0;
mMenaceThreshold = 0;
mHiScoreAchieved = false;
mCurrentStage = 0;
// mCurrentStage = 0;
mStageBitmapCounter = STAGE_COUNTER;
mDeathCounter = DEATH_COUNTER;
mTimeStopped = false;
@@ -365,7 +367,7 @@ void Game::init()
mPowerBallCounter = 0;
mCoffeeMachineEnabled = false;
mPostFade = 0;
mLastStageReached = 0;
// mLastStageReached = 0;
if (mDemo.enabled)
{
@@ -452,7 +454,7 @@ void Game::init()
{
mPlayer[0]->init(PLAY_AREA_CENTER_X - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer1Legs, mTexturePlayer1Body, mTexturePlayer1Head, mTexturePlayer1Death, mRenderer);
}
else if (mNumPlayers == 2)
{
mPlayer[0]->init((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((0 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer1Legs, mTexturePlayer1Body, mTexturePlayer1Head, mTexturePlayer1Death, mRenderer);
@@ -1687,8 +1689,9 @@ void Game::updateStage()
{
// Cambio de fase
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
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
@@ -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
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
{
if (mPlayer[i]->isAlive())
{
mPlayer[i]->addScore(1000000);
}
}
updateHiScore();
JA_StopMusic();
}
@@ -1711,12 +1718,18 @@ void Game::updateStage()
// Incrementa el contador del bitmap que aparece mostrando el cambio de fase
if (mStageBitmapCounter < STAGE_COUNTER)
{
mStageBitmapCounter++;
}
// Si el juego se ha completado, el bitmap se detiene en el centro de la pantalla
if (mGameCompleted)
{
if (mStageBitmapCounter > 100)
{
mStageBitmapCounter = 100;
}
}
}
// Actualiza el estado de muerte
@@ -1732,13 +1745,21 @@ void Game::updateDeath()
{
// Animación
if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 0)
{
mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 0, 24, 24, 24);
}
else if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 1)
{
mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 1, 24, 24, 24);
}
else if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 2)
{
mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 2, 24, 24, 24);
}
else if ((mPlayer[i]->getDeathCounter() / 5) % 4 == 3)
{
mSmartSprite[mPlayer[i]->mDeathIndex]->setSpriteClip(24 * 3, 24, 24, 24);
}
// Rebote en los laterales
if (mSmartSprite[mPlayer[i]->mDeathIndex]->getVelX() > 0)
@@ -3522,12 +3543,12 @@ void Game::initPaths()
{
mStageBitmapPath[i] = (mSin[(int)((i * 1.8f) + 90)] * (distance) + centerPoint);
}
else if (i < secondPart)
{
mStageBitmapPath[i] = (int)centerPoint;
}
else
{
mStageBitmapPath[i] = (mSin[(int)(((i - 149) * 1.8f) + 90)] * (centerPoint + 17) - 17);

View File

@@ -518,7 +518,7 @@ private:
public:
// 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
~Game();

View File

@@ -924,7 +924,7 @@ void Title::runInstructions(Uint8 mode)
// Ejecuta el juego en modo demo
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();
delete mDemoGame;
}