working on 2p

This commit is contained in:
2021-08-23 21:53:54 +02:00
parent 26ac51b1be
commit 52ea512eab
5 changed files with 67 additions and 56 deletions

View File

@@ -17,7 +17,7 @@ Bullet::~Bullet()
} }
// Iniciador // Iniciador
void Bullet::init(int x, int y, int kind, bool poweredUp, LTexture *texture, SDL_Renderer *renderer) void Bullet::init(int x, int y, int kind, bool poweredUp, int owner, LTexture *texture, SDL_Renderer *renderer)
{ {
// Posición inicial del objeto // Posición inicial del objeto
mPosX = x; mPosX = x;
@@ -33,6 +33,9 @@ void Bullet::init(int x, int y, int kind, bool poweredUp, LTexture *texture, SDL
// Tipo de bala // Tipo de bala
mKind = kind; mKind = kind;
// Identificador del dueño del objeto
mOwner = -1;
// Textura con los gráficos del objeto // Textura con los gráficos del objeto
mSprite->setTexture(texture); mSprite->setTexture(texture);
@@ -157,7 +160,7 @@ void Bullet::testMove()
// Deshabilita el objeto // Deshabilita el objeto
void Bullet::erase() void Bullet::erase()
{ {
init(0, 0, 0, false, nullptr, nullptr); init(0, 0, 0, false, -1, nullptr, nullptr);
} }
// Comprueba si el objeto está activo // Comprueba si el objeto está activo
@@ -209,6 +212,12 @@ int Bullet::getKind()
return mKind; return mKind;
} }
// Obtiene el valor de la variable
int Bullet::getOwner()
{
return mOwner;
}
// Obtiene el circulo de colisión // Obtiene el circulo de colisión
circle_t &Bullet::getCollider() circle_t &Bullet::getCollider()
{ {

View File

@@ -16,6 +16,7 @@ private:
int mVelX; // Velocidad en el eje X int mVelX; // Velocidad en el eje X
int mVelY; // Velocidad en el eje Y int mVelY; // Velocidad en el eje Y
int mKind; // Tipo de objeto int mKind; // Tipo de objeto
int mOwner; // Identificador del dueño del objeto
Sprite *mSprite; // Sprite con los graficos y métodos de pintado Sprite *mSprite; // Sprite con los graficos y métodos de pintado
circle_t mCollider; // Circulo de colisión del objeto circle_t mCollider; // Circulo de colisión del objeto
@@ -30,7 +31,7 @@ public:
~Bullet(); ~Bullet();
// Iniciador // Iniciador
void init(int x, int y, int kind, bool poweredUp, LTexture *texture, SDL_Renderer *renderer); void init(int x, int y, int kind, bool poweredUp, int owner, LTexture *texture, SDL_Renderer *renderer);
// Pinta el objeto en pantalla // Pinta el objeto en pantalla
void render(); void render();
@@ -62,6 +63,9 @@ public:
// Obtiene el valor de la variable // Obtiene el valor de la variable
int getKind(); int getKind();
// Obtiene el valor de la variable
int getOwner();
// Obtiene el circulo de colisión // Obtiene el circulo de colisión
circle_t &getCollider(); circle_t &getCollider();
}; };

View File

@@ -1552,35 +1552,32 @@ void Game::renderScoreBoard()
if (mPlayer[0]->isAlive()) if (mPlayer[0]->isAlive())
mSpriteScoreBoard->render(); mSpriteScoreBoard->render();
//if (!mDemo.enabled) // SCORE
{ mText->writeCentered(PLAY_AREA_CENTER_FIRST_QUARTER_X, SCORE_WORD_Y - 6, mTextStrings[39], 0);
// SCORE mText->writeCentered(PLAY_AREA_CENTER_FIRST_QUARTER_X, SCORE_NUMBER_Y - 6, updateScoreText(mScore), 0);
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);
// HI-SCORE // HI-SCORE
mText->writeCentered(PLAY_AREA_CENTER_THIRD_QUARTER_X, HISCORE_WORD_Y - 6, mTextStrings[40], 0); mText->writeCentered(PLAY_AREA_CENTER_THIRD_QUARTER_X, HISCORE_WORD_Y - 6, mTextStrings[40], 0);
mText->writeCentered(PLAY_AREA_CENTER_THIRD_QUARTER_X, HISCORE_NUMBER_Y - 6, updateScoreText(mHiScore), 0); mText->writeCentered(PLAY_AREA_CENTER_THIRD_QUARTER_X, HISCORE_NUMBER_Y - 6, updateScoreText(mHiScore), 0);
// MULT // MULT
color.g = 255; color.g = 255;
mText->writeColored(MULTIPLIER_WORD_X, MULTIPLIER_WORD_Y - 6, mTextStrings[41], color); mText->writeColored(MULTIPLIER_WORD_X, MULTIPLIER_WORD_Y - 6, mTextStrings[41], color);
color.g = 192; color.g = 192;
mTextX2->writeShadowed(PLAY_AREA_CENTER_X - 16, SCORE_WORD_Y + 5, std::to_string(mPlayer[0]->getScoreMultiplier()).substr(0, 1), color, 1); mTextX2->writeShadowed(PLAY_AREA_CENTER_X - 16, SCORE_WORD_Y + 5, std::to_string(mPlayer[0]->getScoreMultiplier()).substr(0, 1), color, 1);
mText->writeShadowed(PLAY_AREA_CENTER_X - 2, SCORE_WORD_Y + 12, ".", color); mText->writeShadowed(PLAY_AREA_CENTER_X - 2, SCORE_WORD_Y + 12, ".", color);
mText->writeShadowed(PLAY_AREA_CENTER_X + 4, SCORE_WORD_Y + 12, std::to_string(mPlayer[0]->getScoreMultiplier()).substr(2, 1), color); mText->writeShadowed(PLAY_AREA_CENTER_X + 4, SCORE_WORD_Y + 12, std::to_string(mPlayer[0]->getScoreMultiplier()).substr(2, 1), color);
// STAGE // STAGE
mText->writeCentered(PLAY_AREA_CENTER_FIRST_QUARTER_X, SCORE_NUMBER_Y + 4, mTextStrings[42] + std::to_string(mStage[mCurrentStage].number), 0); mText->writeCentered(PLAY_AREA_CENTER_FIRST_QUARTER_X, SCORE_NUMBER_Y + 4, mTextStrings[42] + std::to_string(mStage[mCurrentStage].number), 0);
// POWER // POWER
mSpritePowerMeter->setSpriteClip(256, 184, 40, 8); mSpritePowerMeter->setSpriteClip(256, 184, 40, 8);
mSpritePowerMeter->render(); mSpritePowerMeter->render();
const float percent = (mStage[mCurrentStage].currentPower * 40.0f) / mStage[mCurrentStage].powerToComplete; const float percent = (mStage[mCurrentStage].currentPower * 40.0f) / mStage[mCurrentStage].powerToComplete;
mSpritePowerMeter->setSpriteClip(296, 184, (int)percent, 8); mSpritePowerMeter->setSpriteClip(296, 184, (int)percent, 8);
mSpritePowerMeter->render(); mSpritePowerMeter->render();
}
} }
// Actualiza las variables del jugador // Actualiza las variables del jugador
@@ -2102,19 +2099,20 @@ void Game::checkBulletBalloonCollision()
if (mBalloon[i]->isEnabled() && (!mBalloon[i]->isInvulnerable()) && mBullet[j]->isActive()) if (mBalloon[i]->isEnabled() && (!mBalloon[i]->isInvulnerable()) && mBullet[j]->isActive())
if (checkCollision(mBalloon[i]->getCollider(), mBullet[j]->getCollider())) if (checkCollision(mBalloon[i]->getCollider(), mBullet[j]->getCollider()))
{ {
// Otorga los puntos correspondientes al globo // Otorga los puntos correspondientes al globo al jugador que disparó la bala
mPlayer[0]->incScoreMultiplier(); const int index = mBullet[j]->getOwner();
mPlayer[0]->addScore(Uint32(mBalloon[i]->getScore() * mPlayer[0]->getScoreMultiplier())); mPlayer[index]->incScoreMultiplier();
setScore(mPlayer[0]->getScore()); mPlayer[index]->addScore(Uint32(mBalloon[i]->getScore() * mPlayer[index]->getScoreMultiplier()));
setScore(mPlayer[index]->getScore());
updateHiScore(); updateHiScore();
// Explota el globo // Explota el globo
popBalloon(i); popBalloon(i);
// Si no es el modo demo, genera un sonido // Si no es el modo demo, genera un sonido
if (!mDemo.enabled) if (!mDemo.enabled)
JA_PlaySound(mSoundBalloon); JA_PlaySound(mSoundBalloon);
// Destruye la bala // Destruye la bala
mBullet[j]->erase(); mBullet[j]->erase();
@@ -2167,9 +2165,9 @@ void Game::resetBullets()
} }
// Crea un objeto bala // Crea un objeto bala
void Game::createBullet(int x, int y, Uint8 kind, bool poweredUp) void Game::createBullet(int x, int y, Uint8 kind, bool poweredUp, int owner)
{ {
mBullet[getBulletFreeIndex()]->init(x, y, kind, poweredUp, mTextureBullet, mRenderer); mBullet[getBulletFreeIndex()]->init(x, y, kind, poweredUp, owner, mTextureBullet, mRenderer);
} }
// Actualiza los items // Actualiza los items
@@ -2688,37 +2686,38 @@ void Game::checkGameInput()
// Modo Demo activo // Modo Demo activo
if (mDemo.enabled) if (mDemo.enabled)
{ {
const int index = 0;
if (mDemo.dataFile[mDemo.counter].left == 1) if (mDemo.dataFile[mDemo.counter].left == 1)
mPlayer[0]->setInput(INPUT_LEFT); mPlayer[index]->setInput(INPUT_LEFT);
if (mDemo.dataFile[mDemo.counter].right == 1) if (mDemo.dataFile[mDemo.counter].right == 1)
mPlayer[0]->setInput(INPUT_RIGHT); mPlayer[index]->setInput(INPUT_RIGHT);
if (mDemo.dataFile[mDemo.counter].noInput == 1) if (mDemo.dataFile[mDemo.counter].noInput == 1)
mPlayer[0]->setInput(NO_INPUT); mPlayer[index]->setInput(NO_INPUT);
if (mDemo.dataFile[mDemo.counter].fire == 1) if (mDemo.dataFile[mDemo.counter].fire == 1)
if (mPlayer[0]->canFire()) if (mPlayer[index]->canFire())
{ {
mPlayer[0]->setInput(INPUT_FIRE_UP); mPlayer[index]->setInput(INPUT_FIRE_UP);
createBullet(mPlayer[0]->getPosX() + (mPlayer[0]->getWidth() / 2) - 4, mPlayer[0]->getPosY() + (mPlayer[0]->getHeight() / 2), BULLET_UP, mPlayer[0]->isPowerUp()); createBullet(mPlayer[index]->getPosX() + (mPlayer[index]->getWidth() / 2) - 4, mPlayer[index]->getPosY() + (mPlayer[index]->getHeight() / 2), BULLET_UP, mPlayer[index]->isPowerUp(), index);
mPlayer[0]->setFireCooldown(10); mPlayer[index]->setFireCooldown(10);
} }
if (mDemo.dataFile[mDemo.counter].fireLeft == 1) if (mDemo.dataFile[mDemo.counter].fireLeft == 1)
if (mPlayer[0]->canFire()) if (mPlayer[index]->canFire())
{ {
mPlayer[0]->setInput(INPUT_FIRE_LEFT); mPlayer[index]->setInput(INPUT_FIRE_LEFT);
createBullet(mPlayer[0]->getPosX() + (mPlayer[0]->getWidth() / 2) - 4, mPlayer[0]->getPosY() + (mPlayer[0]->getHeight() / 2), BULLET_UP, mPlayer[0]->isPowerUp()); createBullet(mPlayer[index]->getPosX() + (mPlayer[index]->getWidth() / 2) - 4, mPlayer[index]->getPosY() + (mPlayer[index]->getHeight() / 2), BULLET_UP, mPlayer[index]->isPowerUp(), index);
mPlayer[0]->setFireCooldown(10); mPlayer[index]->setFireCooldown(10);
} }
if (mDemo.dataFile[mDemo.counter].fireRight == 1) if (mDemo.dataFile[mDemo.counter].fireRight == 1)
if (mPlayer[0]->canFire()) if (mPlayer[index]->canFire())
{ {
mPlayer[0]->setInput(INPUT_FIRE_RIGHT); mPlayer[index]->setInput(INPUT_FIRE_RIGHT);
createBullet(mPlayer[0]->getPosX() + (mPlayer[0]->getWidth() / 2) - 4, mPlayer[0]->getPosY() + (mPlayer[0]->getHeight() / 2), BULLET_UP, mPlayer[0]->isPowerUp()); createBullet(mPlayer[index]->getPosX() + (mPlayer[index]->getWidth() / 2) - 4, mPlayer[index]->getPosY() + (mPlayer[index]->getHeight() / 2), BULLET_UP, mPlayer[index]->isPowerUp(), index);
mPlayer[0]->setFireCooldown(10); mPlayer[index]->setFireCooldown(10);
} }
// Comprueba el input de pausa // Comprueba el input de pausa
@@ -2763,7 +2762,7 @@ void Game::checkGameInput()
if (mPlayer[i]->canFire()) if (mPlayer[i]->canFire())
{ {
mPlayer[i]->setInput(INPUT_FIRE_UP); mPlayer[i]->setInput(INPUT_FIRE_UP);
createBullet(mPlayer[i]->getPosX() + (mPlayer[i]->getWidth() / 2) - 4, mPlayer[i]->getPosY() + (mPlayer[i]->getHeight() / 2), BULLET_UP, mPlayer[i]->isPowerUp()); createBullet(mPlayer[i]->getPosX() + (mPlayer[i]->getWidth() / 2) - 4, mPlayer[i]->getPosY() + (mPlayer[i]->getHeight() / 2), BULLET_UP, mPlayer[i]->isPowerUp(), i);
mPlayer[i]->setFireCooldown(10); mPlayer[i]->setFireCooldown(10);
// Reproduce el sonido de disparo // Reproduce el sonido de disparo
@@ -2779,7 +2778,7 @@ void Game::checkGameInput()
if (mPlayer[i]->canFire()) if (mPlayer[i]->canFire())
{ {
mPlayer[i]->setInput(INPUT_FIRE_LEFT); mPlayer[i]->setInput(INPUT_FIRE_LEFT);
createBullet(mPlayer[i]->getPosX() + (mPlayer[i]->getWidth() / 2) - 4, mPlayer[i]->getPosY() + (mPlayer[i]->getHeight() / 2), BULLET_LEFT, mPlayer[i]->isPowerUp()); createBullet(mPlayer[i]->getPosX() + (mPlayer[i]->getWidth() / 2) - 4, mPlayer[i]->getPosY() + (mPlayer[i]->getHeight() / 2), BULLET_LEFT, mPlayer[i]->isPowerUp(), i);
mPlayer[i]->setFireCooldown(10); mPlayer[i]->setFireCooldown(10);
// Reproduce el sonido de disparo // Reproduce el sonido de disparo
@@ -2795,7 +2794,7 @@ void Game::checkGameInput()
if (mPlayer[i]->canFire()) if (mPlayer[i]->canFire())
{ {
mPlayer[i]->setInput(INPUT_FIRE_RIGHT); mPlayer[i]->setInput(INPUT_FIRE_RIGHT);
createBullet(mPlayer[i]->getPosX() + (mPlayer[i]->getWidth() / 2) - 4, mPlayer[i]->getPosY() + (mPlayer[i]->getHeight() / 2), BULLET_RIGHT, mPlayer[i]->isPowerUp()); createBullet(mPlayer[i]->getPosX() + (mPlayer[i]->getWidth() / 2) - 4, mPlayer[i]->getPosY() + (mPlayer[i]->getHeight() / 2), BULLET_RIGHT, mPlayer[i]->isPowerUp(), i);
mPlayer[i]->setFireCooldown(10); mPlayer[i]->setFireCooldown(10);
// Reproduce el sonido de disparo // Reproduce el sonido de disparo

View File

@@ -348,7 +348,7 @@ public:
void resetBullets(); void resetBullets();
// Crea un objeto bala // Crea un objeto bala
void createBullet(int x, int y, Uint8 kind, bool poweredUp); void createBullet(int x, int y, Uint8 kind, bool poweredUp, int owner);
// Actualiza los items // Actualiza los items
void updateItems(); void updateItems();

View File

@@ -37,13 +37,12 @@ un tipo asociado diferente a NO_KIND
#include "director.h" #include "director.h"
#include <stdio.h> #include <stdio.h>
#include <string> #include <string>
#include <ctime>
int main(int argc, char *args[]) int main(int argc, char *args[])
{ {
// Inicia el generador de numeros aleatorios // Inicia el generador de numeros aleatorios
//srand(time(nullptr)); //srand(time(nullptr));
std::srand(static_cast<unsigned int>(std::time(nullptr))); std::srand(static_cast<unsigned int>(SDL_GetTicks()));
// Crea el objeto mDirector // Crea el objeto mDirector
Director *mDirector = new Director(args[0]); Director *mDirector = new Director(args[0]);