working on 2p
This commit is contained in:
232
source/game.cpp
232
source/game.cpp
@@ -274,10 +274,11 @@ void Game::init()
|
||||
mGameCompleted = false;
|
||||
mGameCompletedCounter = 0;
|
||||
mSection.name = PROG_SECTION_GAME;
|
||||
mSection.subsection = GAME_SECTION_PLAY;
|
||||
mSection.subsection = GAME_SECTION_PLAY_1P;
|
||||
mMenaceCurrent = 0;
|
||||
mMenaceThreshold = 0;
|
||||
mScore = 0;
|
||||
//mScore = 0;
|
||||
mHiScore = 0;
|
||||
mHiScoreAchieved = false;
|
||||
mCurrentStage = 0;
|
||||
mStageBitmapCounter = STAGE_COUNTER;
|
||||
@@ -395,11 +396,11 @@ void Game::init()
|
||||
|
||||
// Vector de jugadores
|
||||
if (mNumPlayers == 1)
|
||||
mPlayer[0]->init(PLAY_AREA_CENTER_X - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer1Legs, mTexturePlayer1Body, mTexturePlayer1Head, mRenderer);
|
||||
mPlayer[0]->init(PLAY_AREA_CENTER_X - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer1Legs, mTexturePlayer1Body, mTexturePlayer1Head, mTexturePlayer1Death, mRenderer);
|
||||
if (mNumPlayers == 2)
|
||||
{
|
||||
mPlayer[0]->init((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((0 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer1Legs, mTexturePlayer1Body, mTexturePlayer1Head, mRenderer);
|
||||
mPlayer[1]->init((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((1 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer2Legs, mTexturePlayer2Body, mTexturePlayer2Head, mRenderer);
|
||||
mPlayer[0]->init((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((0 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer1Legs, mTexturePlayer1Body, mTexturePlayer1Head, mTexturePlayer1Death, mRenderer);
|
||||
mPlayer[1]->init((PLAY_AREA_CENTER_FIRST_QUARTER_X * ((1 * 2) + 1)) - 11, PLAY_AREA_BOTTOM - 24, mTexturePlayer2Legs, mTexturePlayer2Body, mTexturePlayer2Head, mTexturePlayer2Death, mRenderer);
|
||||
}
|
||||
|
||||
// Establece a cero todos los valores del vector de objetos globo
|
||||
@@ -1467,10 +1468,10 @@ void Game::increaseStageCurrentPower(Uint8 power)
|
||||
}
|
||||
|
||||
// Establece el valor de la variable
|
||||
void Game::setScore(Uint32 score)
|
||||
/*void Game::setScore(Uint32 score)
|
||||
{
|
||||
mScore = score;
|
||||
}
|
||||
}*/
|
||||
|
||||
// Establece el valor de la variable
|
||||
void Game::setHiScore(Uint32 score)
|
||||
@@ -1481,23 +1482,24 @@ void Game::setHiScore(Uint32 score)
|
||||
// Actualiza el valor de mHiScore en caso necesario
|
||||
void Game::updateHiScore()
|
||||
{
|
||||
// La puntuación es mayor que la máxima puntuación
|
||||
if (mScore > mHiScore)
|
||||
{
|
||||
// Actualiza la máxima puntuación
|
||||
mHiScore = mScore;
|
||||
|
||||
// Almacena la máxima puntuación en el fichero junto con un checksum
|
||||
mScoreDataFile[0] = mHiScore;
|
||||
mScoreDataFile[1] = mHiScore % 43;
|
||||
|
||||
// Si superamos la máxima puntuación
|
||||
if (mHiScoreAchieved == false)
|
||||
// Si la puntuación actual es mayor que la máxima puntuación
|
||||
for (int i = 0; i < mNumPlayers; i++)
|
||||
if (mPlayer[i]->getScore() > mHiScore)
|
||||
{
|
||||
mHiScoreAchieved = true;
|
||||
JA_PlaySound(mSoundHiScore);
|
||||
// Actualiza la máxima puntuación
|
||||
mHiScore = mPlayer[i]->getScore();
|
||||
|
||||
// Almacena la máxima puntuación en el fichero junto con un checksum
|
||||
mScoreDataFile[0] = mHiScore;
|
||||
mScoreDataFile[1] = mHiScore % 43;
|
||||
|
||||
// Si se supera la máxima puntuación emite sonido
|
||||
if (mHiScoreAchieved == false)
|
||||
{
|
||||
mHiScoreAchieved = true;
|
||||
JA_PlaySound(mSoundHiScore);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Transforma un valor numérico en una cadena de 6 cifras
|
||||
@@ -1554,7 +1556,7 @@ void Game::renderScoreBoard()
|
||||
|
||||
// SCORE
|
||||
mText->writeCentered(PLAY_AREA_CENTER_FIRST_QUARTER_X, SCORE_WORD_Y - 6, mTextStrings[39], 0);
|
||||
mText->writeCentered(PLAY_AREA_CENTER_FIRST_QUARTER_X, SCORE_NUMBER_Y - 6, updateScoreText(mScore), 0);
|
||||
mText->writeCentered(PLAY_AREA_CENTER_FIRST_QUARTER_X, SCORE_NUMBER_Y - 6, updateScoreText(mPlayer[0]->getScore()), 0);
|
||||
|
||||
// HI-SCORE
|
||||
mText->writeCentered(PLAY_AREA_CENTER_THIRD_QUARTER_X, HISCORE_WORD_Y - 6, mTextStrings[40], 0);
|
||||
@@ -1588,16 +1590,19 @@ void Game::updatePlayer()
|
||||
mPlayer[i]->update();
|
||||
|
||||
// Comprueba la colisión entre el jugador y los globos
|
||||
if (checkPlayerBalloonCollision())
|
||||
if (checkPlayerBalloonCollision(i))
|
||||
{
|
||||
if (mPlayer[i]->isAlive())
|
||||
{
|
||||
if (mDemo.enabled)
|
||||
mSection = {PROG_SECTION_TITLE, TITLE_SECTION_INSTRUCTIONS};
|
||||
else
|
||||
killPlayer();
|
||||
killPlayer(i);
|
||||
}
|
||||
}
|
||||
|
||||
// Comprueba las colisiones entre el jugador y los items
|
||||
checkPlayerItemCollision(i);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1639,7 +1644,12 @@ void Game::updateStage()
|
||||
// Actualiza el estado de muerte
|
||||
void Game::updateDeath()
|
||||
{
|
||||
if (!mPlayer[0]->isAlive())
|
||||
// Comprueba si todos los jugadores estan muertos
|
||||
bool allPlayersAreDead = true;
|
||||
for (int i = 0; i < mNumPlayers; i++)
|
||||
allPlayersAreDead &= (!mPlayer[i]->isAlive());
|
||||
|
||||
if (allPlayersAreDead)
|
||||
{
|
||||
if (mDeathCounter > 0)
|
||||
{
|
||||
@@ -1948,7 +1958,7 @@ void Game::destroyBalloon(Uint8 index)
|
||||
|
||||
// Otorga los puntos correspondientes al globo
|
||||
mPlayer[0]->addScore(Uint32(score * mPlayer[0]->getScoreMultiplier()));
|
||||
setScore(mPlayer[0]->getScore());
|
||||
//setScore(mPlayer[0]->getScore());
|
||||
updateHiScore();
|
||||
|
||||
// Aumenta el poder de la fase
|
||||
@@ -2022,73 +2032,70 @@ Uint8 Game::countBalloons()
|
||||
}
|
||||
|
||||
// Comprueba la colisión entre el jugador y los globos activos
|
||||
bool Game::checkPlayerBalloonCollision()
|
||||
bool Game::checkPlayerBalloonCollision(int index)
|
||||
{
|
||||
for (int j = 0; j < mNumPlayers; j++)
|
||||
for (int i = 0; i < MAX_BALLOONS; i++)
|
||||
if ((mBalloon[i]->isEnabled()) && !(mBalloon[i]->isStopped()) && !(mBalloon[i]->isInvulnerable()))
|
||||
if (checkCollision(mPlayer[j]->getCollider(), mBalloon[i]->getCollider()))
|
||||
return true;
|
||||
for (int i = 0; i < MAX_BALLOONS; i++)
|
||||
if ((mBalloon[i]->isEnabled()) && !(mBalloon[i]->isStopped()) && !(mBalloon[i]->isInvulnerable()))
|
||||
if (checkCollision(mPlayer[index]->getCollider(), mBalloon[i]->getCollider()))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Comprueba la colisión entre el jugador y los items
|
||||
void Game::checkPlayerItemCollision()
|
||||
void Game::checkPlayerItemCollision(int index)
|
||||
{
|
||||
for (int j = 0; j < mNumPlayers; j++)
|
||||
|
||||
if (mPlayer[j]->isAlive())
|
||||
for (int i = 0; i < MAX_ITEMS; i++)
|
||||
if (mPlayer[index]->isAlive())
|
||||
for (int i = 0; i < MAX_ITEMS; i++)
|
||||
{
|
||||
if (mItem[i]->isEnabled())
|
||||
{
|
||||
if (mItem[i]->isEnabled())
|
||||
if (checkCollision(mPlayer[index]->getCollider(), mItem[i]->getCollider()))
|
||||
{
|
||||
if (checkCollision(mPlayer[j]->getCollider(), mItem[i]->getCollider()))
|
||||
switch (mItem[i]->getClass())
|
||||
{
|
||||
switch (mItem[i]->getClass())
|
||||
{
|
||||
case ITEM_POINTS_1_DISK:
|
||||
mPlayer[j]->addScore(1000);
|
||||
setScore(mPlayer[j]->getScore());
|
||||
updateHiScore();
|
||||
createItemScoreSprite(mItem[i]->getPosX() + (mItem[i]->getWidth() / 2) - (m1000Bitmap->getWidth() / 2), mPlayer[j]->getPosY(), m1000Bitmap);
|
||||
JA_PlaySound(mSoundItemPickup);
|
||||
break;
|
||||
case ITEM_POINTS_2_GAVINA:
|
||||
mPlayer[j]->addScore(2500);
|
||||
setScore(mPlayer[j]->getScore());
|
||||
updateHiScore();
|
||||
createItemScoreSprite(mItem[i]->getPosX() + (mItem[i]->getWidth() / 2) - (m2500Bitmap->getWidth() / 2), mPlayer[j]->getPosY(), m2500Bitmap);
|
||||
JA_PlaySound(mSoundItemPickup);
|
||||
break;
|
||||
case ITEM_POINTS_3_PACMAR:
|
||||
mPlayer[j]->addScore(5000);
|
||||
setScore(mPlayer[j]->getScore());
|
||||
updateHiScore();
|
||||
createItemScoreSprite(mItem[i]->getPosX() + (mItem[i]->getWidth() / 2) - (m5000Bitmap->getWidth() / 2), mPlayer[j]->getPosY(), m5000Bitmap);
|
||||
JA_PlaySound(mSoundItemPickup);
|
||||
break;
|
||||
case ITEM_CLOCK:
|
||||
enableTimeStopItem();
|
||||
JA_PlaySound(mSoundItemPickup);
|
||||
break;
|
||||
case ITEM_COFFEE:
|
||||
mPlayer[j]->giveExtraHit();
|
||||
JA_PlaySound(mSoundItemPickup);
|
||||
break;
|
||||
case ITEM_COFFEE_MACHINE:
|
||||
mPlayer[j]->setPowerUp(true);
|
||||
JA_PlaySound(mSoundItemPickup);
|
||||
mCoffeeMachineEnabled = false;
|
||||
break;
|
||||
case ITEM_POINTS_1_DISK:
|
||||
mPlayer[index]->addScore(1000);
|
||||
//setScore(mPlayer[index]->getScore());
|
||||
updateHiScore();
|
||||
createItemScoreSprite(mItem[i]->getPosX() + (mItem[i]->getWidth() / 2) - (m1000Bitmap->getWidth() / 2), mPlayer[index]->getPosY(), m1000Bitmap);
|
||||
JA_PlaySound(mSoundItemPickup);
|
||||
break;
|
||||
case ITEM_POINTS_2_GAVINA:
|
||||
mPlayer[index]->addScore(2500);
|
||||
//setScore(mPlayer[index]->getScore());
|
||||
updateHiScore();
|
||||
createItemScoreSprite(mItem[i]->getPosX() + (mItem[i]->getWidth() / 2) - (m2500Bitmap->getWidth() / 2), mPlayer[index]->getPosY(), m2500Bitmap);
|
||||
JA_PlaySound(mSoundItemPickup);
|
||||
break;
|
||||
case ITEM_POINTS_3_PACMAR:
|
||||
mPlayer[index]->addScore(5000);
|
||||
//setScore(mPlayer[index]->getScore());
|
||||
updateHiScore();
|
||||
createItemScoreSprite(mItem[i]->getPosX() + (mItem[i]->getWidth() / 2) - (m5000Bitmap->getWidth() / 2), mPlayer[index]->getPosY(), m5000Bitmap);
|
||||
JA_PlaySound(mSoundItemPickup);
|
||||
break;
|
||||
case ITEM_CLOCK:
|
||||
enableTimeStopItem();
|
||||
JA_PlaySound(mSoundItemPickup);
|
||||
break;
|
||||
case ITEM_COFFEE:
|
||||
mPlayer[index]->giveExtraHit();
|
||||
JA_PlaySound(mSoundItemPickup);
|
||||
break;
|
||||
case ITEM_COFFEE_MACHINE:
|
||||
mPlayer[index]->setPowerUp(true);
|
||||
JA_PlaySound(mSoundItemPickup);
|
||||
mCoffeeMachineEnabled = false;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
mItem[i]->erase();
|
||||
default:
|
||||
break;
|
||||
}
|
||||
mItem[i]->erase();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Comprueba y procesa la colisión entre las balas y los globos
|
||||
@@ -2103,7 +2110,7 @@ void Game::checkBulletBalloonCollision()
|
||||
const int index = mBullet[j]->getOwner();
|
||||
mPlayer[index]->incScoreMultiplier();
|
||||
mPlayer[index]->addScore(Uint32(mBalloon[i]->getScore() * mPlayer[index]->getScoreMultiplier()));
|
||||
setScore(mPlayer[index]->getScore());
|
||||
//setScore(mPlayer[index]->getScore());
|
||||
updateHiScore();
|
||||
|
||||
// Explota el globo
|
||||
@@ -2339,12 +2346,16 @@ void Game::throwCoffee(int x, int y)
|
||||
}
|
||||
|
||||
// Crea un SmartSprite para arrojar al jugador al morir
|
||||
void Game::throwPlayer(int x, int y)
|
||||
void Game::throwPlayer(int x, int y, int index)
|
||||
{
|
||||
const int sentit = ((rand() % 2) ? 1 : -1);
|
||||
|
||||
mDeathIndex = getSmartSpriteFreeIndex();
|
||||
mSmartSprite[mDeathIndex]->init(mTexturePlayer1Death, mRenderer);
|
||||
/*if (index == 1)
|
||||
mSmartSprite[mDeathIndex]->init(mTexturePlayer1Death, mRenderer);
|
||||
if (index == 2)
|
||||
mSmartSprite[mDeathIndex]->init(mTexturePlayer2Death, mRenderer);*/
|
||||
mSmartSprite[mDeathIndex]->init(mPlayer[index]->getDeadTexture(), mRenderer);
|
||||
mSmartSprite[mDeathIndex]->setPosX(x);
|
||||
mSmartSprite[mDeathIndex]->setPosY(y);
|
||||
mSmartSprite[mDeathIndex]->setWidth(24);
|
||||
@@ -2392,30 +2403,28 @@ void Game::resetSmartSprites()
|
||||
}
|
||||
|
||||
// Acciones a realizar cuando el jugador muere
|
||||
void Game::killPlayer()
|
||||
void Game::killPlayer(int index)
|
||||
{
|
||||
for (int i = 0; i < mNumPlayers; i++)
|
||||
|
||||
if (!mPlayer[i]->isInvulnerable())
|
||||
if (!mPlayer[index]->isInvulnerable())
|
||||
{
|
||||
if (mPlayer[index]->hasExtraHit())
|
||||
{
|
||||
if (mPlayer[i]->hasExtraHit())
|
||||
{
|
||||
mPlayer[i]->removeExtraHit();
|
||||
throwCoffee(mPlayer[i]->getPosX() + (mPlayer[i]->getWidth() / 2), mPlayer[i]->getPosY() + (mPlayer[i]->getHeight() / 2));
|
||||
JA_PlaySound(mSoundCoffeeOut);
|
||||
}
|
||||
else
|
||||
{
|
||||
stopAllBalloons(10);
|
||||
JA_StopMusic();
|
||||
JA_PlaySound(mSoundPlayerCollision);
|
||||
shakeScreen();
|
||||
SDL_Delay(500);
|
||||
JA_PlaySound(mSoundCoffeeOut);
|
||||
throwPlayer(mPlayer[i]->getPosX(), mPlayer[i]->getPosY());
|
||||
mPlayer[i]->setAlive(false);
|
||||
}
|
||||
mPlayer[index]->removeExtraHit();
|
||||
throwCoffee(mPlayer[index]->getPosX() + (mPlayer[index]->getWidth() / 2), mPlayer[index]->getPosY() + (mPlayer[index]->getHeight() / 2));
|
||||
JA_PlaySound(mSoundCoffeeOut);
|
||||
}
|
||||
else
|
||||
{
|
||||
stopAllBalloons(10);
|
||||
JA_StopMusic();
|
||||
JA_PlaySound(mSoundPlayerCollision);
|
||||
shakeScreen();
|
||||
SDL_Delay(500);
|
||||
JA_PlaySound(mSoundCoffeeOut);
|
||||
throwPlayer(mPlayer[index]->getPosX(), mPlayer[index]->getPosY(), index);
|
||||
mPlayer[index]->setAlive(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Calcula y establece el valor de amenaza en funcion de los globos activos
|
||||
@@ -2565,9 +2574,6 @@ void Game::updatePlayField()
|
||||
// Comprueba las colisiones entre globos y balas
|
||||
checkBulletBalloonCollision();
|
||||
|
||||
// Comprueba las colisiones entre el jugador y los items
|
||||
checkPlayerItemCollision();
|
||||
|
||||
// Comprueba el nivel de amenaza para ver si se han de crear nuevos enemigos
|
||||
if (!mGameCompleted)
|
||||
updateMenace();
|
||||
@@ -2944,7 +2950,7 @@ section_t Game::run()
|
||||
runGameOverScreen();
|
||||
|
||||
// Sección juego jugando
|
||||
if (mSection.subsection == GAME_SECTION_PLAY)
|
||||
if ((mSection.subsection == GAME_SECTION_PLAY_1P) || (mSection.subsection == GAME_SECTION_PLAY_2P))
|
||||
{
|
||||
// Si la música no está sonando
|
||||
if ((JA_GetMusicState() == JA_MUSIC_INVALID) || (JA_GetMusicState() == JA_MUSIC_STOPPED))
|
||||
@@ -3112,7 +3118,10 @@ void Game::runPausedGame()
|
||||
case 0:
|
||||
//mMenuPause->reset();
|
||||
mSection.name = PROG_SECTION_GAME;
|
||||
mSection.subsection = GAME_SECTION_PLAY;
|
||||
if (mNumPlayers == 1)
|
||||
mSection.subsection = GAME_SECTION_PLAY_1P;
|
||||
else
|
||||
mSection.subsection = GAME_SECTION_PLAY_2P;
|
||||
if (JA_GetMusicState() == JA_MUSIC_PAUSED)
|
||||
JA_ResumeMusic();
|
||||
break;
|
||||
@@ -3163,7 +3172,10 @@ void Game::runGameOverScreen()
|
||||
{
|
||||
case 0: // YES
|
||||
mSection.name = PROG_SECTION_GAME;
|
||||
mSection.subsection = GAME_SECTION_PLAY;
|
||||
if (mNumPlayers == 1)
|
||||
mSection.subsection = GAME_SECTION_PLAY_1P;
|
||||
else
|
||||
mSection.subsection = GAME_SECTION_PLAY_2P;
|
||||
init();
|
||||
break;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user