Ya se puede continuar al morir
This commit is contained in:
173
source/game.cpp
173
source/game.cpp
@@ -15,7 +15,7 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr
|
||||
// Pasa variables
|
||||
mDemo.enabled = demo;
|
||||
mNumPlayers = numPlayers;
|
||||
mCurrentStage = currentStage;
|
||||
this->mCurrentStage = 5; // currentStage;
|
||||
mLastStageReached = currentStage;
|
||||
if (mNumPlayers == 1)
|
||||
{
|
||||
@@ -24,21 +24,6 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr
|
||||
mDifficulty = mOptions->difficulty;
|
||||
|
||||
// Crea los objetos
|
||||
// Vector de jugadores
|
||||
if (mNumPlayers == 1)
|
||||
{
|
||||
Player *player = new Player(mRenderer, mAsset, PLAY_AREA_CENTER_X - 11, PLAY_AREA_BOTTOM - 24);
|
||||
players.push_back(player);
|
||||
}
|
||||
|
||||
else if (mNumPlayers == 2)
|
||||
{
|
||||
Player *player1 = new Player(mRenderer, mAsset, (PLAY_AREA_CENTER_FIRST_QUARTER_X * ((0 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24);
|
||||
Player *player2 = new Player(mRenderer, mAsset, (PLAY_AREA_CENTER_FIRST_QUARTER_X * ((1 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24);
|
||||
players.push_back(player1);
|
||||
players.push_back(player2);
|
||||
}
|
||||
|
||||
balloon1Texture = new LTexture(mRenderer, mAsset->get("balloon1.png"));
|
||||
balloon2Texture = new LTexture(mRenderer, mAsset->get("balloon2.png"));
|
||||
balloon3Texture = new LTexture(mRenderer, mAsset->get("balloon3.png"));
|
||||
@@ -85,6 +70,9 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr
|
||||
mSpriteGrass = new Sprite(0, 85, GAME_WIDTH, 6, mTextureGameBG, mRenderer);
|
||||
mSpritePowerMeter = new Sprite(PLAY_AREA_CENTER_X - 20, 170, 40, 8, mTextureGameBG, mRenderer);
|
||||
mSpriteScoreBoard = new Sprite(0, 160, GAME_WIDTH, 32, mTextureGameBG, mRenderer);
|
||||
|
||||
// Inicializa las variables necesarias para la sección 'Game'
|
||||
init();
|
||||
}
|
||||
|
||||
Game::~Game()
|
||||
@@ -94,30 +82,8 @@ Game::~Game()
|
||||
|
||||
mOptions->input[0].deviceType = mOnePlayerControl;
|
||||
|
||||
for (auto player : players)
|
||||
{
|
||||
delete player;
|
||||
};
|
||||
|
||||
for (auto ballon : balloons)
|
||||
{
|
||||
delete ballon;
|
||||
};
|
||||
|
||||
for (auto bullet : bullets)
|
||||
{
|
||||
delete bullet;
|
||||
};
|
||||
|
||||
for (auto item : items)
|
||||
{
|
||||
delete item;
|
||||
};
|
||||
|
||||
for (auto smartSprite : smartSprites)
|
||||
{
|
||||
delete smartSprite;
|
||||
};
|
||||
// Elimina todos los objetos contenidos en vectores
|
||||
deleteAllVectorObjects();
|
||||
|
||||
balloon1Texture->unload();
|
||||
delete balloon1Texture;
|
||||
@@ -213,6 +179,27 @@ void Game::init()
|
||||
mTicks = 0;
|
||||
mTicksSpeed = 15;
|
||||
|
||||
// Crea los jugadores
|
||||
for (auto player : players)
|
||||
{
|
||||
delete player;
|
||||
};
|
||||
players.clear();
|
||||
|
||||
if (mNumPlayers == 1)
|
||||
{
|
||||
Player *player = new Player(mRenderer, mAsset, PLAY_AREA_CENTER_X - 11, PLAY_AREA_BOTTOM - 24);
|
||||
players.push_back(player);
|
||||
}
|
||||
|
||||
else if (mNumPlayers == 2)
|
||||
{
|
||||
Player *player1 = new Player(mRenderer, mAsset, (PLAY_AREA_CENTER_FIRST_QUARTER_X * ((0 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24);
|
||||
Player *player2 = new Player(mRenderer, mAsset, (PLAY_AREA_CENTER_FIRST_QUARTER_X * ((1 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24);
|
||||
players.push_back(player1);
|
||||
players.push_back(player2);
|
||||
}
|
||||
|
||||
// Inicializa las variables
|
||||
switch (mDifficulty)
|
||||
{
|
||||
@@ -241,7 +228,6 @@ void Game::init()
|
||||
mMenaceCurrent = 0;
|
||||
mMenaceThreshold = 0;
|
||||
mHiScoreAchieved = false;
|
||||
// mCurrentStage = 0;
|
||||
mStageBitmapCounter = STAGE_COUNTER;
|
||||
mDeathCounter = DEATH_COUNTER;
|
||||
mTimeStopped = false;
|
||||
@@ -267,7 +253,6 @@ void Game::init()
|
||||
mPowerBallCounter = 0;
|
||||
mCoffeeMachineEnabled = false;
|
||||
mPostFade = 0;
|
||||
// mLastStageReached = 0;
|
||||
|
||||
if (mDemo.enabled)
|
||||
{
|
||||
@@ -309,35 +294,6 @@ void Game::init()
|
||||
// Inicializa el objeto para el fundido
|
||||
mFade->init(0x27, 0x27, 0x36);
|
||||
|
||||
// Inicializa el objeto con el menu de pausa
|
||||
// mMenuPause->setName("PAUSE");
|
||||
// mMenuPause->setPos(0, 12 * BLOCK);
|
||||
// mMenuPause->setBackgroundType(MENU_BACKGROUND_SOLID);
|
||||
// mMenuPause->addItem(mLang->getText(46), 2);
|
||||
// mMenuPause->addItem(mLang->getText(47), 0);
|
||||
// mMenuPause->setDefaultActionWhenCancel(0);
|
||||
// mMenuPause->setBackgroundColor({0x29, 0x39, 0x41}, 240);
|
||||
// mMenuPause->setSelectorColor({0xFF, 0x7A, 0x00}, 255);
|
||||
// mMenuPause->setSelectorTextColor({0xFF, 0xFF, 0xFF});
|
||||
// mMenuPause->centerMenuOnX(SCREEN_CENTER_X);
|
||||
// mMenuPause->centerMenuElementsOnX();
|
||||
|
||||
// Inicializa el objeto con el menu de la pantalla de game over
|
||||
// mMenuGameOver->setName("GAME OVER");
|
||||
// mMenuGameOver->setPos(0, PLAY_AREA_CENTER_Y + BLOCK * 4);
|
||||
// mMenuGameOver->setBackgroundType(MENU_BACKGROUND_TRANSPARENT);
|
||||
// mMenuGameOver->addItem(mLang->getText(48), 2);
|
||||
// mMenuGameOver->addItem(mLang->getText(49));
|
||||
// mMenuGameOver->setDefaultActionWhenCancel(1);
|
||||
// mMenuGameOver->setBackgroundColor({0, 0, 0}, 255);
|
||||
// mMenuGameOver->setSelectorColor({0x54, 0x6e, 0x7a}, 255);
|
||||
// mMenuGameOver->setSelectorColor({0x54, 0x6e, 0x7a}, 0);
|
||||
// mMenuGameOver->setSelectorTextColor({0xFF, 0xFF, 0xFF});
|
||||
// mMenuGameOver->setSelectorTextColor({0xFF, 0xF1, 0x76});
|
||||
// mMenuGameOver->setSelectorTextColor({0xFF, 0x7A, 0x00});
|
||||
// mMenuGameOver->centerMenuOnX(SCREEN_CENTER_X);
|
||||
// mMenuGameOver->centerMenuElementsOnX();
|
||||
|
||||
// Sprites
|
||||
mClouds1a->setSpriteClip(256, 0, 256, 52);
|
||||
mClouds1b->setSpriteClip(256, 0, 256, 52);
|
||||
@@ -1469,21 +1425,21 @@ void Game::renderScoreBoard()
|
||||
|
||||
// PLAYER1 - SCORE
|
||||
mTextScoreBoard->writeCentered(offsetLeft, offset1, mLang->getText(53));
|
||||
mTextScoreBoard->writeCentered(offsetLeft, offset2, updateScoreText(players[0]->getScore()));
|
||||
mTextScoreBoard->writeCentered(offsetLeft, offset2, updateScoreText(players.at(0)->getScore()));
|
||||
|
||||
// PLAYER1 - MULT
|
||||
mTextScoreBoard->writeCentered(offsetLeft, offset3, mLang->getText(55));
|
||||
mTextScoreBoard->writeCentered(offsetLeft, offset4, std::to_string(players[0]->getScoreMultiplier()).substr(0, 3));
|
||||
mTextScoreBoard->writeCentered(offsetLeft, offset4, std::to_string(players.at(0)->getScoreMultiplier()).substr(0, 3));
|
||||
|
||||
if (mNumPlayers == 2)
|
||||
{
|
||||
// PLAYER2 - SCORE
|
||||
mTextScoreBoard->writeCentered(offsetRight, offset1, mLang->getText(54));
|
||||
mTextScoreBoard->writeCentered(offsetRight, offset2, updateScoreText(players[1]->getScore()));
|
||||
mTextScoreBoard->writeCentered(offsetRight, offset2, updateScoreText(players.at(1)->getScore()));
|
||||
|
||||
// PLAYER2 - MULT
|
||||
mTextScoreBoard->writeCentered(offsetRight, offset3, mLang->getText(55));
|
||||
mTextScoreBoard->writeCentered(offsetRight, offset4, std::to_string(players[1]->getScoreMultiplier()).substr(0, 3));
|
||||
mTextScoreBoard->writeCentered(offsetRight, offset4, std::to_string(players.at(1)->getScoreMultiplier()).substr(0, 3));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1744,10 +1700,11 @@ void Game::createPowerBall()
|
||||
const int center = PLAY_AREA_CENTER_X - (BALLOON_WIDTH_4 / 2);
|
||||
const int right = PLAY_AREA_RIGHT - BALLOON_WIDTH_4;
|
||||
|
||||
const int luck =rand() % 3;
|
||||
const int x[3] = {left, center, right};
|
||||
const int posX = x[rand() % 3];
|
||||
const float vx[3] = {BALLOON_VELX_POSITIVE, BALLOON_VELX_POSITIVE, BALLOON_VELX_NEGATIVE};
|
||||
|
||||
Balloon *b = new Balloon(posX, posY, POWER_BALL, BALLOON_VELX_POSITIVE * (((rand() % 2) * 2) - 1), mEnemySpeed, 100, balloon4Texture, balloon4Animation, mRenderer);
|
||||
Balloon *b = new Balloon(x[luck], posY, POWER_BALL, vx[luck], mEnemySpeed, 100, balloon4Texture, balloon4Animation, mRenderer);
|
||||
balloons.push_back(b);
|
||||
|
||||
mPowerBallEnabled = true;
|
||||
@@ -2224,7 +2181,7 @@ void Game::checkBulletBalloonCollision()
|
||||
mCoffeeMachineEnabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -3163,8 +3120,6 @@ void Game::shakeScreen()
|
||||
// Bucle para el juego
|
||||
section_t Game::run()
|
||||
{
|
||||
init();
|
||||
|
||||
while (mSection.name == PROG_SECTION_GAME)
|
||||
{
|
||||
// Sección juego en pausa
|
||||
@@ -3351,17 +3306,9 @@ void Game::runGameOverScreen()
|
||||
{
|
||||
case 0: // YES
|
||||
mSection.name = PROG_SECTION_GAME;
|
||||
|
||||
if (mNumPlayers == 1)
|
||||
{
|
||||
mSection.subsection = GAME_SECTION_PLAY_1P;
|
||||
}
|
||||
else
|
||||
{
|
||||
mSection.subsection = GAME_SECTION_PLAY_2P;
|
||||
}
|
||||
|
||||
deleteAllVectorObjects();
|
||||
init();
|
||||
mSection.subsection = mNumPlayers == 1 ? GAME_SECTION_PLAY_1P : GAME_SECTION_PLAY_2P;
|
||||
break;
|
||||
|
||||
case 1: // NO
|
||||
@@ -3387,13 +3334,13 @@ void Game::runGameOverScreen()
|
||||
if (mNumPlayers == 1)
|
||||
{
|
||||
mTextBig->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - (BLOCK * 4), mLang->getText(43));
|
||||
mText->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - (BLOCK * 1), mLang->getText(44) + std::to_string(players[0]->getScore()));
|
||||
mText->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - (BLOCK * 1), mLang->getText(44) + std::to_string(players.at(0)->getScore()));
|
||||
}
|
||||
else
|
||||
{
|
||||
mTextBig->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - 36, mLang->getText(43));
|
||||
mText->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - 12, mLang->getText(77) + std::to_string(players[0]->getScore()));
|
||||
mText->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y, mLang->getText(78) + std::to_string(players[1]->getScore()));
|
||||
mText->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y - 12, mLang->getText(77) + std::to_string(players.at(0)->getScore()));
|
||||
mText->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y, mLang->getText(78) + std::to_string(players.at(1)->getScore()));
|
||||
}
|
||||
mText->writeCentered(PLAY_AREA_CENTER_X, PLAY_AREA_CENTER_Y + BLOCK * 2, mLang->getText(45));
|
||||
mMenuGameOver->render();
|
||||
@@ -3437,7 +3384,7 @@ void Game::renderDebugInfo()
|
||||
mText->writeShadowed(2, 2 + 3 * BLOCK, "mCounter: " + std::to_string(mCounter), color);
|
||||
mText->writeShadowed(2, 2 + 4 * BLOCK, "(R)enemyset: " + std::to_string(mDebug.enemySet), color);
|
||||
mText->writeShadowed(2, 2 + 5 * BLOCK, "RGB: " + std::to_string(mDebug.gradR) + "," + std::to_string(mDebug.gradG) + "," + std::to_string(mDebug.gradB), color);
|
||||
mText->writeShadowed(2, 2 + 6 * BLOCK, "(I)invuln: " + std::to_string(players[0]->getInvulnerableCounter()), color);
|
||||
mText->writeShadowed(2, 2 + 6 * BLOCK, "(I)invuln: " + std::to_string(players.at(0)->getInvulnerableCounter()), color);
|
||||
mText->writeShadowed(2, 2 + 7 * BLOCK, "balloons: " + std::to_string(countBalloons()), color);
|
||||
mText->writeShadowed(2, 2 + 8 * BLOCK, "balloonsPop: " + std::to_string(mBalloonsPopped), color);
|
||||
mText->writeShadowed(2, 2 + 9 * BLOCK, "(Z-X)ballSped:" + std::to_string(mEnemySpeed), color);
|
||||
@@ -3611,6 +3558,10 @@ void Game::checkEventHandler()
|
||||
createPowerBall();
|
||||
break;
|
||||
|
||||
case SDL_SCANCODE_O:
|
||||
stopAllBalloons(200);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -3633,4 +3584,38 @@ void Game::loadAnimations(std::string filePath, std::vector<std::string> *buffer
|
||||
}
|
||||
file.close();
|
||||
}
|
||||
}
|
||||
|
||||
// Elimina todos los objetos contenidos en vectores
|
||||
void Game::deleteAllVectorObjects()
|
||||
{
|
||||
for (auto player : players)
|
||||
{
|
||||
delete player;
|
||||
};
|
||||
players.clear();
|
||||
|
||||
for (auto ballon : balloons)
|
||||
{
|
||||
delete ballon;
|
||||
};
|
||||
balloons.clear();
|
||||
|
||||
for (auto bullet : bullets)
|
||||
{
|
||||
delete bullet;
|
||||
};
|
||||
bullets.clear();
|
||||
|
||||
for (auto item : items)
|
||||
{
|
||||
delete item;
|
||||
};
|
||||
items.clear();
|
||||
|
||||
for (auto smartSprite : smartSprites)
|
||||
{
|
||||
delete smartSprite;
|
||||
};
|
||||
smartSprites.clear();
|
||||
}
|
||||
Reference in New Issue
Block a user