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

View File

@@ -16,6 +16,7 @@ private:
int mVelX; // Velocidad en el eje X
int mVelY; // Velocidad en el eje Y
int mKind; // Tipo de objeto
int mOwner; // Identificador del dueño del objeto
Sprite *mSprite; // Sprite con los graficos y métodos de pintado
circle_t mCollider; // Circulo de colisión del objeto
@@ -30,7 +31,7 @@ public:
~Bullet();
// 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
void render();
@@ -62,6 +63,9 @@ public:
// Obtiene el valor de la variable
int getKind();
// Obtiene el valor de la variable
int getOwner();
// Obtiene el circulo de colisión
circle_t &getCollider();
};

View File

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

View File

@@ -348,7 +348,7 @@ public:
void resetBullets();
// 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
void updateItems();

View File

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