added difficulty (speed and points)

This commit is contained in:
2021-08-28 19:51:32 +02:00
parent 914b9e4123
commit 502835453a
3 changed files with 60 additions and 26 deletions

View File

@@ -578,9 +578,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, mFileList, mLang, mInput1, mInput2, false); mGame = new Game(1, mRenderer, mFileList, mLang, mInput1, mInput2, false, mOptions->difficulty);
if (mSection.subsection == GAME_SECTION_PLAY_2P) if (mSection.subsection == GAME_SECTION_PLAY_2P)
mGame = new Game(2, mRenderer, mFileList, mLang, mInput1, mInput2, false); mGame = new Game(2, mRenderer, mFileList, mLang, mInput1, mInput2, false, mOptions->difficulty);
setSection(mGame->run()); setSection(mGame->run());
delete mGame; delete mGame;
} }

View File

@@ -5,7 +5,7 @@
#endif #endif
// Constructor // Constructor
Game::Game(int numPlayers, SDL_Renderer *renderer, std::string *filelist, Lang *lang, Input *input1, Input *input2, bool demo) Game::Game(int numPlayers, SDL_Renderer *renderer, std::string *filelist, Lang *lang, Input *input1, Input *input2, bool demo, int difficulty)
{ {
// Copia los punteros // Copia los punteros
mRenderer = renderer; mRenderer = renderer;
@@ -13,8 +13,11 @@ Game::Game(int numPlayers, SDL_Renderer *renderer, std::string *filelist, Lang *
mLang = lang; mLang = lang;
mInput[0] = input1; mInput[0] = input1;
mInput[1] = input2; mInput[1] = input2;
// Pasa variables
mDemo.enabled = demo; mDemo.enabled = demo;
mNumPlayers = numPlayers; mNumPlayers = numPlayers;
mDifficulty = difficulty;
// Crea los objetos // Crea los objetos
for (int i = 0; i < mNumPlayers; i++) for (int i = 0; i < mNumPlayers; i++)
@@ -284,6 +287,26 @@ void Game::init()
mTicksSpeed = 15; mTicksSpeed = 15;
// Inicializa las variables // Inicializa las variables
switch (mDifficulty)
{
case DIFFICULTY_EASY:
mDefaultEnemySpeed = BALLOON_SPEED_1;
mDifficultyScoreMultiplier = 0.5f;
break;
case DIFFICULTY_NORMAL:
mDefaultEnemySpeed = BALLOON_SPEED_1;
mDifficultyScoreMultiplier = 1.0f;
break;
case DIFFICULTY_HARD:
mDefaultEnemySpeed = BALLOON_SPEED_5;
mDifficultyScoreMultiplier = 1.5f;
break;
default:
break;
}
mGameCompleted = false; mGameCompleted = false;
mGameCompletedCounter = 0; mGameCompletedCounter = 0;
mSection.name = PROG_SECTION_GAME; mSection.name = PROG_SECTION_GAME;
@@ -303,7 +326,7 @@ void Game::init()
mBalloonsPopped = 0; mBalloonsPopped = 0;
mLastEnemyDeploy = 0; mLastEnemyDeploy = 0;
mEnemyDeployCounter = 0; mEnemyDeployCounter = 0;
mEnemySpeed = BALLOON_SPEED_1; mEnemySpeed = mDefaultEnemySpeed;
mEffect.flash = false; mEffect.flash = false;
mEffect.shake = false; mEffect.shake = false;
mEffect.shakeCounter = SHAKE_COUNTER; mEffect.shakeCounter = SHAKE_COUNTER;
@@ -1677,7 +1700,7 @@ void Game::updateStage()
} }
JA_PlaySound(mSoundStageChange); JA_PlaySound(mSoundStageChange);
mStageBitmapCounter = 0; mStageBitmapCounter = 0;
mEnemySpeed = BALLOON_SPEED_1; mEnemySpeed = mDefaultEnemySpeed;
setBalloonSpeed(mEnemySpeed); setBalloonSpeed(mEnemySpeed);
mEffect.flash = true; mEffect.flash = true;
mEffect.shake = true; mEffect.shake = true;
@@ -1867,31 +1890,39 @@ void Game::setBalloonSpeed(float speed)
// Incrementa la velocidad de los globos // Incrementa la velocidad de los globos
void Game::incBalloonSpeed() void Game::incBalloonSpeed()
{ {
if (mEnemySpeed == BALLOON_SPEED_1) // La velocidad solo se incrementa en el modo normal
mEnemySpeed = BALLOON_SPEED_2; if (mDifficulty == DIFFICULTY_NORMAL)
else if (mEnemySpeed == BALLOON_SPEED_2) {
mEnemySpeed = BALLOON_SPEED_3; if (mEnemySpeed == BALLOON_SPEED_1)
else if (mEnemySpeed == BALLOON_SPEED_3) mEnemySpeed = BALLOON_SPEED_2;
mEnemySpeed = BALLOON_SPEED_4; else if (mEnemySpeed == BALLOON_SPEED_2)
else if (mEnemySpeed == BALLOON_SPEED_4) mEnemySpeed = BALLOON_SPEED_3;
mEnemySpeed = BALLOON_SPEED_5; else if (mEnemySpeed == BALLOON_SPEED_3)
mEnemySpeed = BALLOON_SPEED_4;
else if (mEnemySpeed == BALLOON_SPEED_4)
mEnemySpeed = BALLOON_SPEED_5;
setBalloonSpeed(mEnemySpeed); setBalloonSpeed(mEnemySpeed);
}
} }
// Decrementa la velocidad de los globos // Decrementa la velocidad de los globos
void Game::decBalloonSpeed() void Game::decBalloonSpeed()
{ {
if (mEnemySpeed == BALLOON_SPEED_5) // La velocidad solo se decrementa en el modo normal
mEnemySpeed = BALLOON_SPEED_4; if (mDifficulty == DIFFICULTY_NORMAL)
else if (mEnemySpeed == BALLOON_SPEED_4) {
mEnemySpeed = BALLOON_SPEED_3; if (mEnemySpeed == BALLOON_SPEED_5)
else if (mEnemySpeed == BALLOON_SPEED_3) mEnemySpeed = BALLOON_SPEED_4;
mEnemySpeed = BALLOON_SPEED_2; else if (mEnemySpeed == BALLOON_SPEED_4)
else if (mEnemySpeed == BALLOON_SPEED_2) mEnemySpeed = BALLOON_SPEED_3;
mEnemySpeed = BALLOON_SPEED_1; else if (mEnemySpeed == BALLOON_SPEED_3)
mEnemySpeed = BALLOON_SPEED_2;
else if (mEnemySpeed == BALLOON_SPEED_2)
mEnemySpeed = BALLOON_SPEED_1;
setBalloonSpeed(mEnemySpeed); setBalloonSpeed(mEnemySpeed);
}
} }
// Actualiza la velocidad de los globos en funcion del poder acumulado de la fase // Actualiza la velocidad de los globos en funcion del poder acumulado de la fase
@@ -2010,7 +2041,7 @@ void Game::destroyBalloon(Uint8 index)
} }
// Otorga los puntos correspondientes al globo // Otorga los puntos correspondientes al globo
mPlayer[0]->addScore(Uint32(score * mPlayer[0]->getScoreMultiplier())); mPlayer[0]->addScore(Uint32(score * mPlayer[0]->getScoreMultiplier()*mDifficultyScoreMultiplier));
//setScore(mPlayer[0]->getScore()); //setScore(mPlayer[0]->getScore());
updateHiScore(); updateHiScore();
@@ -2165,7 +2196,7 @@ void Game::checkBulletBalloonCollision()
// Otorga los puntos correspondientes al globo al jugador que disparó la bala // Otorga los puntos correspondientes al globo al jugador que disparó la bala
int index = mBullet[j]->getOwner(); int index = mBullet[j]->getOwner();
mPlayer[index]->incScoreMultiplier(); mPlayer[index]->incScoreMultiplier();
mPlayer[index]->addScore(Uint32(mBalloon[i]->getScore() * mPlayer[index]->getScoreMultiplier())); mPlayer[index]->addScore(Uint32(mBalloon[i]->getScore() * mPlayer[index]->getScoreMultiplier() * mDifficultyScoreMultiplier));
//setScore(mPlayer[index]->getScore()); //setScore(mPlayer[index]->getScore());
updateHiScore(); updateHiScore();

View File

@@ -179,6 +179,7 @@ private:
Uint8 mLastEnemyDeploy; // Guarda cual ha sido la última formación desplegada para no repetir; Uint8 mLastEnemyDeploy; // Guarda cual ha sido la última formación desplegada para no repetir;
Uint8 mEnemyDeployCounter; // Cuando se lanza una formación, se le da un valor y no sale otra hasta que llegue a cero Uint8 mEnemyDeployCounter; // Cuando se lanza una formación, se le da un valor y no sale otra hasta que llegue a cero
float mEnemySpeed; // Velocidad a la que se mueven los enemigos float mEnemySpeed; // Velocidad a la que se mueven los enemigos
float mDefaultEnemySpeed; // Velocidad base de los enemigos, sin incrementar
effect_t mEffect; // Variable para gestionar los efectos visuales effect_t mEffect; // Variable para gestionar los efectos visuales
helper_t mHelper; // Variable para gestionar las ayudas helper_t mHelper; // Variable para gestionar las ayudas
bool mPowerBallEnabled; // Indica si hay una powerball ya activa bool mPowerBallEnabled; // Indica si hay una powerball ya activa
@@ -188,6 +189,8 @@ private:
float mSin[360]; // Vector con los valores del seno para 360 grados float mSin[360]; // Vector con los valores del seno para 360 grados
bool mGameCompleted; // Indica si se ha completado la partida, llegando al final de la ultima pantalla bool mGameCompleted; // Indica si se ha completado la partida, llegando al final de la ultima pantalla
int mGameCompletedCounter; // Contador para el tramo final, cuando se ha completado la partida y ya no aparecen más enemigos int mGameCompletedCounter; // Contador para el tramo final, cuando se ha completado la partida y ya no aparecen más enemigos
int mDifficulty; // Dificultad del juego
float mDifficultyScoreMultiplier; // Multiplicador de puntos en función de la dificultad
struct demo_t struct demo_t
{ {
@@ -210,7 +213,7 @@ private:
public: public:
// Constructor // Constructor
Game(int numPlayers, SDL_Renderer *renderer, std::string *filelist, Lang *lang, Input *input1, Input *input2, bool demo); Game(int numPlayers, SDL_Renderer *renderer, std::string *filelist, Lang *lang, Input *input1, Input *input2, bool demo, int difficulty);
// Destructor // Destructor
~Game(); ~Game();