From e6d00d7504fa805d5e85d322f4e0a7819bcc2b14 Mon Sep 17 00:00:00 2001 From: Arthur Moreno Date: Mon, 4 Nov 2024 20:38:59 +0100 Subject: [PATCH 1/5] create sprite set and player. --- src/Constants.hpp | 19 +++ src/Player.hpp | 49 +++++++ src/SpriteSet.cpp | 30 ++++ src/SpriteSet.hpp | 39 ++++++ src/main.cpp | 341 ++++++++++++++++++++++++++++------------------ 5 files changed, 347 insertions(+), 131 deletions(-) create mode 100644 src/Constants.hpp create mode 100644 src/Player.hpp create mode 100644 src/SpriteSet.cpp create mode 100644 src/SpriteSet.hpp diff --git a/src/Constants.hpp b/src/Constants.hpp new file mode 100644 index 0000000..2d6897e --- /dev/null +++ b/src/Constants.hpp @@ -0,0 +1,19 @@ +#ifndef CONSTANTS_H +#define CONSTANTS_H + +#include + +enum struct DirectionEnum { UP = 0, DOWN = 1, RIGHT = 2, LEFT = 3}; + +// Function to convert Jogador2Direction to string +inline std::string directionToString(DirectionEnum dir) { + switch (dir) { + case DirectionEnum::RIGHT: return "RIGHT"; + case DirectionEnum::UP: return "UP"; + case DirectionEnum::DOWN: return "DOWN"; + case DirectionEnum::LEFT: return "LEFT"; + default: return "UNKNOWN"; + } +} + +#endif // CONSTANTS_H \ No newline at end of file diff --git a/src/Player.hpp b/src/Player.hpp new file mode 100644 index 0000000..a8e11ab --- /dev/null +++ b/src/Player.hpp @@ -0,0 +1,49 @@ +// Player.hpp +#ifndef PLAYER_H +#define PLAYER_H + +#ifdef __APPLE__ +#include +#else +#include +#endif + +#include "Constants.hpp" +#include "SpriteSet.hpp" + +class Player { +public: + std::string playerName; + SpriteSet spriteSet; + SDL_Surface *spriteSurface; + + int direction; + SDL_Rect position; + + Player(const std::string& playerName) + : playerName(playerName), spriteSet("Jogador1") // Initialize spriteSet here + { + direction = static_cast(DirectionEnum::RIGHT); + spriteSet.addRect(directionToString(DirectionEnum::RIGHT), 0, 0, 32, 32); // Virado para direita + spriteSet.addRect(directionToString(DirectionEnum::UP), 34, 34, 32, 32); // Virado para cima + spriteSet.addRect(directionToString(DirectionEnum::DOWN), 34, 0, 32, 32); // Virado para baixo + spriteSet.addRect(directionToString(DirectionEnum::LEFT), 0, 34, 32, 32); // Virado para esquerda + + }; + + void loadSprite(const std::string& spriteFileName) { + spriteSurface = SDL_LoadBMP(spriteFileName.c_str()); + SDL_SetColorKey(spriteSurface, SDL_SRCCOLORKEY | SDL_RLEACCEL, + (Uint16)SDL_MapRGB(spriteSurface->format, 0, 255, + 0)); // para por transparencia no verde. + }; + + void setDirection(DirectionEnum directionEnum) { + direction = static_cast(directionEnum); + } + + +private: +}; + +#endif // PLAYER_H \ No newline at end of file diff --git a/src/SpriteSet.cpp b/src/SpriteSet.cpp new file mode 100644 index 0000000..a19b527 --- /dev/null +++ b/src/SpriteSet.cpp @@ -0,0 +1,30 @@ +// SpriteSet.cpp +#include "SpriteSet.hpp" +#include + +SpriteSet::SpriteSet(const std::string& name) : name_(name) {} + +void SpriteSet::addRect(const std::string& name, int x, int y, int w, int h) { + SDL_Rect rect = { x, y, w, h }; + rects_[name] = rect; +} + +const SDL_Rect& SpriteSet::getRect(const std::string& name) const { + auto it = rects_.find(name); + if (it != rects_.end()) { + return it->second; + } + throw std::out_of_range("Sprite name not found: " + name); +} + +bool SpriteSet::hasRect(const std::string& name) const { + return rects_.find(name) != rects_.end(); +} + +size_t SpriteSet::size() const { + return rects_.size(); +} + +const std::string& SpriteSet::getName() const { + return name_; +} \ No newline at end of file diff --git a/src/SpriteSet.hpp b/src/SpriteSet.hpp new file mode 100644 index 0000000..56b3c1c --- /dev/null +++ b/src/SpriteSet.hpp @@ -0,0 +1,39 @@ +// SpriteSet.h +#ifndef SPRITESET_H +#define SPRITESET_H + +#include +#include + +#ifdef __APPLE__ +#include +#else +#include +#endif + +class SpriteSet { +public: + // Constructor + SpriteSet(const std::string& name); + + // Add a sprite rectangle with a name + void addRect(const std::string& name, int x, int y, int w, int h); + + // Retrieve a sprite rectangle by name + const SDL_Rect& getRect(const std::string& name) const; + + // Check if a sprite exists + bool hasRect(const std::string& name) const; + + // Get the number of rectangles + size_t size() const; + + // Get the name of the sprite set + const std::string& getName() const; + +private: + std::string name_; + std::unordered_map rects_; +}; + +#endif // SPRITESET_H \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index be9b8ec..e20bcbf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -10,26 +10,31 @@ #include #endif -enum struct DirectionEnum { UP = 0, DOWN = 1, RIGHT = 2, LEFT = 3}; +#include "Constants.hpp" +#include "SpriteSet.hpp" +#include "Player.hpp" -SDL_Rect offset; // coordenada do jogador 1 +// enum struct DirectionEnum { UP = 0, DOWN = 1, RIGHT = 2, LEFT = 3}; + +// SDL_Rect offset; // coordenada do jogador 1 SDL_Rect offset2; // coordenada do jogador 2 -int posicao1, posicao2; // variavel para determinacaoo das posicoes dos jogadores +// int posicao1; +int posicao2; // variavel para determinacaoo das posicoes dos jogadores // funcao para carregar os tanques na tela void jogador_load(int posicao2, SDL_Rect offset2, SDL_Surface *jogador2, SDL_Rect jogador2_c[], SDL_Surface *screen) { switch (posicao2) { - case 0: + case static_cast(DirectionEnum::UP): SDL_BlitSurface(jogador2, &jogador2_c[1], screen, &offset2); break; - case 1: + case static_cast(DirectionEnum::DOWN): SDL_BlitSurface(jogador2, &jogador2_c[2], screen, &offset2); break; - case 2: + case static_cast(DirectionEnum::RIGHT): SDL_BlitSurface(jogador2, &jogador2_c[0], screen, &offset2); break; - case 3: + case static_cast(DirectionEnum::LEFT): SDL_BlitSurface(jogador2, &jogador2_c[3], screen, &offset2); break; } @@ -37,28 +42,36 @@ void jogador_load(int posicao2, SDL_Rect offset2, SDL_Surface *jogador2, SDL_Rec // funcao para carregar as pontuacoes dos jogadores na tela void pontuacao_load(int pontuacao3, SDL_Rect pontuacao03, SDL_Surface *pontuacao, - SDL_Rect pontuacao01[], SDL_Surface *screen) { + SpriteSet& pontuacao01, SDL_Surface *screen) { + SDL_Rect pontuacaoSpriteRect; switch (pontuacao3) { case 0: - SDL_BlitSurface(pontuacao, &pontuacao01[0], screen, &pontuacao03); + pontuacaoSpriteRect = pontuacao01.getRect("ZERO"); + SDL_BlitSurface(pontuacao, &pontuacaoSpriteRect, screen, &pontuacao03); break; case 1: - SDL_BlitSurface(pontuacao, &pontuacao01[1], screen, &pontuacao03); + pontuacaoSpriteRect = pontuacao01.getRect("ONE"); + SDL_BlitSurface(pontuacao, &pontuacaoSpriteRect, screen, &pontuacao03); break; case 2: - SDL_BlitSurface(pontuacao, &pontuacao01[2], screen, &pontuacao03); + pontuacaoSpriteRect = pontuacao01.getRect("TWO"); + SDL_BlitSurface(pontuacao, &pontuacaoSpriteRect, screen, &pontuacao03); break; case 3: - SDL_BlitSurface(pontuacao, &pontuacao01[3], screen, &pontuacao03); + pontuacaoSpriteRect = pontuacao01.getRect("THREE"); + SDL_BlitSurface(pontuacao, &pontuacaoSpriteRect, screen, &pontuacao03); break; case 4: - SDL_BlitSurface(pontuacao, &pontuacao01[4], screen, &pontuacao03); + pontuacaoSpriteRect = pontuacao01.getRect("FOUR"); + SDL_BlitSurface(pontuacao, &pontuacaoSpriteRect, screen, &pontuacao03); break; case 5: - SDL_BlitSurface(pontuacao, &pontuacao01[5], screen, &pontuacao03); + pontuacaoSpriteRect = pontuacao01.getRect("FIVE"); + SDL_BlitSurface(pontuacao, &pontuacaoSpriteRect, screen, &pontuacao03); break; case 6: - SDL_BlitSurface(pontuacao, &pontuacao01[6], screen, &pontuacao03); + pontuacaoSpriteRect = pontuacao01.getRect("SIX"); + SDL_BlitSurface(pontuacao, &pontuacaoSpriteRect, screen, &pontuacao03); break; } } @@ -104,10 +117,10 @@ bool checkCollisionPlayer2(SDL_Rect& offset, SDL_Rect& offset2, SDL_Rect& wall, // funcao para movimentar os tanques void andar(SDL_Event event, SDL_Surface *screen, SDL_Surface *telaprincipal, SDL_Surface *jogador1, SDL_Surface *jogador2, SDL_Surface *bala, SDL_Surface *explosao, SDL_Surface *pontuacao, - SDL_Rect pontuacao01[], SDL_Rect jogador1_c[], SDL_Rect jogador2_c[], SDL_Rect wall, + SpriteSet& pontuacao01, SDL_Rect jogador1_c[], SDL_Rect jogador2_c[], SDL_Rect wall, SDL_Rect menu, SDL_Rect offset3, SDL_Rect pontuacao02, SDL_Rect pontuacao03, SDL_Rect bala01, SDL_Rect vencedor, int quit1, int quit2, int x, int entrar, int bala1, - int bala2, int pontuacao1, int pontuacao2, int vencedor0) { + int bala2, int pontuacao1, int pontuacao2, int vencedor0, int& posicao1, SDL_Rect& offset) { if (SDL_PollEvent(&event)) // condi��o de entrada (enter) { if (event.type == SDL_KEYDOWN) { @@ -286,12 +299,16 @@ int main(int argc, char *args[]) { SDL_Init(SDL_INIT_TIMER); // inicializa��o das fun��es de tempo SDL_Surface *screen; // superficie de video SDL_Surface *telaprincipal; // supercie de fundo - SDL_Surface *jogador1; // superficie do jogador 1 + // SDL_Surface *jogador1; // superficie do jogador 1 SDL_Surface *jogador2; // superficie do jogador 2 SDL_Surface *bala; // superficie da bala SDL_Surface *explosao; // superficie da explos�o SDL_Surface *pontuacao; // superficie dos numeros para pontua��o - SDL_Rect pontuacao01[7]; // retangulos para recorte de imagens dos numeros + + SpriteSet pontuacao01{"Pontuacao01"}; + Player player1{"Player1"}; + + // SDL_Rect pontuacao01[7]; // retangulos para recorte de imagens dos numeros SDL_Rect jogador1_c[4]; // " " " das posi��es do jogador 1 SDL_Rect jogador2_c[4]; // " " " das posi��es do jogador 2 SDL_Rect wall; // retangulo para determinar a colis�o com a parede central @@ -321,10 +338,11 @@ int main(int argc, char *args[]) { { // atribui��o de imagens bmp para as superficies do jogo telaprincipal = SDL_LoadBMP("resources/telainicial.bmp"); - jogador1 = SDL_LoadBMP("resources/jogador1.bmp"); - SDL_SetColorKey(jogador1, SDL_SRCCOLORKEY | SDL_RLEACCEL, - (Uint16)SDL_MapRGB(jogador1->format, 0, 255, - 0)); // para por transparencia no verde. + // jogador1 = SDL_LoadBMP("resources/jogador1.bmp"); + player1.loadSprite("resources/jogador1.bmp"); + // SDL_SetColorKey(player1.spriteSurface, SDL_SRCCOLORKEY | SDL_RLEACCEL, + // (Uint16)SDL_MapRGB(jogador1->format, 0, 255, + // 0)); // para por transparencia no verde. jogador2 = SDL_LoadBMP("resources/jogador2.bmp"); SDL_SetColorKey(jogador2, SDL_SRCCOLORKEY | SDL_RLEACCEL, (Uint16)SDL_MapRGB(jogador2->format, 0, 255, @@ -573,7 +591,7 @@ int main(int argc, char *args[]) { pontuacao02.x = 212, pontuacao02.y = 435; pontuacao03.x = 550, pontuacao03.y = 435; - offset.x = 15, offset.y = 170, offset.w = 32, offset.h = 32; + player1.position.x = 15, player1.position.y = 170, player1.position.w = 32, player1.position.h = 32; offset2.x = 560, offset2.y = 260, offset2.w = 32, offset2.h = 32; wall.x = 287, wall.y = 102, wall.w = 53, wall.h = 240; @@ -581,20 +599,29 @@ int main(int argc, char *args[]) { bala01.x = 0, bala01.y = 0, bala01.w = 10, bala01.h = 10; - pontuacao01[0].x = 0, pontuacao01[0].y = 3, pontuacao01[0].w = 25, - pontuacao01[0].h = 35; - pontuacao01[1].x = 50, pontuacao01[1].y = 3, pontuacao01[1].w = 25, - pontuacao01[1].h = 35; - pontuacao01[2].x = 98, pontuacao01[2].y = 3, pontuacao01[2].w = 25, - pontuacao01[2].h = 35; - pontuacao01[3].x = 147, pontuacao01[3].y = 3, pontuacao01[3].w = 25, - pontuacao01[3].h = 35; - pontuacao01[4].x = 195, pontuacao01[4].y = 3, pontuacao01[4].w = 25, - pontuacao01[4].h = 35; - pontuacao01[5].x = 245, pontuacao01[5].y = 3, pontuacao01[5].w = 25, - pontuacao01[5].h = 35; - pontuacao01[6].x = 294, pontuacao01[6].y = 3, pontuacao01[6].w = 25, - pontuacao01[6].h = 35; + // Adding rects with names + pontuacao01.addRect("ZERO", 0, 3, 25, 35); + pontuacao01.addRect("ONE", 50, 3, 25, 35); + pontuacao01.addRect("TWO", 98, 3, 25, 35); + pontuacao01.addRect("THREE", 147, 3, 25, 35); + pontuacao01.addRect("FOUR", 195, 3, 25, 35); + pontuacao01.addRect("FIVE", 245, 3, 25, 35); + pontuacao01.addRect("SIX", 294, 3, 25, 35); + + // pontuacao01[0].x = 0, pontuacao01[0].y = 3, pontuacao01[0].w = 25, + // pontuacao01[0].h = 35; + // pontuacao01[1].x = 50, pontuacao01[1].y = 3, pontuacao01[1].w = 25, + // pontuacao01[1].h = 35; + // pontuacao01[2].x = 98, pontuacao01[2].y = 3, pontuacao01[2].w = 25, + // pontuacao01[2].h = 35; + // pontuacao01[3].x = 147, pontuacao01[3].y = 3, pontuacao01[3].w = 25, + // pontuacao01[3].h = 35; + // pontuacao01[4].x = 195, pontuacao01[4].y = 3, pontuacao01[4].w = 25, + // pontuacao01[4].h = 35; + // pontuacao01[5].x = 245, pontuacao01[5].y = 3, pontuacao01[5].w = 25, + // pontuacao01[5].h = 35; + // pontuacao01[6].x = 294, pontuacao01[6].y = 3, pontuacao01[6].w = 25, + // pontuacao01[6].h = 35; jogador1_c[0].x = 0, jogador1_c[0].y = 0, jogador1_c[0].w = 32, jogador1_c[0].h = 32; // jogador1 virado para direita @@ -614,12 +641,14 @@ int main(int argc, char *args[]) { jogador2_c[3].x = 0, jogador2_c[3].y = 34, jogador2_c[3].w = 32, jogador2_c[3].h = 32; // jogador2 virado para esquerda - SDL_BlitSurface(pontuacao, &pontuacao01[0], screen, &pontuacao02); - SDL_BlitSurface(pontuacao, &pontuacao01[0], screen, &pontuacao03); - SDL_BlitSurface(jogador1, &jogador1_c[0], screen, &offset); + SDL_Rect pontuacaoZeroRect = pontuacao01.getRect("ZERO"); + SDL_BlitSurface(pontuacao, &pontuacaoZeroRect, screen, &pontuacao02); + SDL_BlitSurface(pontuacao, &pontuacaoZeroRect, screen, &pontuacao03); + SDL_BlitSurface(player1.spriteSurface, &jogador1_c[0], screen, &player1.position); SDL_BlitSurface(jogador2, &jogador2_c[3], screen, &offset2); SDL_Flip(screen); - posicao1 = 2; + player1.setDirection(DirectionEnum::RIGHT); + // posicao1 = 2; posicao2 = 3; // fim da atribui��o de variaveis @@ -631,10 +660,15 @@ int main(int argc, char *args[]) { case SDL_KEYDOWN: switch (event.key.keysym.sym) { // comandos para o jogador 1 case SDLK_UP: // tecla para cima - if (checkCollisionPlayer1(offset, offset2, wall, menu, offset3)) { - offset.y = offset.y - 6; + if (checkCollisionPlayer1(player1.position, offset2, wall, menu, offset3)) { + + // Update position and direction of player1 + player1.position.y = player1.position.y - 6; + player1.setDirection(DirectionEnum::UP); + + // Drawing things - NEED to be removed SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(jogador1, &jogador1_c[1], screen, &offset); + SDL_BlitSurface(player1.spriteSurface, &jogador1_c[1], screen, &player1.position); jogador_load(posicao2, offset2, jogador2, jogador2_c, screen); pontuacao_load(pontuacao2, pontuacao03, pontuacao, @@ -642,23 +676,28 @@ int main(int argc, char *args[]) { pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); SDL_Flip(screen); - posicao1 = static_cast(DirectionEnum::UP); + // posicao1 = static_cast(DirectionEnum::UP); break; } else { pontuacao2 = pontuacao2 + 1; pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &offset); + SDL_BlitSurface(explosao, NULL, screen, &player1.position); SDL_Flip(screen); SDL_Delay(500); - offset.x = 15, offset.y = 170; + player1.position.x = 15, player1.position.y = 170; } break; case SDLK_DOWN: // tecla para baixo - if (checkCollisionPlayer1(offset, offset2, wall, menu, offset3)) { - offset.y = offset.y + 6; + if (checkCollisionPlayer1(player1.position, offset2, wall, menu, offset3)) { + + // Update position and direction of player1 + player1.position.y = player1.position.y + 6; + player1.setDirection(DirectionEnum::DOWN); + + // Drawing things - NEED to be removed SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(jogador1, &jogador1_c[2], screen, &offset); + SDL_BlitSurface(player1.spriteSurface, &jogador1_c[2], screen, &player1.position); jogador_load(posicao2, offset2, jogador2, jogador2_c, screen); pontuacao_load(pontuacao2, pontuacao03, pontuacao, @@ -666,23 +705,28 @@ int main(int argc, char *args[]) { pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); SDL_Flip(screen); - posicao1 = static_cast(DirectionEnum::DOWN); + // posicao1 = static_cast(DirectionEnum::DOWN); break; } else { pontuacao2 = pontuacao2 + 1; pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &offset); + SDL_BlitSurface(explosao, NULL, screen, &player1.position); SDL_Flip(screen); SDL_Delay(500); - offset.x = 15, offset.y = 170; + player1.position.x = 15, player1.position.y = 170; } break; case SDLK_RIGHT: // tecla para a direita - if (checkCollisionPlayer1(offset, offset2, wall, menu, offset3)) { - offset.x = offset.x + 6; + if (checkCollisionPlayer1(player1.position, offset2, wall, menu, offset3)) { + + // Update position and direction of player1 + player1.position.x = player1.position.x + 6; + player1.setDirection(DirectionEnum::RIGHT); + + // Drawing things - NEED to be removed SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(jogador1, &jogador1_c[0], screen, &offset); + SDL_BlitSurface(player1.spriteSurface, &jogador1_c[0], screen, &player1.position); jogador_load(posicao2, offset2, jogador2, jogador2_c, screen); pontuacao_load(pontuacao2, pontuacao03, pontuacao, @@ -690,23 +734,28 @@ int main(int argc, char *args[]) { pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); SDL_Flip(screen); - posicao1 = static_cast(DirectionEnum::RIGHT); + // posicao1 = static_cast(DirectionEnum::RIGHT); break; } else { pontuacao2 = pontuacao2 + 1; pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &offset); + SDL_BlitSurface(explosao, NULL, screen, &player1.position); SDL_Flip(screen); SDL_Delay(500); - offset.x = 15, offset.y = 170; + player1.position.x = 15, player1.position.y = 170; } break; case SDLK_LEFT: // tecla para esquerda - if (checkCollisionPlayer1(offset, offset2, wall, menu, offset3)) { - offset.x = offset.x - 6; + if (checkCollisionPlayer1(player1.position, offset2, wall, menu, offset3)) { + + // Update position and direction of player1 + player1.position.x = player1.position.x - 6; + player1.setDirection(DirectionEnum::LEFT); + + // Drawing things - NEED to be removed SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(jogador1, &jogador1_c[3], screen, &offset); + SDL_BlitSurface(player1.spriteSurface, &jogador1_c[3], screen, &player1.position); jogador_load(posicao2, offset2, jogador2, jogador2_c, screen); pontuacao_load(pontuacao2, pontuacao03, pontuacao, @@ -714,32 +763,36 @@ int main(int argc, char *args[]) { pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); SDL_Flip(screen); - posicao1 = static_cast(DirectionEnum::LEFT); + // posicao1 = static_cast(DirectionEnum::LEFT); break; } else { pontuacao2 = pontuacao2 + 1; pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &offset); + SDL_BlitSurface(explosao, NULL, screen, &player1.position); SDL_Flip(screen); SDL_Delay(500); - offset.x = 15, offset.y = 170; + player1.position.x = 15, player1.position.y = 170; } break; // comandos para o jogador 2 case SDLK_w: // tecla w ( para cima ) - if (checkCollisionPlayer2(offset, offset2, wall, menu, offset3)) { + if (checkCollisionPlayer2(player1.position, offset2, wall, menu, offset3)) { + + // Update position and direction of player2 offset2.y = offset2.y - 6; + posicao2 = static_cast(DirectionEnum::UP); + + // Drawing things - NEED to be removed SDL_BlitSurface(telaprincipal, NULL, screen, NULL); SDL_BlitSurface(jogador2, &jogador2_c[1], screen, &offset2); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); SDL_Flip(screen); - posicao2 = static_cast(DirectionEnum::UP); break; } else { pontuacao1 = pontuacao1 + 1; @@ -752,18 +805,22 @@ int main(int argc, char *args[]) { } break; case SDLK_s: // tecla s ( para baixo ) - if (checkCollisionPlayer2(offset, offset2, wall, menu, offset3)) { + if (checkCollisionPlayer2(player1.position, offset2, wall, menu, offset3)) { + + // Update position and direction of player2 offset2.y = offset2.y + 6; + posicao2 = static_cast(DirectionEnum::DOWN); + + // Drawing things - NEED to be removed SDL_BlitSurface(telaprincipal, NULL, screen, NULL); SDL_BlitSurface(jogador2, &jogador2_c[2], screen, &offset2); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); SDL_Flip(screen); - posicao2 = static_cast(DirectionEnum::DOWN); break; } else { pontuacao1 = pontuacao1 + 1; @@ -776,18 +833,21 @@ int main(int argc, char *args[]) { } break; case SDLK_d: // tecla d ( para direita ) - if (checkCollisionPlayer2(offset, offset2, wall, menu, offset3)) { + if (checkCollisionPlayer2(player1.position, offset2, wall, menu, offset3)) { + // Update position and direction of player2 offset2.x = offset2.x + 6; + posicao2 = static_cast(DirectionEnum::RIGHT); + + // Drawing things - NEED to be removed SDL_BlitSurface(telaprincipal, NULL, screen, NULL); SDL_BlitSurface(jogador2, &jogador2_c[0], screen, &offset2); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); SDL_Flip(screen); - posicao2 = static_cast(DirectionEnum::RIGHT); break; } else { pontuacao1 = pontuacao1 + 1; @@ -800,18 +860,21 @@ int main(int argc, char *args[]) { } break; case SDLK_a: // tecla a ( para esquerda ) - if (checkCollisionPlayer2(offset, offset2, wall, menu, offset3)) { + if (checkCollisionPlayer2(player1.position, offset2, wall, menu, offset3)) { + // Update position and direction of player2 offset2.x = offset2.x - 6; + posicao2 = static_cast(DirectionEnum::LEFT); + + // Drawing things - NEED to be removed SDL_BlitSurface(telaprincipal, NULL, screen, NULL); SDL_BlitSurface(jogador2, &jogador2_c[3], screen, &offset2); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); SDL_Flip(screen); - posicao2 = static_cast(DirectionEnum::LEFT); break; } else { pontuacao1 = pontuacao1 + 1; @@ -828,14 +891,14 @@ int main(int argc, char *args[]) { break; // comandos para o tiro dos jogadores 1 e 2 case SDLK_m: // tecla m para o tiro do jogador 1 - switch (posicao1) { + switch (player1.direction) { case static_cast(DirectionEnum::UP): - offset3.x = offset.x + 12; - offset3.y = offset.y - 12; + offset3.x = player1.position.x + 12; + offset3.y = player1.position.y - 12; for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { offset3.y = offset3.y - 10; SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); @@ -846,13 +909,13 @@ int main(int argc, char *args[]) { SDL_BlitSurface(bala, NULL, screen, &offset3); SDL_Flip(screen); SDL_Delay(50); - andar(event, screen, telaprincipal, jogador1, + andar(event, screen, telaprincipal, player1.spriteSurface, jogador2, bala, explosao, pontuacao, pontuacao01, jogador1_c, jogador2_c, wall, menu, offset3, pontuacao02, pontuacao03, bala01, vencedor, quit1, quit2, x, entrar, bala1, bala2, pontuacao1, pontuacao2, - vencedor0); + vencedor0, player1.direction, player1.position); if (!checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, offset2.h, offset3.x, offset3.y, offset3.w, offset3.h)) { @@ -870,7 +933,7 @@ int main(int argc, char *args[]) { offset3.x = 650; offset3.y = 650; SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); @@ -881,12 +944,12 @@ int main(int argc, char *args[]) { SDL_Flip(screen); break; case static_cast(DirectionEnum::DOWN): - offset3.x = offset.x + 12; - offset3.y = offset.y + 36; + offset3.x = player1.position.x + 12; + offset3.y = player1.position.y + 36; for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { offset3.y = offset3.y + 10; SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); @@ -897,13 +960,13 @@ int main(int argc, char *args[]) { SDL_BlitSurface(bala, NULL, screen, &offset3); SDL_Flip(screen); SDL_Delay(50); - andar(event, screen, telaprincipal, jogador1, + andar(event, screen, telaprincipal, player1.spriteSurface, jogador2, bala, explosao, pontuacao, pontuacao01, jogador1_c, jogador2_c, wall, menu, offset3, pontuacao02, pontuacao03, bala01, vencedor, quit1, quit2, x, entrar, bala1, bala2, pontuacao1, pontuacao2, - vencedor0); + vencedor0, player1.direction, player1.position); if (!checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, offset2.h, offset3.x, offset3.y, offset3.w, offset3.h)) { @@ -921,7 +984,7 @@ int main(int argc, char *args[]) { offset3.x = 650; offset3.y = 650; SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); @@ -932,12 +995,12 @@ int main(int argc, char *args[]) { SDL_Flip(screen); break; case static_cast(DirectionEnum::RIGHT): - offset3.x = offset.x + 36; - offset3.y = offset.y + 12; + offset3.x = player1.position.x + 36; + offset3.y = player1.position.y + 12; for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { offset3.x = offset3.x + 10; SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); @@ -948,13 +1011,13 @@ int main(int argc, char *args[]) { SDL_BlitSurface(bala, NULL, screen, &offset3); SDL_Flip(screen); SDL_Delay(50); - andar(event, screen, telaprincipal, jogador1, + andar(event, screen, telaprincipal, player1.spriteSurface, jogador2, bala, explosao, pontuacao, pontuacao01, jogador1_c, jogador2_c, wall, menu, offset3, pontuacao02, pontuacao03, bala01, vencedor, quit1, quit2, x, entrar, bala1, bala2, pontuacao1, pontuacao2, - vencedor0); + vencedor0, player1.direction, player1.position); if (!checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, offset2.h, offset3.x, offset3.y, offset3.w, offset3.h)) { @@ -972,7 +1035,7 @@ int main(int argc, char *args[]) { offset3.x = 650; offset3.y = 650; SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); @@ -983,12 +1046,12 @@ int main(int argc, char *args[]) { SDL_Flip(screen); break; case static_cast(DirectionEnum::LEFT): - offset3.x = offset.x - 12; - offset3.y = offset.y + 12; + offset3.x = player1.position.x - 12; + offset3.y = player1.position.y + 12; for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { offset3.x = offset3.x - 10; SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); @@ -999,13 +1062,13 @@ int main(int argc, char *args[]) { SDL_BlitSurface(bala, NULL, screen, &offset3); SDL_Flip(screen); SDL_Delay(50); - andar(event, screen, telaprincipal, jogador1, + andar(event, screen, telaprincipal, player1.spriteSurface, jogador2, bala, explosao, pontuacao, pontuacao01, jogador1_c, jogador2_c, wall, menu, offset3, pontuacao02, pontuacao03, bala01, vencedor, quit1, quit2, x, entrar, bala1, bala2, pontuacao1, pontuacao2, - vencedor0); + vencedor0, player1.direction, player1.position); if (!checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, offset2.h, offset3.x, offset3.y, offset3.w, offset3.h)) { @@ -1023,7 +1086,7 @@ int main(int argc, char *args[]) { offset3.x = 650; offset3.y = 650; SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); @@ -1049,29 +1112,30 @@ int main(int argc, char *args[]) { pontuacao01, screen); pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); SDL_BlitSurface(bala, NULL, screen, &offset3); SDL_Flip(screen); SDL_Delay(50); - andar(event, screen, telaprincipal, jogador1, + andar(event, screen, telaprincipal, player1.spriteSurface, jogador2, bala, explosao, pontuacao, pontuacao01, jogador1_c, jogador2_c, wall, menu, offset3, pontuacao02, pontuacao03, bala01, vencedor, quit1, quit2, x, entrar, bala1, bala2, pontuacao1, pontuacao2, - vencedor0); - if (!checkCollisionBetweenTwoRects(offset.x, offset.y, offset.w, offset.h, + vencedor0, player1.direction, player1.position); + if (!checkCollisionBetweenTwoRects( + player1.position.x, player1.position.y, player1.position.w, player1.position.h, offset3.x, offset3.y, offset3.w, offset3.h)) { pontuacao2 = pontuacao2 + 1; pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); SDL_BlitSurface(explosao, NULL, screen, - &offset); + &player1.position); SDL_Flip(screen); SDL_Delay(100); - offset.x = 15, offset.y = 170; + player1.position.x = 15, player1.position.y = 170; break; } } @@ -1084,7 +1148,7 @@ int main(int argc, char *args[]) { pontuacao01, screen); pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); SDL_Flip(screen); break; @@ -1100,29 +1164,29 @@ int main(int argc, char *args[]) { pontuacao01, screen); pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); SDL_BlitSurface(bala, NULL, screen, &offset3); SDL_Flip(screen); SDL_Delay(50); - andar(event, screen, telaprincipal, jogador1, + andar(event, screen, telaprincipal, player1.spriteSurface, jogador2, bala, explosao, pontuacao, pontuacao01, jogador1_c, jogador2_c, wall, menu, offset3, pontuacao02, pontuacao03, bala01, vencedor, quit1, quit2, x, entrar, bala1, bala2, pontuacao1, pontuacao2, - vencedor0); - if (!checkCollisionBetweenTwoRects(offset.x, offset.y, offset.w, offset.h, + vencedor0, player1.direction, player1.position); + if (!checkCollisionBetweenTwoRects(player1.position.x, player1.position.y, player1.position.w, player1.position.h, offset3.x, offset3.y, offset3.w, offset3.h)) { pontuacao2 = pontuacao2 + 1; pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); SDL_BlitSurface(explosao, NULL, screen, - &offset); + &player1.position); SDL_Flip(screen); SDL_Delay(100); - offset.x = 15, offset.y = 170; + player1.position.x = 15, player1.position.y = 170; break; } } @@ -1135,7 +1199,7 @@ int main(int argc, char *args[]) { pontuacao01, screen); pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); SDL_Flip(screen); break; @@ -1151,29 +1215,29 @@ int main(int argc, char *args[]) { pontuacao01, screen); pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); SDL_BlitSurface(bala, NULL, screen, &offset3); SDL_Flip(screen); SDL_Delay(50); - andar(event, screen, telaprincipal, jogador1, + andar(event, screen, telaprincipal, player1.spriteSurface, jogador2, bala, explosao, pontuacao, pontuacao01, jogador1_c, jogador2_c, wall, menu, offset3, pontuacao02, pontuacao03, bala01, vencedor, quit1, quit2, x, entrar, bala1, bala2, pontuacao1, pontuacao2, - vencedor0); - if (!checkCollisionBetweenTwoRects(offset.x, offset.y, offset.w, offset.h, + vencedor0, player1.direction, player1.position); + if (!checkCollisionBetweenTwoRects(player1.position.x, player1.position.y, player1.position.w, player1.position.h, offset3.x, offset3.y, offset3.w, offset3.h)) { pontuacao2 = pontuacao2 + 1; pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); SDL_BlitSurface(explosao, NULL, screen, - &offset); + &player1.position); SDL_Flip(screen); SDL_Delay(100); - offset.x = 15, offset.y = 170; + player1.position.x = 15, player1.position.y = 170; break; } } @@ -1186,7 +1250,7 @@ int main(int argc, char *args[]) { pontuacao01, screen); pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); SDL_Flip(screen); break; @@ -1202,29 +1266,29 @@ int main(int argc, char *args[]) { pontuacao01, screen); pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); SDL_BlitSurface(bala, NULL, screen, &offset3); SDL_Flip(screen); SDL_Delay(50); - andar(event, screen, telaprincipal, jogador1, + andar(event, screen, telaprincipal, player1.spriteSurface, jogador2, bala, explosao, pontuacao, pontuacao01, jogador1_c, jogador2_c, wall, menu, offset3, pontuacao02, pontuacao03, bala01, vencedor, quit1, quit2, x, entrar, bala1, bala2, pontuacao1, pontuacao2, - vencedor0); - if (!checkCollisionBetweenTwoRects(offset.x, offset.y, offset.w, offset.h, + vencedor0, player1.direction, player1.position); + if (!checkCollisionBetweenTwoRects(player1.position.x, player1.position.y, player1.position.w, player1.position.h, offset3.x, offset3.y, offset3.w, offset3.h)) { pontuacao2 = pontuacao2 + 1; pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); SDL_BlitSurface(explosao, NULL, screen, - &offset); + &player1.position); SDL_Flip(screen); SDL_Delay(100); - offset.x = 15, offset.y = 170; + player1.position.x = 15, player1.position.y = 170; break; } } @@ -1237,7 +1301,7 @@ int main(int argc, char *args[]) { pontuacao01, screen); pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - jogador_load(posicao1, offset, jogador1, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); SDL_Flip(screen); break; @@ -1260,6 +1324,21 @@ int main(int argc, char *args[]) { quit2 = 1; } } + + // Here it should be the drawing logic! + + SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + + jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, + screen); + jogador_load(posicao2, offset2, jogador2, jogador2_c, + screen); + pontuacao_load(pontuacao2, pontuacao03, pontuacao, + pontuacao01, screen); + pontuacao_load(pontuacao1, pontuacao02, pontuacao, + pontuacao01, screen); + SDL_Flip(screen); + // condi��es para verificar a vitoria dos jogadores if (pontuacao1 == 6) // verificar vitoria do jogador 1 { From dd26535e8ddedc23d8d943a500afbaaeda1be534 Mon Sep 17 00:00:00 2001 From: Arthur Moreno Date: Tue, 5 Nov 2024 23:25:35 +0100 Subject: [PATCH 2/5] Refactor player 2 and create Projectile. --- src/Constants.hpp | 4 + src/Player.hpp | 6 + src/Projectile.hpp | 51 ++ src/main.cpp | 1922 +++++++++++++++++++++++--------------------- 4 files changed, 1048 insertions(+), 935 deletions(-) create mode 100644 src/Projectile.hpp diff --git a/src/Constants.hpp b/src/Constants.hpp index 2d6897e..3993032 100644 --- a/src/Constants.hpp +++ b/src/Constants.hpp @@ -5,6 +5,8 @@ enum struct DirectionEnum { UP = 0, DOWN = 1, RIGHT = 2, LEFT = 3}; +enum struct PlayerStateEnum { IDLE = 0, MOVING = 1, FIRING = 2, EXPLODING = 3}; + // Function to convert Jogador2Direction to string inline std::string directionToString(DirectionEnum dir) { switch (dir) { @@ -16,4 +18,6 @@ inline std::string directionToString(DirectionEnum dir) { } } +const int PROJECTILE_MOVING_COOLDOWN = 20; + #endif // CONSTANTS_H \ No newline at end of file diff --git a/src/Player.hpp b/src/Player.hpp index a8e11ab..4747424 100644 --- a/src/Player.hpp +++ b/src/Player.hpp @@ -11,6 +11,8 @@ #include "Constants.hpp" #include "SpriteSet.hpp" + + class Player { public: std::string playerName; @@ -20,9 +22,13 @@ class Player { int direction; SDL_Rect position; + int timer; + PlayerStateEnum state; + Player(const std::string& playerName) : playerName(playerName), spriteSet("Jogador1") // Initialize spriteSet here { + state = PlayerStateEnum::IDLE; direction = static_cast(DirectionEnum::RIGHT); spriteSet.addRect(directionToString(DirectionEnum::RIGHT), 0, 0, 32, 32); // Virado para direita spriteSet.addRect(directionToString(DirectionEnum::UP), 34, 34, 32, 32); // Virado para cima diff --git a/src/Projectile.hpp b/src/Projectile.hpp new file mode 100644 index 0000000..ab000d4 --- /dev/null +++ b/src/Projectile.hpp @@ -0,0 +1,51 @@ +// Player.hpp +#ifndef PROJECTILE_H +#define PROJECTILE_H + +#ifdef __APPLE__ +#include +#else +#include +#endif + +#include "Constants.hpp" +#include "SpriteSet.hpp" + +class Projectile { +public: + int projectileId; + SpriteSet spriteSet; + SDL_Surface *spriteSurface; + + int direction; + SDL_Rect position; + + int movingCooldown; + + Projectile(const int projectileId) + : projectileId(projectileId), spriteSet("Bala") // Initialize spriteSet here + { + direction = static_cast(DirectionEnum::RIGHT); + spriteSet.addRect(directionToString(DirectionEnum::RIGHT), 0, 0, 32, 32); // Virado para direita + spriteSet.addRect(directionToString(DirectionEnum::UP), 34, 34, 32, 32); // Virado para cima + spriteSet.addRect(directionToString(DirectionEnum::DOWN), 34, 0, 32, 32); // Virado para baixo + spriteSet.addRect(directionToString(DirectionEnum::LEFT), 0, 34, 32, 32); // Virado para esquerda + + }; + + void loadSprite(const std::string& spriteFileName) { + spriteSurface = SDL_LoadBMP(spriteFileName.c_str()); + SDL_SetColorKey(spriteSurface, SDL_SRCCOLORKEY | SDL_RLEACCEL, + (Uint16)SDL_MapRGB(spriteSurface->format, 0, 255, + 0)); // para por transparencia no verde. + }; + + void setDirection(DirectionEnum directionEnum) { + direction = static_cast(directionEnum); + } + + +private: +}; + +#endif // PROJECTILE_H \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index e20bcbf..e19bcda 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,8 @@ +#include #include #include #include +#include #define SDL_MAIN_HANDLED // Add this line @@ -13,11 +15,12 @@ #include "Constants.hpp" #include "SpriteSet.hpp" #include "Player.hpp" +#include "Projectile.hpp" // enum struct DirectionEnum { UP = 0, DOWN = 1, RIGHT = 2, LEFT = 3}; // SDL_Rect offset; // coordenada do jogador 1 -SDL_Rect offset2; // coordenada do jogador 2 +// SDL_Rect offset2; // coordenada do jogador 2 // int posicao1; int posicao2; // variavel para determinacaoo das posicoes dos jogadores @@ -115,184 +118,184 @@ bool checkCollisionPlayer2(SDL_Rect& offset, SDL_Rect& offset2, SDL_Rect& wall, } // funcao para movimentar os tanques -void andar(SDL_Event event, SDL_Surface *screen, SDL_Surface *telaprincipal, SDL_Surface *jogador1, - SDL_Surface *jogador2, SDL_Surface *bala, SDL_Surface *explosao, SDL_Surface *pontuacao, - SpriteSet& pontuacao01, SDL_Rect jogador1_c[], SDL_Rect jogador2_c[], SDL_Rect wall, - SDL_Rect menu, SDL_Rect offset3, SDL_Rect pontuacao02, SDL_Rect pontuacao03, - SDL_Rect bala01, SDL_Rect vencedor, int quit1, int quit2, int x, int entrar, int bala1, - int bala2, int pontuacao1, int pontuacao2, int vencedor0, int& posicao1, SDL_Rect& offset) { - if (SDL_PollEvent(&event)) // condi��o de entrada (enter) - { - if (event.type == SDL_KEYDOWN) { - switch (event.key.keysym.sym) { // comandos para o jogador 1 - case SDLK_UP: - if (checkCollisionPlayer1(offset, offset2, wall, menu, offset3)) { - offset.y = offset.y - 6; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(jogador1, &jogador1_c[1], screen, &offset); - jogador_load(posicao2, offset2, jogador2, jogador2_c, screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - SDL_Flip(screen); - posicao1 = 0; - break; - } else { - pontuacao2 = pontuacao2 + 1; - pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &offset); - SDL_Flip(screen); - SDL_Delay(500); - offset.x = 15, offset.y = 170; - } - break; - case SDLK_DOWN: - if (checkCollisionPlayer1(offset, offset2, wall, menu, offset3)) { - offset.y = offset.y + 6; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(jogador1, &jogador1_c[2], screen, &offset); - jogador_load(posicao2, offset2, jogador2, jogador2_c, screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - SDL_Flip(screen); - posicao1 = 1; - break; - } else { - pontuacao2 = pontuacao2 + 1; - pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &offset); - SDL_Flip(screen); - SDL_Delay(500); - offset.x = 15, offset.y = 170; - } - break; - case SDLK_RIGHT: - if (checkCollisionPlayer1(offset, offset2, wall, menu, offset3)) { - offset.x = offset.x + 6; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(jogador1, &jogador1_c[0], screen, &offset); - jogador_load(posicao2, offset2, jogador2, jogador2_c, screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - SDL_Flip(screen); - posicao1 = 2; - break; - } else { - pontuacao2 = pontuacao2 + 1; - pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &offset); - SDL_Flip(screen); - SDL_Delay(500); - offset.x = 15, offset.y = 170; - } - break; - case SDLK_LEFT: - if (checkCollisionPlayer1(offset, offset2, wall, menu, offset3)) { - offset.x = offset.x - 6; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(jogador1, &jogador1_c[3], screen, &offset); - jogador_load(posicao2, offset2, jogador2, jogador2_c, screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - SDL_Flip(screen); - posicao1 = 3; - break; - } else { - pontuacao2 = pontuacao2 + 1; - pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &offset); - SDL_Flip(screen); - SDL_Delay(500); - offset.x = 15, offset.y = 170; - } - break; - // comandos para o jogador 2 - case SDLK_w: - if (checkCollisionPlayer2(offset, offset2, wall, menu, offset3)) { - offset2.y = offset2.y - 6; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(jogador2, &jogador2_c[1], screen, &offset2); - jogador_load(posicao1, offset, jogador1, jogador1_c, screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - SDL_Flip(screen); - posicao2 = 0; - break; - } else { - pontuacao1 = pontuacao1 + 1; - pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &offset2); - SDL_Flip(screen); - SDL_Delay(500); - offset2.x = 560, offset2.y = 260; - } - break; - case SDLK_s: - if (checkCollisionPlayer2(offset, offset2, wall, menu, offset3)) { - offset2.y = offset2.y + 6; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(jogador2, &jogador2_c[2], screen, &offset2); - jogador_load(posicao1, offset, jogador1, jogador1_c, screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - SDL_Flip(screen); - posicao2 = 1; - break; - } else { - pontuacao1 = pontuacao1 + 1; - pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &offset2); - SDL_Flip(screen); - SDL_Delay(500); - offset2.x = 560, offset2.y = 260; - } - break; - case SDLK_d: - if (checkCollisionPlayer2(offset, offset2, wall, menu, offset3)) { - offset2.x = offset2.x + 6; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(jogador2, &jogador2_c[0], screen, &offset2); - jogador_load(posicao1, offset, jogador1, jogador1_c, screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - SDL_Flip(screen); - posicao2 = 2; - break; - } else { - pontuacao1 = pontuacao1 + 1; - pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &offset2); - SDL_Flip(screen); - SDL_Delay(500); - offset2.x = 560, offset2.y = 260; - } - break; - case SDLK_a: - if (checkCollisionPlayer2(offset, offset2, wall, menu, offset3)) { - offset2.x = offset2.x - 6; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(jogador2, &jogador2_c[3], screen, &offset2); - jogador_load(posicao1, offset, jogador1, jogador1_c, screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - SDL_Flip(screen); - posicao2 = 3; - break; - } else { - pontuacao1 = pontuacao1 + 1; - pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &offset2); - SDL_Flip(screen); - SDL_Delay(500); - offset2.x = 560, offset2.y = 260; - } - break; - default: - x = 0; - break; - } - } - } -} +// void andar(SDL_Event event, SDL_Surface *screen, SDL_Surface *telaprincipal, SDL_Surface *jogador1, +// SDL_Surface *jogador2, SDL_Surface *bala, SDL_Surface *explosao, SDL_Surface *pontuacao, +// SpriteSet& pontuacao01, SDL_Rect jogador1_c[], SDL_Rect jogador2_c[], SDL_Rect wall, +// SDL_Rect menu, SDL_Rect offset3, SDL_Rect pontuacao02, SDL_Rect pontuacao03, +// SDL_Rect bala01, SDL_Rect vencedor, int quit1, int quit2, int x, int entrar, int bala1, +// int bala2, int pontuacao1, int pontuacao2, int vencedor0, int& posicao1, SDL_Rect& offset) { +// if (SDL_PollEvent(&event)) // condi��o de entrada (enter) +// { +// if (event.type == SDL_KEYDOWN) { +// switch (event.key.keysym.sym) { // comandos para o jogador 1 +// case SDLK_UP: +// if (checkCollisionPlayer1(offset, offset2, wall, menu, offset3)) { +// offset.y = offset.y - 6; +// SDL_BlitSurface(telaprincipal, NULL, screen, NULL); +// SDL_BlitSurface(jogador1, &jogador1_c[1], screen, &offset); +// jogador_load(posicao2, offset2, jogador2, jogador2_c, screen); +// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); +// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); +// SDL_Flip(screen); +// posicao1 = 0; +// break; +// } else { +// pontuacao2 = pontuacao2 + 1; +// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); +// SDL_BlitSurface(explosao, NULL, screen, &offset); +// SDL_Flip(screen); +// SDL_Delay(500); +// offset.x = 15, offset.y = 170; +// } +// break; +// case SDLK_DOWN: +// if (checkCollisionPlayer1(offset, offset2, wall, menu, offset3)) { +// offset.y = offset.y + 6; +// SDL_BlitSurface(telaprincipal, NULL, screen, NULL); +// SDL_BlitSurface(jogador1, &jogador1_c[2], screen, &offset); +// jogador_load(posicao2, offset2, jogador2, jogador2_c, screen); +// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); +// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); +// SDL_Flip(screen); +// posicao1 = 1; +// break; +// } else { +// pontuacao2 = pontuacao2 + 1; +// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); +// SDL_BlitSurface(explosao, NULL, screen, &offset); +// SDL_Flip(screen); +// SDL_Delay(500); +// offset.x = 15, offset.y = 170; +// } +// break; +// case SDLK_RIGHT: +// if (checkCollisionPlayer1(offset, offset2, wall, menu, offset3)) { +// offset.x = offset.x + 6; +// SDL_BlitSurface(telaprincipal, NULL, screen, NULL); +// SDL_BlitSurface(jogador1, &jogador1_c[0], screen, &offset); +// jogador_load(posicao2, offset2, jogador2, jogador2_c, screen); +// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); +// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); +// SDL_Flip(screen); +// posicao1 = 2; +// break; +// } else { +// pontuacao2 = pontuacao2 + 1; +// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); +// SDL_BlitSurface(explosao, NULL, screen, &offset); +// SDL_Flip(screen); +// SDL_Delay(500); +// offset.x = 15, offset.y = 170; +// } +// break; +// case SDLK_LEFT: +// if (checkCollisionPlayer1(offset, offset2, wall, menu, offset3)) { +// offset.x = offset.x - 6; +// SDL_BlitSurface(telaprincipal, NULL, screen, NULL); +// SDL_BlitSurface(jogador1, &jogador1_c[3], screen, &offset); +// jogador_load(posicao2, offset2, jogador2, jogador2_c, screen); +// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); +// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); +// SDL_Flip(screen); +// posicao1 = 3; +// break; +// } else { +// pontuacao2 = pontuacao2 + 1; +// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); +// SDL_BlitSurface(explosao, NULL, screen, &offset); +// SDL_Flip(screen); +// SDL_Delay(500); +// offset.x = 15, offset.y = 170; +// } +// break; +// // comandos para o jogador 2 +// case SDLK_w: +// if (checkCollisionPlayer2(offset, offset2, wall, menu, offset3)) { +// offset2.y = offset2.y - 6; +// SDL_BlitSurface(telaprincipal, NULL, screen, NULL); +// SDL_BlitSurface(jogador2, &jogador2_c[1], screen, &offset2); +// jogador_load(posicao1, offset, jogador1, jogador1_c, screen); +// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); +// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); +// SDL_Flip(screen); +// posicao2 = 0; +// break; +// } else { +// pontuacao1 = pontuacao1 + 1; +// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); +// SDL_BlitSurface(explosao, NULL, screen, &offset2); +// SDL_Flip(screen); +// SDL_Delay(500); +// offset2.x = 560, offset2.y = 260; +// } +// break; +// case SDLK_s: +// if (checkCollisionPlayer2(offset, offset2, wall, menu, offset3)) { +// offset2.y = offset2.y + 6; +// SDL_BlitSurface(telaprincipal, NULL, screen, NULL); +// SDL_BlitSurface(jogador2, &jogador2_c[2], screen, &offset2); +// jogador_load(posicao1, offset, jogador1, jogador1_c, screen); +// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); +// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); +// SDL_Flip(screen); +// posicao2 = 1; +// break; +// } else { +// pontuacao1 = pontuacao1 + 1; +// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); +// SDL_BlitSurface(explosao, NULL, screen, &offset2); +// SDL_Flip(screen); +// SDL_Delay(500); +// offset2.x = 560, offset2.y = 260; +// } +// break; +// case SDLK_d: +// if (checkCollisionPlayer2(offset, offset2, wall, menu, offset3)) { +// offset2.x = offset2.x + 6; +// SDL_BlitSurface(telaprincipal, NULL, screen, NULL); +// SDL_BlitSurface(jogador2, &jogador2_c[0], screen, &offset2); +// jogador_load(posicao1, offset, jogador1, jogador1_c, screen); +// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); +// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); +// SDL_Flip(screen); +// posicao2 = 2; +// break; +// } else { +// pontuacao1 = pontuacao1 + 1; +// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); +// SDL_BlitSurface(explosao, NULL, screen, &offset2); +// SDL_Flip(screen); +// SDL_Delay(500); +// offset2.x = 560, offset2.y = 260; +// } +// break; +// case SDLK_a: +// if (checkCollisionPlayer2(offset, offset2, wall, menu, offset3)) { +// offset2.x = offset2.x - 6; +// SDL_BlitSurface(telaprincipal, NULL, screen, NULL); +// SDL_BlitSurface(jogador2, &jogador2_c[3], screen, &offset2); +// jogador_load(posicao1, offset, jogador1, jogador1_c, screen); +// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); +// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); +// SDL_Flip(screen); +// posicao2 = 3; +// break; +// } else { +// pontuacao1 = pontuacao1 + 1; +// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); +// SDL_BlitSurface(explosao, NULL, screen, &offset2); +// SDL_Flip(screen); +// SDL_Delay(500); +// offset2.x = 560, offset2.y = 260; +// } +// break; +// default: +// x = 0; +// break; +// } +// } +// } +// } int main(int argc, char *args[]) { SDL_Init(SDL_INIT_VIDEO); // inicializa��o das fun��es de video @@ -307,6 +310,10 @@ int main(int argc, char *args[]) { SpriteSet pontuacao01{"Pontuacao01"}; Player player1{"Player1"}; + Player player2{"Player2"}; + + std::vector projectiles{}; + size_t projectiles_counter = 0; // SDL_Rect pontuacao01[7]; // retangulos para recorte de imagens dos numeros SDL_Rect jogador1_c[4]; // " " " das posi��es do jogador 1 @@ -326,7 +333,7 @@ int main(int argc, char *args[]) { quit1 = 0; quit2 = 0; entrar = 1; - SDL_EnableKeyRepeat(200, 200); // habilitar a repeti��o de teclas + SDL_EnableKeyRepeat(50, 50); // habilitar a repeti��o de teclas while (quit1 == 0) // loop principal { @@ -343,10 +350,11 @@ int main(int argc, char *args[]) { // SDL_SetColorKey(player1.spriteSurface, SDL_SRCCOLORKEY | SDL_RLEACCEL, // (Uint16)SDL_MapRGB(jogador1->format, 0, 255, // 0)); // para por transparencia no verde. - jogador2 = SDL_LoadBMP("resources/jogador2.bmp"); - SDL_SetColorKey(jogador2, SDL_SRCCOLORKEY | SDL_RLEACCEL, - (Uint16)SDL_MapRGB(jogador2->format, 0, 255, - 0)); // para por transparencia no verde. + // jogador2 = SDL_LoadBMP("resources/jogador2.bmp"); + player2.loadSprite("resources/jogador2.bmp"); + // SDL_SetColorKey(jogador2, SDL_SRCCOLORKEY | SDL_RLEACCEL, + // (Uint16)SDL_MapRGB(jogador2->format, 0, 255, + // 0)); // para por transparencia no verde. bala = SDL_LoadBMP("resources/bala.bmp"); SDL_SetColorKey( bala, SDL_SRCCOLORKEY | SDL_RLEACCEL, @@ -379,7 +387,7 @@ int main(int argc, char *args[]) { } } } - if (entrar == 3) // condi��o de entrada no menu + else if (entrar == 3) // condi��o de entrada no menu { SDL_FreeSurface(telaprincipal); telaprincipal = SDL_LoadBMP("resources/menu.bmp"); // troca a imagem bmp para o menu @@ -410,173 +418,173 @@ int main(int argc, char *args[]) { } } } - if (entrar == 4) { - SDL_FreeSurface(telaprincipal); - telaprincipal = SDL_LoadBMP( - "resources/menuonline.bmp"); // troca a imagem bmp para o menu para online - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_Flip(screen); + // if (entrar == 4) { + // SDL_FreeSurface(telaprincipal); + // telaprincipal = SDL_LoadBMP( + // "resources/menuonline.bmp"); // troca a imagem bmp para o menu para online + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // SDL_Flip(screen); - if (SDL_PollEvent(&event)) // menu do jogo. - { - if (event.type == SDL_KEYDOWN) // evento do tipo tecla pressionada - { - switch (event.key.keysym.sym) { - case SDLK_1: // caso seja servidor - entrar = 5; - break; - case SDLK_2: // caso seja cliente - entrar = 6; - break; - default: - x = 1; - } - } - if (event.type == SDL_QUIT) // fechar o programa caso cliquem no X - { - quit1 = 1; - } - } - } - if (entrar == 5) // condi��o de entrada para o servidor(quem criou o jogo) - { - WSADATA t_wsa; // WSADATA structure - WORD wVers; // version number - int iError, quit, bytesreceive, bytessend, x; // error number - char buffer[200]; - quit = 1; + // if (SDL_PollEvent(&event)) // menu do jogo. + // { + // if (event.type == SDL_KEYDOWN) // evento do tipo tecla pressionada + // { + // switch (event.key.keysym.sym) { + // case SDLK_1: // caso seja servidor + // entrar = 5; + // break; + // case SDLK_2: // caso seja cliente + // entrar = 6; + // break; + // default: + // x = 1; + // } + // } + // if (event.type == SDL_QUIT) // fechar o programa caso cliquem no X + // { + // quit1 = 1; + // } + // } + // } + // if (entrar == 5) // condi��o de entrada para o servidor(quem criou o jogo) + // { + // WSADATA t_wsa; // WSADATA structure + // WORD wVers; // version number + // int iError, quit, bytesreceive, bytessend, x; // error number + // char buffer[200]; + // quit = 1; - SDL_FreeSurface(telaprincipal); - telaprincipal = SDL_LoadBMP( - "resources/mododeespera.bmp"); // troca a imagem bmp para o menu para online - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_Flip(screen); + // SDL_FreeSurface(telaprincipal); + // telaprincipal = SDL_LoadBMP( + // "resources/mododeespera.bmp"); // troca a imagem bmp para o menu para online + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // SDL_Flip(screen); - wVers = MAKEWORD(2, 2); // Set the version number to 2.2 - iError = WSAStartup(wVers, &t_wsa); // Start the WSADATA + // wVers = MAKEWORD(2, 2); // Set the version number to 2.2 + // iError = WSAStartup(wVers, &t_wsa); // Start the WSADATA - SOCKET sServer; - sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + // SOCKET sServer; + // sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - SOCKADDR_IN sinServer; - memset(&sinServer, 0, sizeof(sinServer)); + // SOCKADDR_IN sinServer; + // memset(&sinServer, 0, sizeof(sinServer)); - sinServer.sin_family = AF_INET; - sinServer.sin_addr.s_addr = INADDR_ANY; // Where to start server? - sinServer.sin_port = htons(1000); // Port + // sinServer.sin_family = AF_INET; + // sinServer.sin_addr.s_addr = INADDR_ANY; // Where to start server? + // sinServer.sin_port = htons(1000); // Port - if (bind(sServer, (LPSOCKADDR)&sinServer, sizeof(sinServer)) == SOCKET_ERROR) { - /* failed at starting server */ - MessageBox(NULL, (LPCTSTR) "Could not bind the server!()", - (LPCTSTR) "Campo de batalha", MB_OK | MB_ICONERROR); - WSACleanup(); - return 0; - } + // if (bind(sServer, (LPSOCKADDR)&sinServer, sizeof(sinServer)) == SOCKET_ERROR) { + // /* failed at starting server */ + // MessageBox(NULL, (LPCTSTR) "Could not bind the server!()", + // (LPCTSTR) "Campo de batalha", MB_OK | MB_ICONERROR); + // WSACleanup(); + // return 0; + // } - while (listen(sServer, 20) == SOCKET_ERROR) { - Sleep(10); - } - MessageBox(NULL, (LPCTSTR) "Esperando por clientes", (LPCTSTR) "Campo de batalha", - MB_OK); - - SOCKET sClient; - int szlength; - - szlength = sizeof(sinServer); - sClient = accept(sServer, (LPSOCKADDR)&sinServer, &szlength); - - if (sClient == INVALID_SOCKET) { - MessageBox(NULL, (LPCTSTR) "Nao eh possivel aceitar esse cliente!", - (LPCTSTR) "Campo de batalha", MB_OK); - closesocket(sServer); - WSACleanup(); - return 0; - } else { - MessageBox(NULL, (LPCTSTR) "Cliente aceito!", (LPCTSTR) "Campo de batalha", MB_OK); - quit = 1; - } - while (quit == 1) { - if (SDL_PollEvent(&event)) // menu do jogo. - { - if (event.type == SDL_KEYDOWN) // evento do tipo tecla pressionada - { - switch (event.key.keysym.sym) { - case SDLK_1: - bytesreceive = recv(sClient, buffer, 200, 0); - bytessend = send(sClient, buffer, 200, 0); - MessageBox(NULL, (LPCTSTR) "dados enviados com sucesso!", - (LPCTSTR) "Campo de batalha", MB_OK); - break; - case SDLK_2: - quit = 0; - break; - default: - x = 1; - } - } - if (event.type == SDL_QUIT) // fechar o programa caso cliquem no X - { - quit1 = 1; - quit = 0; - } - } - } - entrar = 1; - // Cleanup - closesocket(sClient); - closesocket(sServer); - // Shutdown Winsock - WSACleanup(); - } - if (entrar == 6) // condi��o de entrada no cliente - { - SDL_FreeSurface(telaprincipal); - telaprincipal = - SDL_LoadBMP("resources/mododeespera.bmp"); // troca a imagem bmp para o menu - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_Flip(screen); + // while (listen(sServer, 20) == SOCKET_ERROR) { + // Sleep(10); + // } + // MessageBox(NULL, (LPCTSTR) "Esperando por clientes", (LPCTSTR) "Campo de batalha", + // MB_OK); - WSADATA t_wsa; // WSADATA structure - WORD wVers; // version number - int iError; // error number - - wVers = MAKEWORD(2, 2); // Set the version number to 2.2 - iError = WSAStartup(wVers, &t_wsa); // Start the WSADATA - - SOCKET sClient; - sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - - SOCKADDR_IN sinClient; - memset(&sinClient, 0, sizeof(sinClient)); - - char cIP[50]; - strcpy(cIP, "127.0.0.1"); - MessageBox(NULL, (LPCTSTR) "digite o ip para se conectar!", - (LPCTSTR) "Campo de batalha", MB_OK); - scanf("%s", cIP); - sinClient.sin_family = AF_INET; - sinClient.sin_addr.s_addr = inet_addr(cIP); // Where to start server? - sinClient.sin_port = htons(1000); // Port - - if (connect(sClient, (LPSOCKADDR)&sinClient, sizeof(sinClient)) == SOCKET_ERROR) { - /* failed at starting server */ - MessageBox(NULL, (LPCTSTR) "nao foi possivel conectar-se a um servidor!", - (LPCTSTR) "Campo de batalha", MB_OK); - WSACleanup(); - entrar = 4; - } - // Now we can send/recv data! - int bytessend, bytesreceive, quit, x, y; - char cBuffer[200]; - char buffer[200]; - quit = 0; + // SOCKET sClient; + // int szlength; - MessageBox(NULL, (LPCTSTR) "voce esta conectado ao servidor!", - (LPCTSTR) "Campo de batalha", MB_OK); + // szlength = sizeof(sinServer); + // sClient = accept(sServer, (LPSOCKADDR)&sinServer, &szlength); - entrar = 4; - } - if (entrar == 2) // condicao 2 (o jogo em si) + // if (sClient == INVALID_SOCKET) { + // MessageBox(NULL, (LPCTSTR) "Nao eh possivel aceitar esse cliente!", + // (LPCTSTR) "Campo de batalha", MB_OK); + // closesocket(sServer); + // WSACleanup(); + // return 0; + // } else { + // MessageBox(NULL, (LPCTSTR) "Cliente aceito!", (LPCTSTR) "Campo de batalha", MB_OK); + // quit = 1; + // } + // while (quit == 1) { + // if (SDL_PollEvent(&event)) // menu do jogo. + // { + // if (event.type == SDL_KEYDOWN) // evento do tipo tecla pressionada + // { + // switch (event.key.keysym.sym) { + // case SDLK_1: + // bytesreceive = recv(sClient, buffer, 200, 0); + // bytessend = send(sClient, buffer, 200, 0); + // MessageBox(NULL, (LPCTSTR) "dados enviados com sucesso!", + // (LPCTSTR) "Campo de batalha", MB_OK); + // break; + // case SDLK_2: + // quit = 0; + // break; + // default: + // x = 1; + // } + // } + // if (event.type == SDL_QUIT) // fechar o programa caso cliquem no X + // { + // quit1 = 1; + // quit = 0; + // } + // } + // } + // entrar = 1; + // // Cleanup + // closesocket(sClient); + // closesocket(sServer); + // // Shutdown Winsock + // WSACleanup(); + // } + // if (entrar == 6) // condi��o de entrada no cliente + // { + // SDL_FreeSurface(telaprincipal); + // telaprincipal = + // SDL_LoadBMP("resources/mododeespera.bmp"); // troca a imagem bmp para o menu + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // SDL_Flip(screen); + + // WSADATA t_wsa; // WSADATA structure + // WORD wVers; // version number + // int iError; // error number + + // wVers = MAKEWORD(2, 2); // Set the version number to 2.2 + // iError = WSAStartup(wVers, &t_wsa); // Start the WSADATA + + // SOCKET sClient; + // sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + + // SOCKADDR_IN sinClient; + // memset(&sinClient, 0, sizeof(sinClient)); + + // char cIP[50]; + // strcpy(cIP, "127.0.0.1"); + // MessageBox(NULL, (LPCTSTR) "digite o ip para se conectar!", + // (LPCTSTR) "Campo de batalha", MB_OK); + // scanf("%s", cIP); + // sinClient.sin_family = AF_INET; + // sinClient.sin_addr.s_addr = inet_addr(cIP); // Where to start server? + // sinClient.sin_port = htons(1000); // Port + + // if (connect(sClient, (LPSOCKADDR)&sinClient, sizeof(sinClient)) == SOCKET_ERROR) { + // /* failed at starting server */ + // MessageBox(NULL, (LPCTSTR) "nao foi possivel conectar-se a um servidor!", + // (LPCTSTR) "Campo de batalha", MB_OK); + // WSACleanup(); + // entrar = 4; + // } + // // Now we can send/recv data! + // int bytessend, bytesreceive, quit, x, y; + // char cBuffer[200]; + // char buffer[200]; + // quit = 0; + + // MessageBox(NULL, (LPCTSTR) "voce esta conectado ao servidor!", + // (LPCTSTR) "Campo de batalha", MB_OK); + + // entrar = 4; + // } + else if (entrar == 2) // condicao 2 (o jogo em si) { // atribuicao de variaveis inteiras , retangulos , coordenadas e etc. pontuacao1 = 0; @@ -592,7 +600,7 @@ int main(int argc, char *args[]) { pontuacao03.x = 550, pontuacao03.y = 435; player1.position.x = 15, player1.position.y = 170, player1.position.w = 32, player1.position.h = 32; - offset2.x = 560, offset2.y = 260, offset2.w = 32, offset2.h = 32; + player2.position.x = 560, player2.position.y = 260, player2.position.w = 32, player2.position.h = 32; wall.x = 287, wall.y = 102, wall.w = 53, wall.h = 240; menu.x = 1, menu.y = 413, menu.w = 638, menu.h = 66; @@ -645,7 +653,7 @@ int main(int argc, char *args[]) { SDL_BlitSurface(pontuacao, &pontuacaoZeroRect, screen, &pontuacao02); SDL_BlitSurface(pontuacao, &pontuacaoZeroRect, screen, &pontuacao03); SDL_BlitSurface(player1.spriteSurface, &jogador1_c[0], screen, &player1.position); - SDL_BlitSurface(jogador2, &jogador2_c[3], screen, &offset2); + SDL_BlitSurface(player2.spriteSurface, &jogador2_c[3], screen, &player2.position); SDL_Flip(screen); player1.setDirection(DirectionEnum::RIGHT); // posicao1 = 2; @@ -660,230 +668,115 @@ int main(int argc, char *args[]) { case SDL_KEYDOWN: switch (event.key.keysym.sym) { // comandos para o jogador 1 case SDLK_UP: // tecla para cima - if (checkCollisionPlayer1(player1.position, offset2, wall, menu, offset3)) { - - // Update position and direction of player1 - player1.position.y = player1.position.y - 6; - player1.setDirection(DirectionEnum::UP); - - // Drawing things - NEED to be removed - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(player1.spriteSurface, &jogador1_c[1], screen, &player1.position); - jogador_load(posicao2, offset2, jogador2, jogador2_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - SDL_Flip(screen); - // posicao1 = static_cast(DirectionEnum::UP); - break; - } else { - pontuacao2 = pontuacao2 + 1; - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &player1.position); - SDL_Flip(screen); - SDL_Delay(500); - player1.position.x = 15, player1.position.y = 170; + if (player1.state == PlayerStateEnum::IDLE) { + if (checkCollisionPlayer1(player1.position, player2.position, wall, menu, offset3)) { + player1.position.y = player1.position.y - 6; + player1.setDirection(DirectionEnum::UP); + break; + } else { + pontuacao2 = pontuacao2 + 1; + player1.state = PlayerStateEnum::EXPLODING; + player1.timer = 1000; + } } break; case SDLK_DOWN: // tecla para baixo - if (checkCollisionPlayer1(player1.position, offset2, wall, menu, offset3)) { - - // Update position and direction of player1 - player1.position.y = player1.position.y + 6; - player1.setDirection(DirectionEnum::DOWN); - - // Drawing things - NEED to be removed - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(player1.spriteSurface, &jogador1_c[2], screen, &player1.position); - jogador_load(posicao2, offset2, jogador2, jogador2_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - SDL_Flip(screen); - // posicao1 = static_cast(DirectionEnum::DOWN); - break; - } else { - pontuacao2 = pontuacao2 + 1; - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &player1.position); - SDL_Flip(screen); - SDL_Delay(500); - player1.position.x = 15, player1.position.y = 170; + if (player1.state == PlayerStateEnum::IDLE) { + if (checkCollisionPlayer1(player1.position, player2.position, wall, menu, offset3)) { + // Update position and direction of player1 + player1.position.y = player1.position.y + 6; + player1.setDirection(DirectionEnum::DOWN); + break; + } else { + pontuacao2 = pontuacao2 + 1; + player1.state = PlayerStateEnum::EXPLODING; + player1.timer = 1000; + } } break; case SDLK_RIGHT: // tecla para a direita - if (checkCollisionPlayer1(player1.position, offset2, wall, menu, offset3)) { - - // Update position and direction of player1 - player1.position.x = player1.position.x + 6; - player1.setDirection(DirectionEnum::RIGHT); - - // Drawing things - NEED to be removed - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(player1.spriteSurface, &jogador1_c[0], screen, &player1.position); - jogador_load(posicao2, offset2, jogador2, jogador2_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - SDL_Flip(screen); - // posicao1 = static_cast(DirectionEnum::RIGHT); - break; - } else { - pontuacao2 = pontuacao2 + 1; - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &player1.position); - SDL_Flip(screen); - SDL_Delay(500); - player1.position.x = 15, player1.position.y = 170; + if (player1.state == PlayerStateEnum::IDLE) { + if (checkCollisionPlayer1(player1.position, player2.position, wall, menu, offset3)) { + // Update position and direction of player1 + player1.position.x = player1.position.x + 6; + player1.setDirection(DirectionEnum::RIGHT); + break; + } else { + pontuacao2 = pontuacao2 + 1; + player1.state = PlayerStateEnum::EXPLODING; + player1.timer = 1000; + } } break; case SDLK_LEFT: // tecla para esquerda - if (checkCollisionPlayer1(player1.position, offset2, wall, menu, offset3)) { - - // Update position and direction of player1 - player1.position.x = player1.position.x - 6; - player1.setDirection(DirectionEnum::LEFT); - - // Drawing things - NEED to be removed - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(player1.spriteSurface, &jogador1_c[3], screen, &player1.position); - jogador_load(posicao2, offset2, jogador2, jogador2_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - SDL_Flip(screen); - // posicao1 = static_cast(DirectionEnum::LEFT); - break; - } else { - pontuacao2 = pontuacao2 + 1; - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &player1.position); - SDL_Flip(screen); - SDL_Delay(500); - player1.position.x = 15, player1.position.y = 170; + if (player1.state == PlayerStateEnum::IDLE) { + if (checkCollisionPlayer1(player1.position, player2.position, wall, menu, offset3)) { + // Update position and direction of player1 + player1.position.x = player1.position.x - 6; + player1.setDirection(DirectionEnum::LEFT); + break; + } else { + pontuacao2 = pontuacao2 + 1; + player1.state = PlayerStateEnum::EXPLODING; + player1.timer = 1000; + } } break; // comandos para o jogador 2 case SDLK_w: // tecla w ( para cima ) - if (checkCollisionPlayer2(player1.position, offset2, wall, menu, offset3)) { - - // Update position and direction of player2 - offset2.y = offset2.y - 6; - posicao2 = static_cast(DirectionEnum::UP); - - // Drawing things - NEED to be removed - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(jogador2, &jogador2_c[1], screen, &offset2); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - SDL_Flip(screen); - break; - } else { - pontuacao1 = pontuacao1 + 1; - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &offset2); - SDL_Flip(screen); - SDL_Delay(500); - offset2.x = 560, offset2.y = 260; + if (player2.state == PlayerStateEnum::IDLE) { + if (checkCollisionPlayer2(player1.position, player2.position, wall, menu, offset3)) { + // Update position and direction of player2 + player2.position.y = player2.position.y - 6; + player2.setDirection(DirectionEnum::UP); + break; + } else { + pontuacao1 = pontuacao1 + 1; + player2.state = PlayerStateEnum::EXPLODING; + player2.timer = 1000; + } } break; case SDLK_s: // tecla s ( para baixo ) - if (checkCollisionPlayer2(player1.position, offset2, wall, menu, offset3)) { - - // Update position and direction of player2 - offset2.y = offset2.y + 6; - posicao2 = static_cast(DirectionEnum::DOWN); - - // Drawing things - NEED to be removed - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(jogador2, &jogador2_c[2], screen, &offset2); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - SDL_Flip(screen); - break; - } else { - pontuacao1 = pontuacao1 + 1; - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &offset2); - SDL_Flip(screen); - SDL_Delay(500); - offset2.x = 560, offset2.y = 260; + if (player2.state == PlayerStateEnum::IDLE) { + if (checkCollisionPlayer2(player1.position, player2.position, wall, menu, offset3)) { + // Update position and direction of player2 + player2.position.y = player2.position.y + 6; + player2.setDirection(DirectionEnum::DOWN); + break; + } else { + pontuacao1 = pontuacao1 + 1; + player2.state = PlayerStateEnum::EXPLODING; + player2.timer = 1000; + } } break; case SDLK_d: // tecla d ( para direita ) - if (checkCollisionPlayer2(player1.position, offset2, wall, menu, offset3)) { - // Update position and direction of player2 - offset2.x = offset2.x + 6; - posicao2 = static_cast(DirectionEnum::RIGHT); - - // Drawing things - NEED to be removed - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(jogador2, &jogador2_c[0], screen, &offset2); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - SDL_Flip(screen); - break; - } else { - pontuacao1 = pontuacao1 + 1; - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &offset2); - SDL_Flip(screen); - SDL_Delay(500); - offset2.x = 560, offset2.y = 260; + if (player2.state == PlayerStateEnum::IDLE) { + if (checkCollisionPlayer2(player1.position, player2.position, wall, menu, offset3)) { + // Update position and direction of player2 + player2.position.x = player2.position.x + 6; + player2.setDirection(DirectionEnum::RIGHT); + break; + } else { + pontuacao1 = pontuacao1 + 1; + player2.state = PlayerStateEnum::EXPLODING; + player2.timer = 1000; + } } break; case SDLK_a: // tecla a ( para esquerda ) - if (checkCollisionPlayer2(player1.position, offset2, wall, menu, offset3)) { - // Update position and direction of player2 - offset2.x = offset2.x - 6; - posicao2 = static_cast(DirectionEnum::LEFT); - - // Drawing things - NEED to be removed - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - SDL_BlitSurface(jogador2, &jogador2_c[3], screen, &offset2); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - SDL_Flip(screen); - break; - } else { - pontuacao1 = pontuacao1 + 1; - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, &offset2); - SDL_Flip(screen); - SDL_Delay(500); - offset2.x = 560, offset2.y = 260; + if (player2.state == PlayerStateEnum::IDLE) { + if (checkCollisionPlayer2(player1.position, player2.position, wall, menu, offset3)) { + // Update position and direction of player2 + player2.position.x = player2.position.x - 6; + player2.setDirection(DirectionEnum::LEFT); + break; + } else { + pontuacao1 = pontuacao1 + 1; + player2.state = PlayerStateEnum::EXPLODING; + player2.timer = 1000; + } } break; case SDLK_ESCAPE: @@ -893,417 +786,475 @@ int main(int argc, char *args[]) { case SDLK_m: // tecla m para o tiro do jogador 1 switch (player1.direction) { case static_cast(DirectionEnum::UP): - offset3.x = player1.position.x + 12; - offset3.y = player1.position.y - 12; - for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { - offset3.y = offset3.y - 10; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - jogador_load(posicao2, offset2, jogador2, - jogador2_c, screen); - SDL_BlitSurface(bala, NULL, screen, &offset3); - SDL_Flip(screen); - SDL_Delay(50); - andar(event, screen, telaprincipal, player1.spriteSurface, - jogador2, bala, explosao, pontuacao, - pontuacao01, jogador1_c, jogador2_c, wall, - menu, offset3, pontuacao02, pontuacao03, - bala01, vencedor, quit1, quit2, x, entrar, - bala1, bala2, pontuacao1, pontuacao2, - vencedor0, player1.direction, player1.position); - if (!checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, - offset2.h, offset3.x, offset3.y, - offset3.w, offset3.h)) { - pontuacao1 = pontuacao1 + 1; - pontuacao_load(pontuacao1, pontuacao02, - pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, - &offset2); - SDL_Flip(screen); - SDL_Delay(100); - offset2.x = 560, offset2.y = 260; - break; - } + { + // offset3.x = player1.position.x + 12; + // offset3.y = player1.position.y - 12; + + Projectile projectile = Projectile(projectiles_counter); + projectile.loadSprite("resources/bala.bmp"); + + projectile.position.x = player1.position.x + 12; + projectile.position.y = player1.position.y - 12; + projectile.setDirection(DirectionEnum::UP); + projectile.movingCooldown = PROJECTILE_MOVING_COOLDOWN; + + projectiles.push_back(projectile); + + projectiles_counter++; + // for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { + // offset3.y = offset3.y - 10; + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, + // screen); + // pontuacao_load(pontuacao2, pontuacao03, pontuacao, + // pontuacao01, screen); + // pontuacao_load(pontuacao1, pontuacao02, pontuacao, + // pontuacao01, screen); + // jogador_load(posicao2, offset2, jogador2, + // jogador2_c, screen); + // SDL_BlitSurface(bala, NULL, screen, &offset3); + // SDL_Flip(screen); + // SDL_Delay(50); + // andar(event, screen, telaprincipal, player1.spriteSurface, + // jogador2, bala, explosao, pontuacao, + // pontuacao01, jogador1_c, jogador2_c, wall, + // menu, offset3, pontuacao02, pontuacao03, + // bala01, vencedor, quit1, quit2, x, entrar, + // bala1, bala2, pontuacao1, pontuacao2, + // vencedor0, player1.direction, player1.position); + // if (!checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, + // offset2.h, offset3.x, offset3.y, + // offset3.w, offset3.h)) { + // pontuacao1 = pontuacao1 + 1; + // pontuacao_load(pontuacao1, pontuacao02, + // pontuacao, pontuacao01, screen); + // SDL_BlitSurface(explosao, NULL, screen, + // &offset2); + // SDL_Flip(screen); + // SDL_Delay(100); + // offset2.x = 560, offset2.y = 260; + // break; + // } + // } + // offset3.x = 650; + // offset3.y = 650; + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, + // screen); + // pontuacao_load(pontuacao2, pontuacao03, pontuacao, + // pontuacao01, screen); + // pontuacao_load(pontuacao1, pontuacao02, pontuacao, + // pontuacao01, screen); + // jogador_load(posicao2, offset2, jogador2, jogador2_c, + // screen); + // SDL_Flip(screen); } - offset3.x = 650; - offset3.y = 650; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - jogador_load(posicao2, offset2, jogador2, jogador2_c, - screen); - SDL_Flip(screen); break; case static_cast(DirectionEnum::DOWN): - offset3.x = player1.position.x + 12; - offset3.y = player1.position.y + 36; - for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { - offset3.y = offset3.y + 10; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - jogador_load(posicao2, offset2, jogador2, - jogador2_c, screen); - SDL_BlitSurface(bala, NULL, screen, &offset3); - SDL_Flip(screen); - SDL_Delay(50); - andar(event, screen, telaprincipal, player1.spriteSurface, - jogador2, bala, explosao, pontuacao, - pontuacao01, jogador1_c, jogador2_c, wall, - menu, offset3, pontuacao02, pontuacao03, - bala01, vencedor, quit1, quit2, x, entrar, - bala1, bala2, pontuacao1, pontuacao2, - vencedor0, player1.direction, player1.position); - if (!checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, - offset2.h, offset3.x, offset3.y, - offset3.w, offset3.h)) { - pontuacao1 = pontuacao1 + 1; - pontuacao_load(pontuacao1, pontuacao02, - pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, - &offset2); - SDL_Flip(screen); - SDL_Delay(100); - offset2.x = 560, offset2.y = 260; - break; - } + { + // offset3.x = player1.position.x + 12; + // offset3.y = player1.position.y + 36; + + Projectile projectile = Projectile(projectiles_counter); + projectile.loadSprite("resources/bala.bmp"); + + projectile.position.x = player1.position.x + 12; + projectile.position.y = player1.position.y + 36; + projectile.setDirection(DirectionEnum::DOWN); + projectile.movingCooldown = PROJECTILE_MOVING_COOLDOWN; + + projectiles.push_back(projectile); + + projectiles_counter++; + // for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { + // offset3.y = offset3.y + 10; + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, + // screen); + // pontuacao_load(pontuacao2, pontuacao03, pontuacao, + // pontuacao01, screen); + // pontuacao_load(pontuacao1, pontuacao02, pontuacao, + // pontuacao01, screen); + // jogador_load(posicao2, offset2, jogador2, + // jogador2_c, screen); + // SDL_BlitSurface(bala, NULL, screen, &offset3); + // SDL_Flip(screen); + // SDL_Delay(50); + // andar(event, screen, telaprincipal, player1.spriteSurface, + // jogador2, bala, explosao, pontuacao, + // pontuacao01, jogador1_c, jogador2_c, wall, + // menu, offset3, pontuacao02, pontuacao03, + // bala01, vencedor, quit1, quit2, x, entrar, + // bala1, bala2, pontuacao1, pontuacao2, + // vencedor0, player1.direction, player1.position); + // if (!checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, + // offset2.h, offset3.x, offset3.y, + // offset3.w, offset3.h)) { + // pontuacao1 = pontuacao1 + 1; + // pontuacao_load(pontuacao1, pontuacao02, + // pontuacao, pontuacao01, screen); + // SDL_BlitSurface(explosao, NULL, screen, + // &offset2); + // SDL_Flip(screen); + // SDL_Delay(100); + // offset2.x = 560, offset2.y = 260; + // break; + // } + // } + // offset3.x = 650; + // offset3.y = 650; + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, + // screen); + // pontuacao_load(pontuacao2, pontuacao03, pontuacao, + // pontuacao01, screen); + // pontuacao_load(pontuacao1, pontuacao02, pontuacao, + // pontuacao01, screen); + // jogador_load(posicao2, offset2, jogador2, jogador2_c, + // screen); + // SDL_Flip(screen); } - offset3.x = 650; - offset3.y = 650; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - jogador_load(posicao2, offset2, jogador2, jogador2_c, - screen); - SDL_Flip(screen); break; case static_cast(DirectionEnum::RIGHT): - offset3.x = player1.position.x + 36; - offset3.y = player1.position.y + 12; - for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { - offset3.x = offset3.x + 10; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - jogador_load(posicao2, offset2, jogador2, - jogador2_c, screen); - SDL_BlitSurface(bala, NULL, screen, &offset3); - SDL_Flip(screen); - SDL_Delay(50); - andar(event, screen, telaprincipal, player1.spriteSurface, - jogador2, bala, explosao, pontuacao, - pontuacao01, jogador1_c, jogador2_c, wall, - menu, offset3, pontuacao02, pontuacao03, - bala01, vencedor, quit1, quit2, x, entrar, - bala1, bala2, pontuacao1, pontuacao2, - vencedor0, player1.direction, player1.position); - if (!checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, - offset2.h, offset3.x, offset3.y, - offset3.w, offset3.h)) { - pontuacao1 = pontuacao1 + 1; - pontuacao_load(pontuacao1, pontuacao02, - pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, - &offset2); - SDL_Flip(screen); - SDL_Delay(100); - offset2.x = 560, offset2.y = 260; - break; - } + { + // offset3.x = player1.position.x + 36; + // offset3.y = player1.position.y + 12; + + + Projectile projectile = Projectile(projectiles_counter); + projectile.loadSprite("resources/bala.bmp"); + + projectile.position.x = player1.position.x + 36; + projectile.position.y = player1.position.y + 12; + projectile.setDirection(DirectionEnum::RIGHT); + projectile.movingCooldown = PROJECTILE_MOVING_COOLDOWN; + + projectiles.push_back(projectile); + + projectiles_counter++; + // for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { + // offset3.x = offset3.x + 10; + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, + // screen); + // pontuacao_load(pontuacao2, pontuacao03, pontuacao, + // pontuacao01, screen); + // pontuacao_load(pontuacao1, pontuacao02, pontuacao, + // pontuacao01, screen); + // jogador_load(posicao2, offset2, jogador2, + // jogador2_c, screen); + // SDL_BlitSurface(bala, NULL, screen, &offset3); + // SDL_Flip(screen); + // SDL_Delay(50); + // andar(event, screen, telaprincipal, player1.spriteSurface, + // jogador2, bala, explosao, pontuacao, + // pontuacao01, jogador1_c, jogador2_c, wall, + // menu, offset3, pontuacao02, pontuacao03, + // bala01, vencedor, quit1, quit2, x, entrar, + // bala1, bala2, pontuacao1, pontuacao2, + // vencedor0, player1.direction, player1.position); + // if (!checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, + // offset2.h, offset3.x, offset3.y, + // offset3.w, offset3.h)) { + // pontuacao1 = pontuacao1 + 1; + // pontuacao_load(pontuacao1, pontuacao02, + // pontuacao, pontuacao01, screen); + // SDL_BlitSurface(explosao, NULL, screen, + // &offset2); + // SDL_Flip(screen); + // SDL_Delay(100); + // offset2.x = 560, offset2.y = 260; + // break; + // } + // } + // offset3.x = 650; + // offset3.y = 650; + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, + // screen); + // pontuacao_load(pontuacao2, pontuacao03, pontuacao, + // pontuacao01, screen); + // pontuacao_load(pontuacao1, pontuacao02, pontuacao, + // pontuacao01, screen); + // jogador_load(posicao2, offset2, jogador2, jogador2_c, + // screen); + // SDL_Flip(screen); } - offset3.x = 650; - offset3.y = 650; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - jogador_load(posicao2, offset2, jogador2, jogador2_c, - screen); - SDL_Flip(screen); break; case static_cast(DirectionEnum::LEFT): - offset3.x = player1.position.x - 12; - offset3.y = player1.position.y + 12; - for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { - offset3.x = offset3.x - 10; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - jogador_load(posicao2, offset2, jogador2, - jogador2_c, screen); - SDL_BlitSurface(bala, NULL, screen, &offset3); - SDL_Flip(screen); - SDL_Delay(50); - andar(event, screen, telaprincipal, player1.spriteSurface, - jogador2, bala, explosao, pontuacao, - pontuacao01, jogador1_c, jogador2_c, wall, - menu, offset3, pontuacao02, pontuacao03, - bala01, vencedor, quit1, quit2, x, entrar, - bala1, bala2, pontuacao1, pontuacao2, - vencedor0, player1.direction, player1.position); - if (!checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, - offset2.h, offset3.x, offset3.y, - offset3.w, offset3.h)) { - pontuacao1 = pontuacao1 + 1; - pontuacao_load(pontuacao1, pontuacao02, - pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, - &offset2); - SDL_Flip(screen); - SDL_Delay(100); - offset2.x = 560, offset2.y = 260; - break; - } + { + // offset3.x = player1.position.x - 12; + // offset3.y = player1.position.y + 12; + + + Projectile projectile = Projectile(projectiles_counter); + projectile.loadSprite("resources/bala.bmp"); + + projectile.position.x = player1.position.x - 12; + projectile.position.y = player1.position.y + 12; + projectile.setDirection(DirectionEnum::LEFT); + projectile.movingCooldown = PROJECTILE_MOVING_COOLDOWN; + + projectiles.push_back(projectile); + + projectiles_counter++; + // for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { + // offset3.x = offset3.x - 10; + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, + // screen); + // pontuacao_load(pontuacao2, pontuacao03, pontuacao, + // pontuacao01, screen); + // pontuacao_load(pontuacao1, pontuacao02, pontuacao, + // pontuacao01, screen); + // jogador_load(posicao2, offset2, jogador2, + // jogador2_c, screen); + // SDL_BlitSurface(bala, NULL, screen, &offset3); + // SDL_Flip(screen); + // SDL_Delay(50); + // andar(event, screen, telaprincipal, player1.spriteSurface, + // jogador2, bala, explosao, pontuacao, + // pontuacao01, jogador1_c, jogador2_c, wall, + // menu, offset3, pontuacao02, pontuacao03, + // bala01, vencedor, quit1, quit2, x, entrar, + // bala1, bala2, pontuacao1, pontuacao2, + // vencedor0, player1.direction, player1.position); + // if (!checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, + // offset2.h, offset3.x, offset3.y, + // offset3.w, offset3.h)) { + // pontuacao1 = pontuacao1 + 1; + // pontuacao_load(pontuacao1, pontuacao02, + // pontuacao, pontuacao01, screen); + // SDL_BlitSurface(explosao, NULL, screen, + // &offset2); + // SDL_Flip(screen); + // SDL_Delay(100); + // offset2.x = 560, offset2.y = 260; + // break; + // } + // } + // offset3.x = 650; + // offset3.y = 650; + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, + // screen); + // pontuacao_load(pontuacao2, pontuacao03, pontuacao, + // pontuacao01, screen); + // pontuacao_load(pontuacao1, pontuacao02, pontuacao, + // pontuacao01, screen); + // jogador_load(posicao2, offset2, jogador2, jogador2_c, + // screen); + // SDL_Flip(screen); } - offset3.x = 650; - offset3.y = 650; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - jogador_load(posicao2, offset2, jogador2, jogador2_c, - screen); - SDL_Flip(screen); break; } break; case SDLK_f: // tecla f para o jogador 2 switch (posicao2) { case static_cast(DirectionEnum::UP): - offset3.x = offset2.x + 12; - offset3.y = offset2.y - 12; - for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { - offset3.y = offset3.y - 10; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(posicao2, offset2, jogador2, - jogador2_c, screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - SDL_BlitSurface(bala, NULL, screen, &offset3); - SDL_Flip(screen); - SDL_Delay(50); - andar(event, screen, telaprincipal, player1.spriteSurface, - jogador2, bala, explosao, pontuacao, - pontuacao01, jogador1_c, jogador2_c, wall, - menu, offset3, pontuacao02, pontuacao03, - bala01, vencedor, quit1, quit2, x, entrar, - bala1, bala2, pontuacao1, pontuacao2, - vencedor0, player1.direction, player1.position); - if (!checkCollisionBetweenTwoRects( - player1.position.x, player1.position.y, player1.position.w, player1.position.h, - offset3.x, offset3.y, offset3.w, - offset3.h)) { - pontuacao2 = pontuacao2 + 1; - pontuacao_load(pontuacao2, pontuacao03, - pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, - &player1.position); - SDL_Flip(screen); - SDL_Delay(100); - player1.position.x = 15, player1.position.y = 170; - break; - } - } - offset3.x = 650; - offset3.y = 650; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(posicao2, offset2, jogador2, jogador2_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - SDL_Flip(screen); + offset3.x = player2.position.x + 12; + offset3.y = player2.position.y - 12; + // for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { + // offset3.y = offset3.y - 10; + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // jogador_load(posicao2, offset2, jogador2, + // jogador2_c, screen); + // pontuacao_load(pontuacao2, pontuacao03, pontuacao, + // pontuacao01, screen); + // pontuacao_load(pontuacao1, pontuacao02, pontuacao, + // pontuacao01, screen); + // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, + // screen); + // SDL_BlitSurface(bala, NULL, screen, &offset3); + // SDL_Flip(screen); + // SDL_Delay(50); + // andar(event, screen, telaprincipal, player1.spriteSurface, + // jogador2, bala, explosao, pontuacao, + // pontuacao01, jogador1_c, jogador2_c, wall, + // menu, offset3, pontuacao02, pontuacao03, + // bala01, vencedor, quit1, quit2, x, entrar, + // bala1, bala2, pontuacao1, pontuacao2, + // vencedor0, player1.direction, player1.position); + // if (!checkCollisionBetweenTwoRects( + // player1.position.x, player1.position.y, player1.position.w, player1.position.h, + // offset3.x, offset3.y, offset3.w, + // offset3.h)) { + // pontuacao2 = pontuacao2 + 1; + // pontuacao_load(pontuacao2, pontuacao03, + // pontuacao, pontuacao01, screen); + // SDL_BlitSurface(explosao, NULL, screen, + // &player1.position); + // SDL_Flip(screen); + // SDL_Delay(100); + // player1.position.x = 15, player1.position.y = 170; + // break; + // } + // } + // offset3.x = 650; + // offset3.y = 650; + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // jogador_load(posicao2, offset2, jogador2, jogador2_c, + // screen); + // pontuacao_load(pontuacao2, pontuacao03, pontuacao, + // pontuacao01, screen); + // pontuacao_load(pontuacao1, pontuacao02, pontuacao, + // pontuacao01, screen); + // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, + // screen); + // SDL_Flip(screen); break; case static_cast(DirectionEnum::DOWN): - offset3.x = offset2.x + 12; - offset3.y = offset2.y + 36; - for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { - offset3.y = offset3.y + 10; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(posicao2, offset2, jogador2, - jogador2_c, screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - SDL_BlitSurface(bala, NULL, screen, &offset3); - SDL_Flip(screen); - SDL_Delay(50); - andar(event, screen, telaprincipal, player1.spriteSurface, - jogador2, bala, explosao, pontuacao, - pontuacao01, jogador1_c, jogador2_c, wall, - menu, offset3, pontuacao02, pontuacao03, - bala01, vencedor, quit1, quit2, x, entrar, - bala1, bala2, pontuacao1, pontuacao2, - vencedor0, player1.direction, player1.position); - if (!checkCollisionBetweenTwoRects(player1.position.x, player1.position.y, player1.position.w, player1.position.h, - offset3.x, offset3.y, offset3.w, - offset3.h)) { - pontuacao2 = pontuacao2 + 1; - pontuacao_load(pontuacao2, pontuacao03, - pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, - &player1.position); - SDL_Flip(screen); - SDL_Delay(100); - player1.position.x = 15, player1.position.y = 170; - break; - } - } - offset3.x = 650; - offset3.y = 650; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(posicao2, offset2, jogador2, jogador2_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - SDL_Flip(screen); + offset3.x = player2.position.x + 12; + offset3.y = player2.position.y + 36; + // for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { + // offset3.y = offset3.y + 10; + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // jogador_load(posicao2, offset2, jogador2, + // jogador2_c, screen); + // pontuacao_load(pontuacao2, pontuacao03, pontuacao, + // pontuacao01, screen); + // pontuacao_load(pontuacao1, pontuacao02, pontuacao, + // pontuacao01, screen); + // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, + // screen); + // SDL_BlitSurface(bala, NULL, screen, &offset3); + // SDL_Flip(screen); + // SDL_Delay(50); + // andar(event, screen, telaprincipal, player1.spriteSurface, + // jogador2, bala, explosao, pontuacao, + // pontuacao01, jogador1_c, jogador2_c, wall, + // menu, offset3, pontuacao02, pontuacao03, + // bala01, vencedor, quit1, quit2, x, entrar, + // bala1, bala2, pontuacao1, pontuacao2, + // vencedor0, player1.direction, player1.position); + // if (!checkCollisionBetweenTwoRects(player1.position.x, player1.position.y, player1.position.w, player1.position.h, + // offset3.x, offset3.y, offset3.w, + // offset3.h)) { + // pontuacao2 = pontuacao2 + 1; + // pontuacao_load(pontuacao2, pontuacao03, + // pontuacao, pontuacao01, screen); + // SDL_BlitSurface(explosao, NULL, screen, + // &player1.position); + // SDL_Flip(screen); + // SDL_Delay(100); + // player1.position.x = 15, player1.position.y = 170; + // break; + // } + // } + // offset3.x = 650; + // offset3.y = 650; + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // jogador_load(posicao2, offset2, jogador2, jogador2_c, + // screen); + // pontuacao_load(pontuacao2, pontuacao03, pontuacao, + // pontuacao01, screen); + // pontuacao_load(pontuacao1, pontuacao02, pontuacao, + // pontuacao01, screen); + // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, + // screen); + // SDL_Flip(screen); break; case static_cast(DirectionEnum::RIGHT): - offset3.x = offset2.x + 36; - offset3.y = offset2.y + 12; - for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { - offset3.x = offset3.x + 10; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(posicao2, offset2, jogador2, - jogador2_c, screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - SDL_BlitSurface(bala, NULL, screen, &offset3); - SDL_Flip(screen); - SDL_Delay(50); - andar(event, screen, telaprincipal, player1.spriteSurface, - jogador2, bala, explosao, pontuacao, - pontuacao01, jogador1_c, jogador2_c, wall, - menu, offset3, pontuacao02, pontuacao03, - bala01, vencedor, quit1, quit2, x, entrar, - bala1, bala2, pontuacao1, pontuacao2, - vencedor0, player1.direction, player1.position); - if (!checkCollisionBetweenTwoRects(player1.position.x, player1.position.y, player1.position.w, player1.position.h, - offset3.x, offset3.y, offset3.w, - offset3.h)) { - pontuacao2 = pontuacao2 + 1; - pontuacao_load(pontuacao2, pontuacao03, - pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, - &player1.position); - SDL_Flip(screen); - SDL_Delay(100); - player1.position.x = 15, player1.position.y = 170; - break; - } - } - offset3.x = 650; - offset3.y = 650; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(posicao2, offset2, jogador2, jogador2_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - SDL_Flip(screen); + offset3.x = player2.position.x + 36; + offset3.y = player2.position.y + 12; + // for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { + // offset3.x = offset3.x + 10; + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // jogador_load(posicao2, offset2, jogador2, + // jogador2_c, screen); + // pontuacao_load(pontuacao2, pontuacao03, pontuacao, + // pontuacao01, screen); + // pontuacao_load(pontuacao1, pontuacao02, pontuacao, + // pontuacao01, screen); + // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, + // screen); + // SDL_BlitSurface(bala, NULL, screen, &offset3); + // SDL_Flip(screen); + // SDL_Delay(50); + // andar(event, screen, telaprincipal, player1.spriteSurface, + // jogador2, bala, explosao, pontuacao, + // pontuacao01, jogador1_c, jogador2_c, wall, + // menu, offset3, pontuacao02, pontuacao03, + // bala01, vencedor, quit1, quit2, x, entrar, + // bala1, bala2, pontuacao1, pontuacao2, + // vencedor0, player1.direction, player1.position); + // if (!checkCollisionBetweenTwoRects(player1.position.x, player1.position.y, player1.position.w, player1.position.h, + // offset3.x, offset3.y, offset3.w, + // offset3.h)) { + // pontuacao2 = pontuacao2 + 1; + // pontuacao_load(pontuacao2, pontuacao03, + // pontuacao, pontuacao01, screen); + // SDL_BlitSurface(explosao, NULL, screen, + // &player1.position); + // SDL_Flip(screen); + // SDL_Delay(100); + // player1.position.x = 15, player1.position.y = 170; + // break; + // } + // } + // offset3.x = 650; + // offset3.y = 650; + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // jogador_load(posicao2, offset2, jogador2, jogador2_c, + // screen); + // pontuacao_load(pontuacao2, pontuacao03, pontuacao, + // pontuacao01, screen); + // pontuacao_load(pontuacao1, pontuacao02, pontuacao, + // pontuacao01, screen); + // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, + // screen); + // SDL_Flip(screen); break; case static_cast(DirectionEnum::LEFT): - offset3.x = offset2.x - 12; - offset3.y = offset2.y + 12; - for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { - offset3.x = offset3.x - 10; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(posicao2, offset2, jogador2, - jogador2_c, screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - SDL_BlitSurface(bala, NULL, screen, &offset3); - SDL_Flip(screen); - SDL_Delay(50); - andar(event, screen, telaprincipal, player1.spriteSurface, - jogador2, bala, explosao, pontuacao, - pontuacao01, jogador1_c, jogador2_c, wall, - menu, offset3, pontuacao02, pontuacao03, - bala01, vencedor, quit1, quit2, x, entrar, - bala1, bala2, pontuacao1, pontuacao2, - vencedor0, player1.direction, player1.position); - if (!checkCollisionBetweenTwoRects(player1.position.x, player1.position.y, player1.position.w, player1.position.h, - offset3.x, offset3.y, offset3.w, - offset3.h)) { - pontuacao2 = pontuacao2 + 1; - pontuacao_load(pontuacao2, pontuacao03, - pontuacao, pontuacao01, screen); - SDL_BlitSurface(explosao, NULL, screen, - &player1.position); - SDL_Flip(screen); - SDL_Delay(100); - player1.position.x = 15, player1.position.y = 170; - break; - } - } - offset3.x = 650; - offset3.y = 650; - SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(posicao2, offset2, jogador2, jogador2_c, - screen); - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - screen); - SDL_Flip(screen); + offset3.x = player2.position.x - 12; + offset3.y = player2.position.y + 12; + // for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { + // offset3.x = offset3.x - 10; + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // jogador_load(posicao2, offset2, jogador2, + // jogador2_c, screen); + // pontuacao_load(pontuacao2, pontuacao03, pontuacao, + // pontuacao01, screen); + // pontuacao_load(pontuacao1, pontuacao02, pontuacao, + // pontuacao01, screen); + // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, + // screen); + // SDL_BlitSurface(bala, NULL, screen, &offset3); + // SDL_Flip(screen); + // SDL_Delay(50); + // andar(event, screen, telaprincipal, player1.spriteSurface, + // jogador2, bala, explosao, pontuacao, + // pontuacao01, jogador1_c, jogador2_c, wall, + // menu, offset3, pontuacao02, pontuacao03, + // bala01, vencedor, quit1, quit2, x, entrar, + // bala1, bala2, pontuacao1, pontuacao2, + // vencedor0, player1.direction, player1.position); + // if (!checkCollisionBetweenTwoRects(player1.position.x, player1.position.y, player1.position.w, player1.position.h, + // offset3.x, offset3.y, offset3.w, + // offset3.h)) { + // pontuacao2 = pontuacao2 + 1; + // pontuacao_load(pontuacao2, pontuacao03, + // pontuacao, pontuacao01, screen); + // SDL_BlitSurface(explosao, NULL, screen, + // &player1.position); + // SDL_Flip(screen); + // SDL_Delay(100); + // player1.position.x = 15, player1.position.y = 170; + // break; + // } + // } + // offset3.x = 650; + // offset3.y = 650; + // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); + // jogador_load(posicao2, offset2, jogador2, jogador2_c, + // screen); + // pontuacao_load(pontuacao2, pontuacao03, pontuacao, + // pontuacao01, screen); + // pontuacao_load(pontuacao1, pontuacao02, pontuacao, + // pontuacao01, screen); + // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, + // screen); + // SDL_Flip(screen); break; default: x = 0; @@ -1326,13 +1277,111 @@ int main(int argc, char *args[]) { } // Here it should be the drawing logic! + + // Define the color to clear the screen (e.g., black) + Uint32 clearColor = SDL_MapRGB(screen->format, 0, 0, 0); + + // Fill the screen surface with the clear color + SDL_FillRect(screen, NULL, clearColor); SDL_BlitSurface(telaprincipal, NULL, screen, NULL); jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, screen); - jogador_load(posicao2, offset2, jogador2, jogador2_c, + + switch (player1.state) + { + case PlayerStateEnum::EXPLODING: + if (player1.timer > 0) { + SDL_BlitSurface(explosao, NULL, screen, &player1.position); + player1.timer--; + } else { + player1.state = PlayerStateEnum::IDLE; + player1.position.x = 15, player1.position.y = 170; + } + + break; + + default: + break; + } + + jogador_load(player2.direction, player2.position, player2.spriteSurface, jogador2_c, screen); + + switch (player2.state) + { + case PlayerStateEnum::EXPLODING: + { + if (player2.timer > 0) { + SDL_BlitSurface(explosao, NULL, screen, &player2.position); + player2.timer--; + } else { + player2.state = PlayerStateEnum::IDLE; + player2.position.x = 560, player2.position.y = 260; + } + } + break; + + default: + break; + } + + for (auto projectile = projectiles.begin(); projectile != projectiles.end(); ) { + SDL_BlitSurface(projectile->spriteSurface, NULL, screen, &projectile->position); + + if (projectile->movingCooldown > 0) { + projectile->movingCooldown--; + } else { + switch (projectile->direction) + { + case static_cast(DirectionEnum::UP): + { + projectile->position.y--; + projectile->movingCooldown = PROJECTILE_MOVING_COOLDOWN; + } + break; + case static_cast(DirectionEnum::DOWN): + { + projectile->position.y++; + projectile->movingCooldown = PROJECTILE_MOVING_COOLDOWN; + } + break; + case static_cast(DirectionEnum::RIGHT): + { + projectile->position.x++; + projectile->movingCooldown = PROJECTILE_MOVING_COOLDOWN; + } + break; + case static_cast(DirectionEnum::LEFT): + { + projectile->position.x--; + projectile->movingCooldown = PROJECTILE_MOVING_COOLDOWN; + std::cout << "Projectile moving left. Subtracting X - X value: " << projectile->position.x << std::endl; + } + break; + + default: + break; + } + } + if ( + projectile->position.x < 0 || projectile->position.x > 1000 || + projectile->position.y < 0 || projectile->position.y > 1000 + ) { + std::cout << "Before erase projectile" << std::endl; + projectile = projectiles.erase(projectile); // erase returns the next valid iterator + } else { + ++projectile; // Only increment if no deletion occurred + } + } + + // Get the length of the vector + std::size_t length = projectiles.size(); + + std::cout << "The length of the vector is: " << length << std::endl; + + pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); pontuacao_load(pontuacao1, pontuacao02, pontuacao, @@ -1394,6 +1443,9 @@ int main(int argc, char *args[]) { } } } + else { + entrar = 1; + } } SDL_Quit(); return 0; From 64f03dd9ae6c38ed9a78270ae30b0063c5af4be4 Mon Sep 17 00:00:00 2001 From: Arthur Moreno Date: Tue, 5 Nov 2024 23:34:39 +0100 Subject: [PATCH 3/5] Fix position bug, being passed as reference. --- src/main.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index e19bcda..1a813e3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1328,7 +1328,8 @@ int main(int argc, char *args[]) { } for (auto projectile = projectiles.begin(); projectile != projectiles.end(); ) { - SDL_BlitSurface(projectile->spriteSurface, NULL, screen, &projectile->position); + SDL_Rect blitPosition = projectile->position; + SDL_BlitSurface(projectile->spriteSurface, NULL, screen, &blitPosition); if (projectile->movingCooldown > 0) { projectile->movingCooldown--; @@ -1357,7 +1358,6 @@ int main(int argc, char *args[]) { { projectile->position.x--; projectile->movingCooldown = PROJECTILE_MOVING_COOLDOWN; - std::cout << "Projectile moving left. Subtracting X - X value: " << projectile->position.x << std::endl; } break; @@ -1366,8 +1366,8 @@ int main(int argc, char *args[]) { } } if ( - projectile->position.x < 0 || projectile->position.x > 1000 || - projectile->position.y < 0 || projectile->position.y > 1000 + projectile->position.x < -10 || projectile->position.x > 1000 || + projectile->position.y < -10 || projectile->position.y > 1000 ) { std::cout << "Before erase projectile" << std::endl; projectile = projectiles.erase(projectile); // erase returns the next valid iterator From 883e352b8abfe15497c58805f66135981ccc16b5 Mon Sep 17 00:00:00 2001 From: Arthur Moreno Date: Wed, 6 Nov 2024 21:10:31 +0100 Subject: [PATCH 4/5] Refactor projectile logic and remove old code. --- src/main.cpp | 1090 +++++++++----------------------------------------- 1 file changed, 194 insertions(+), 896 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 1a813e3..cd2516e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -17,28 +17,26 @@ #include "Player.hpp" #include "Projectile.hpp" -// enum struct DirectionEnum { UP = 0, DOWN = 1, RIGHT = 2, LEFT = 3}; - -// SDL_Rect offset; // coordenada do jogador 1 -// SDL_Rect offset2; // coordenada do jogador 2 -// int posicao1; -int posicao2; // variavel para determinacaoo das posicoes dos jogadores - // funcao para carregar os tanques na tela -void jogador_load(int posicao2, SDL_Rect offset2, SDL_Surface *jogador2, SDL_Rect jogador2_c[], +void jogador_load(int playerPosition, SDL_Rect offset2, SDL_Surface *jogador2, SpriteSet& playerSpriteSet, SDL_Surface *screen) { - switch (posicao2) { + SDL_Rect playerSpriteRect; + switch (playerPosition) { case static_cast(DirectionEnum::UP): - SDL_BlitSurface(jogador2, &jogador2_c[1], screen, &offset2); + playerSpriteRect = playerSpriteSet.getRect("UP"); + SDL_BlitSurface(jogador2, &playerSpriteRect, screen, &offset2); break; case static_cast(DirectionEnum::DOWN): - SDL_BlitSurface(jogador2, &jogador2_c[2], screen, &offset2); + playerSpriteRect = playerSpriteSet.getRect("DOWN"); + SDL_BlitSurface(jogador2, &playerSpriteRect, screen, &offset2); break; case static_cast(DirectionEnum::RIGHT): - SDL_BlitSurface(jogador2, &jogador2_c[0], screen, &offset2); + playerSpriteRect = playerSpriteSet.getRect("RIGHT"); + SDL_BlitSurface(jogador2, &playerSpriteRect, screen, &offset2); break; case static_cast(DirectionEnum::LEFT): - SDL_BlitSurface(jogador2, &jogador2_c[3], screen, &offset2); + playerSpriteRect = playerSpriteSet.getRect("LEFT"); + SDL_BlitSurface(jogador2, &playerSpriteRect, screen, &offset2); break; } } @@ -89,7 +87,28 @@ bool checkCollisionBetweenTwoRects(int ax, int ay, int aw, int ah, int cx, int c return (((ax > dx) || (bx < cx) || (ay > dy) || (by < cy))); } -bool checkCollisionPlayer1(SDL_Rect& offset, SDL_Rect& offset2, SDL_Rect& wall, SDL_Rect& menu, SDL_Rect& offset3) { +bool checkCollisionPlayer1(SDL_Rect& offset, SDL_Rect& offset2, SDL_Rect& wall, SDL_Rect& menu, std::vector& projectiles) { + + bool notCollidedWithProjectile = true; + for (auto projectile = projectiles.begin(); projectile != projectiles.end(); ) { + bool _notCollidedWithProjectile = checkCollisionBetweenTwoRects( + offset.x, offset.y, offset.w, offset.h, + projectile->position.x, projectile->position.y, + projectile->position.w, projectile->position.h + ); + std::cout << "Not collided with projectile: " << _notCollidedWithProjectile << std::endl; + notCollidedWithProjectile = ( + notCollidedWithProjectile && _notCollidedWithProjectile + ); + + if (!_notCollidedWithProjectile) { + // Collision detected, remove projectile + projectile = projectiles.erase(projectile); // Erase returns the next iterator + } else { + ++projectile; // Move to the next element + } + } + return ( checkCollisionBetweenTwoRects( offset.x, offset.y, offset.w, offset.h, wall.x, wall.y, wall.w, @@ -98,13 +117,33 @@ bool checkCollisionPlayer1(SDL_Rect& offset, SDL_Rect& offset2, SDL_Rect& wall, offset2.w, offset2.h) && checkCollisionBetweenTwoRects(offset.x, offset.y, offset.w, offset.h, menu.x, menu.y, menu.w, menu.h) && - checkCollisionBetweenTwoRects(offset.x, offset.y, offset.w, offset.h, offset3.x, offset3.y, - offset3.w, offset3.h) + notCollidedWithProjectile ); } -bool checkCollisionPlayer2(SDL_Rect& offset, SDL_Rect& offset2, SDL_Rect& wall, SDL_Rect& menu, SDL_Rect& offset3) { +bool checkCollisionPlayer2(SDL_Rect& offset, SDL_Rect& offset2, SDL_Rect& wall, SDL_Rect& menu, std::vector& projectiles) { + + bool notCollidedWithProjectile = true; + for (auto projectile = projectiles.begin(); projectile != projectiles.end(); ) { + bool _notCollidedWithProjectile = checkCollisionBetweenTwoRects( + offset2.x, offset2.y, offset2.w, offset2.h, + projectile->position.x, projectile->position.y, + projectile->position.w, projectile->position.h + ); + std::cout << "Not collided with projectile: " << _notCollidedWithProjectile << std::endl; + notCollidedWithProjectile = ( + notCollidedWithProjectile && _notCollidedWithProjectile + ); + + if (!_notCollidedWithProjectile) { + // Collision detected, remove projectile + projectile = projectiles.erase(projectile); // Erase returns the next iterator + } else { + ++projectile; // Move to the next element + } + } + return ( checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, offset2.h, wall.x, wall.y, wall.w, wall.h) && @@ -112,198 +151,15 @@ bool checkCollisionPlayer2(SDL_Rect& offset, SDL_Rect& offset2, SDL_Rect& wall, offset2.w, offset2.h) && checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, offset2.h, menu.x, menu.y, menu.w, menu.h) && - checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, offset2.h, offset3.x, offset3.y, - offset3.w, offset3.h) + notCollidedWithProjectile ); } -// funcao para movimentar os tanques -// void andar(SDL_Event event, SDL_Surface *screen, SDL_Surface *telaprincipal, SDL_Surface *jogador1, -// SDL_Surface *jogador2, SDL_Surface *bala, SDL_Surface *explosao, SDL_Surface *pontuacao, -// SpriteSet& pontuacao01, SDL_Rect jogador1_c[], SDL_Rect jogador2_c[], SDL_Rect wall, -// SDL_Rect menu, SDL_Rect offset3, SDL_Rect pontuacao02, SDL_Rect pontuacao03, -// SDL_Rect bala01, SDL_Rect vencedor, int quit1, int quit2, int x, int entrar, int bala1, -// int bala2, int pontuacao1, int pontuacao2, int vencedor0, int& posicao1, SDL_Rect& offset) { -// if (SDL_PollEvent(&event)) // condi��o de entrada (enter) -// { -// if (event.type == SDL_KEYDOWN) { -// switch (event.key.keysym.sym) { // comandos para o jogador 1 -// case SDLK_UP: -// if (checkCollisionPlayer1(offset, offset2, wall, menu, offset3)) { -// offset.y = offset.y - 6; -// SDL_BlitSurface(telaprincipal, NULL, screen, NULL); -// SDL_BlitSurface(jogador1, &jogador1_c[1], screen, &offset); -// jogador_load(posicao2, offset2, jogador2, jogador2_c, screen); -// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); -// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); -// SDL_Flip(screen); -// posicao1 = 0; -// break; -// } else { -// pontuacao2 = pontuacao2 + 1; -// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); -// SDL_BlitSurface(explosao, NULL, screen, &offset); -// SDL_Flip(screen); -// SDL_Delay(500); -// offset.x = 15, offset.y = 170; -// } -// break; -// case SDLK_DOWN: -// if (checkCollisionPlayer1(offset, offset2, wall, menu, offset3)) { -// offset.y = offset.y + 6; -// SDL_BlitSurface(telaprincipal, NULL, screen, NULL); -// SDL_BlitSurface(jogador1, &jogador1_c[2], screen, &offset); -// jogador_load(posicao2, offset2, jogador2, jogador2_c, screen); -// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); -// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); -// SDL_Flip(screen); -// posicao1 = 1; -// break; -// } else { -// pontuacao2 = pontuacao2 + 1; -// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); -// SDL_BlitSurface(explosao, NULL, screen, &offset); -// SDL_Flip(screen); -// SDL_Delay(500); -// offset.x = 15, offset.y = 170; -// } -// break; -// case SDLK_RIGHT: -// if (checkCollisionPlayer1(offset, offset2, wall, menu, offset3)) { -// offset.x = offset.x + 6; -// SDL_BlitSurface(telaprincipal, NULL, screen, NULL); -// SDL_BlitSurface(jogador1, &jogador1_c[0], screen, &offset); -// jogador_load(posicao2, offset2, jogador2, jogador2_c, screen); -// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); -// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); -// SDL_Flip(screen); -// posicao1 = 2; -// break; -// } else { -// pontuacao2 = pontuacao2 + 1; -// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); -// SDL_BlitSurface(explosao, NULL, screen, &offset); -// SDL_Flip(screen); -// SDL_Delay(500); -// offset.x = 15, offset.y = 170; -// } -// break; -// case SDLK_LEFT: -// if (checkCollisionPlayer1(offset, offset2, wall, menu, offset3)) { -// offset.x = offset.x - 6; -// SDL_BlitSurface(telaprincipal, NULL, screen, NULL); -// SDL_BlitSurface(jogador1, &jogador1_c[3], screen, &offset); -// jogador_load(posicao2, offset2, jogador2, jogador2_c, screen); -// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); -// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); -// SDL_Flip(screen); -// posicao1 = 3; -// break; -// } else { -// pontuacao2 = pontuacao2 + 1; -// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); -// SDL_BlitSurface(explosao, NULL, screen, &offset); -// SDL_Flip(screen); -// SDL_Delay(500); -// offset.x = 15, offset.y = 170; -// } -// break; -// // comandos para o jogador 2 -// case SDLK_w: -// if (checkCollisionPlayer2(offset, offset2, wall, menu, offset3)) { -// offset2.y = offset2.y - 6; -// SDL_BlitSurface(telaprincipal, NULL, screen, NULL); -// SDL_BlitSurface(jogador2, &jogador2_c[1], screen, &offset2); -// jogador_load(posicao1, offset, jogador1, jogador1_c, screen); -// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); -// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); -// SDL_Flip(screen); -// posicao2 = 0; -// break; -// } else { -// pontuacao1 = pontuacao1 + 1; -// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); -// SDL_BlitSurface(explosao, NULL, screen, &offset2); -// SDL_Flip(screen); -// SDL_Delay(500); -// offset2.x = 560, offset2.y = 260; -// } -// break; -// case SDLK_s: -// if (checkCollisionPlayer2(offset, offset2, wall, menu, offset3)) { -// offset2.y = offset2.y + 6; -// SDL_BlitSurface(telaprincipal, NULL, screen, NULL); -// SDL_BlitSurface(jogador2, &jogador2_c[2], screen, &offset2); -// jogador_load(posicao1, offset, jogador1, jogador1_c, screen); -// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); -// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); -// SDL_Flip(screen); -// posicao2 = 1; -// break; -// } else { -// pontuacao1 = pontuacao1 + 1; -// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); -// SDL_BlitSurface(explosao, NULL, screen, &offset2); -// SDL_Flip(screen); -// SDL_Delay(500); -// offset2.x = 560, offset2.y = 260; -// } -// break; -// case SDLK_d: -// if (checkCollisionPlayer2(offset, offset2, wall, menu, offset3)) { -// offset2.x = offset2.x + 6; -// SDL_BlitSurface(telaprincipal, NULL, screen, NULL); -// SDL_BlitSurface(jogador2, &jogador2_c[0], screen, &offset2); -// jogador_load(posicao1, offset, jogador1, jogador1_c, screen); -// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); -// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); -// SDL_Flip(screen); -// posicao2 = 2; -// break; -// } else { -// pontuacao1 = pontuacao1 + 1; -// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); -// SDL_BlitSurface(explosao, NULL, screen, &offset2); -// SDL_Flip(screen); -// SDL_Delay(500); -// offset2.x = 560, offset2.y = 260; -// } -// break; -// case SDLK_a: -// if (checkCollisionPlayer2(offset, offset2, wall, menu, offset3)) { -// offset2.x = offset2.x - 6; -// SDL_BlitSurface(telaprincipal, NULL, screen, NULL); -// SDL_BlitSurface(jogador2, &jogador2_c[3], screen, &offset2); -// jogador_load(posicao1, offset, jogador1, jogador1_c, screen); -// pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); -// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); -// SDL_Flip(screen); -// posicao2 = 3; -// break; -// } else { -// pontuacao1 = pontuacao1 + 1; -// pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); -// SDL_BlitSurface(explosao, NULL, screen, &offset2); -// SDL_Flip(screen); -// SDL_Delay(500); -// offset2.x = 560, offset2.y = 260; -// } -// break; -// default: -// x = 0; -// break; -// } -// } -// } -// } - int main(int argc, char *args[]) { SDL_Init(SDL_INIT_VIDEO); // inicializa��o das fun��es de video SDL_Init(SDL_INIT_TIMER); // inicializa��o das fun��es de tempo SDL_Surface *screen; // superficie de video SDL_Surface *telaprincipal; // supercie de fundo - // SDL_Surface *jogador1; // superficie do jogador 1 - SDL_Surface *jogador2; // superficie do jogador 2 SDL_Surface *bala; // superficie da bala SDL_Surface *explosao; // superficie da explos�o SDL_Surface *pontuacao; // superficie dos numeros para pontua��o @@ -315,9 +171,6 @@ int main(int argc, char *args[]) { std::vector projectiles{}; size_t projectiles_counter = 0; - // SDL_Rect pontuacao01[7]; // retangulos para recorte de imagens dos numeros - SDL_Rect jogador1_c[4]; // " " " das posi��es do jogador 1 - SDL_Rect jogador2_c[4]; // " " " das posi��es do jogador 2 SDL_Rect wall; // retangulo para determinar a colis�o com a parede central SDL_Rect menu; // retangulo para determinar a colis�o com a barra de informa��es inferior SDL_Rect offset3; // coordenada da bala @@ -347,18 +200,13 @@ int main(int argc, char *args[]) { telaprincipal = SDL_LoadBMP("resources/telainicial.bmp"); // jogador1 = SDL_LoadBMP("resources/jogador1.bmp"); player1.loadSprite("resources/jogador1.bmp"); - // SDL_SetColorKey(player1.spriteSurface, SDL_SRCCOLORKEY | SDL_RLEACCEL, - // (Uint16)SDL_MapRGB(jogador1->format, 0, 255, - // 0)); // para por transparencia no verde. - // jogador2 = SDL_LoadBMP("resources/jogador2.bmp"); player2.loadSprite("resources/jogador2.bmp"); - // SDL_SetColorKey(jogador2, SDL_SRCCOLORKEY | SDL_RLEACCEL, - // (Uint16)SDL_MapRGB(jogador2->format, 0, 255, - // 0)); // para por transparencia no verde. + bala = SDL_LoadBMP("resources/bala.bmp"); SDL_SetColorKey( bala, SDL_SRCCOLORKEY | SDL_RLEACCEL, (Uint16)SDL_MapRGB(bala->format, 0, 255, 0)); // para por transparencia no verde. + explosao = SDL_LoadBMP("resources/explosao.bmp"); SDL_SetColorKey(explosao, SDL_SRCCOLORKEY | SDL_RLEACCEL, (Uint16)SDL_MapRGB(explosao->format, 0, 255, @@ -418,172 +266,6 @@ int main(int argc, char *args[]) { } } } - // if (entrar == 4) { - // SDL_FreeSurface(telaprincipal); - // telaprincipal = SDL_LoadBMP( - // "resources/menuonline.bmp"); // troca a imagem bmp para o menu para online - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // SDL_Flip(screen); - - // if (SDL_PollEvent(&event)) // menu do jogo. - // { - // if (event.type == SDL_KEYDOWN) // evento do tipo tecla pressionada - // { - // switch (event.key.keysym.sym) { - // case SDLK_1: // caso seja servidor - // entrar = 5; - // break; - // case SDLK_2: // caso seja cliente - // entrar = 6; - // break; - // default: - // x = 1; - // } - // } - // if (event.type == SDL_QUIT) // fechar o programa caso cliquem no X - // { - // quit1 = 1; - // } - // } - // } - // if (entrar == 5) // condi��o de entrada para o servidor(quem criou o jogo) - // { - // WSADATA t_wsa; // WSADATA structure - // WORD wVers; // version number - // int iError, quit, bytesreceive, bytessend, x; // error number - // char buffer[200]; - // quit = 1; - - // SDL_FreeSurface(telaprincipal); - // telaprincipal = SDL_LoadBMP( - // "resources/mododeespera.bmp"); // troca a imagem bmp para o menu para online - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // SDL_Flip(screen); - - // wVers = MAKEWORD(2, 2); // Set the version number to 2.2 - // iError = WSAStartup(wVers, &t_wsa); // Start the WSADATA - - // SOCKET sServer; - // sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - - // SOCKADDR_IN sinServer; - // memset(&sinServer, 0, sizeof(sinServer)); - - // sinServer.sin_family = AF_INET; - // sinServer.sin_addr.s_addr = INADDR_ANY; // Where to start server? - // sinServer.sin_port = htons(1000); // Port - - // if (bind(sServer, (LPSOCKADDR)&sinServer, sizeof(sinServer)) == SOCKET_ERROR) { - // /* failed at starting server */ - // MessageBox(NULL, (LPCTSTR) "Could not bind the server!()", - // (LPCTSTR) "Campo de batalha", MB_OK | MB_ICONERROR); - // WSACleanup(); - // return 0; - // } - - // while (listen(sServer, 20) == SOCKET_ERROR) { - // Sleep(10); - // } - // MessageBox(NULL, (LPCTSTR) "Esperando por clientes", (LPCTSTR) "Campo de batalha", - // MB_OK); - - // SOCKET sClient; - // int szlength; - - // szlength = sizeof(sinServer); - // sClient = accept(sServer, (LPSOCKADDR)&sinServer, &szlength); - - // if (sClient == INVALID_SOCKET) { - // MessageBox(NULL, (LPCTSTR) "Nao eh possivel aceitar esse cliente!", - // (LPCTSTR) "Campo de batalha", MB_OK); - // closesocket(sServer); - // WSACleanup(); - // return 0; - // } else { - // MessageBox(NULL, (LPCTSTR) "Cliente aceito!", (LPCTSTR) "Campo de batalha", MB_OK); - // quit = 1; - // } - // while (quit == 1) { - // if (SDL_PollEvent(&event)) // menu do jogo. - // { - // if (event.type == SDL_KEYDOWN) // evento do tipo tecla pressionada - // { - // switch (event.key.keysym.sym) { - // case SDLK_1: - // bytesreceive = recv(sClient, buffer, 200, 0); - // bytessend = send(sClient, buffer, 200, 0); - // MessageBox(NULL, (LPCTSTR) "dados enviados com sucesso!", - // (LPCTSTR) "Campo de batalha", MB_OK); - // break; - // case SDLK_2: - // quit = 0; - // break; - // default: - // x = 1; - // } - // } - // if (event.type == SDL_QUIT) // fechar o programa caso cliquem no X - // { - // quit1 = 1; - // quit = 0; - // } - // } - // } - // entrar = 1; - // // Cleanup - // closesocket(sClient); - // closesocket(sServer); - // // Shutdown Winsock - // WSACleanup(); - // } - // if (entrar == 6) // condi��o de entrada no cliente - // { - // SDL_FreeSurface(telaprincipal); - // telaprincipal = - // SDL_LoadBMP("resources/mododeespera.bmp"); // troca a imagem bmp para o menu - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // SDL_Flip(screen); - - // WSADATA t_wsa; // WSADATA structure - // WORD wVers; // version number - // int iError; // error number - - // wVers = MAKEWORD(2, 2); // Set the version number to 2.2 - // iError = WSAStartup(wVers, &t_wsa); // Start the WSADATA - - // SOCKET sClient; - // sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); - - // SOCKADDR_IN sinClient; - // memset(&sinClient, 0, sizeof(sinClient)); - - // char cIP[50]; - // strcpy(cIP, "127.0.0.1"); - // MessageBox(NULL, (LPCTSTR) "digite o ip para se conectar!", - // (LPCTSTR) "Campo de batalha", MB_OK); - // scanf("%s", cIP); - // sinClient.sin_family = AF_INET; - // sinClient.sin_addr.s_addr = inet_addr(cIP); // Where to start server? - // sinClient.sin_port = htons(1000); // Port - - // if (connect(sClient, (LPSOCKADDR)&sinClient, sizeof(sinClient)) == SOCKET_ERROR) { - // /* failed at starting server */ - // MessageBox(NULL, (LPCTSTR) "nao foi possivel conectar-se a um servidor!", - // (LPCTSTR) "Campo de batalha", MB_OK); - // WSACleanup(); - // entrar = 4; - // } - // // Now we can send/recv data! - // int bytessend, bytesreceive, quit, x, y; - // char cBuffer[200]; - // char buffer[200]; - // quit = 0; - - // MessageBox(NULL, (LPCTSTR) "voce esta conectado ao servidor!", - // (LPCTSTR) "Campo de batalha", MB_OK); - - // entrar = 4; - // } else if (entrar == 2) // condicao 2 (o jogo em si) { // atribuicao de variaveis inteiras , retangulos , coordenadas e etc. @@ -616,49 +298,20 @@ int main(int argc, char *args[]) { pontuacao01.addRect("FIVE", 245, 3, 25, 35); pontuacao01.addRect("SIX", 294, 3, 25, 35); - // pontuacao01[0].x = 0, pontuacao01[0].y = 3, pontuacao01[0].w = 25, - // pontuacao01[0].h = 35; - // pontuacao01[1].x = 50, pontuacao01[1].y = 3, pontuacao01[1].w = 25, - // pontuacao01[1].h = 35; - // pontuacao01[2].x = 98, pontuacao01[2].y = 3, pontuacao01[2].w = 25, - // pontuacao01[2].h = 35; - // pontuacao01[3].x = 147, pontuacao01[3].y = 3, pontuacao01[3].w = 25, - // pontuacao01[3].h = 35; - // pontuacao01[4].x = 195, pontuacao01[4].y = 3, pontuacao01[4].w = 25, - // pontuacao01[4].h = 35; - // pontuacao01[5].x = 245, pontuacao01[5].y = 3, pontuacao01[5].w = 25, - // pontuacao01[5].h = 35; - // pontuacao01[6].x = 294, pontuacao01[6].y = 3, pontuacao01[6].w = 25, - // pontuacao01[6].h = 35; - - jogador1_c[0].x = 0, jogador1_c[0].y = 0, jogador1_c[0].w = 32, - jogador1_c[0].h = 32; // jogador1 virado para direita - jogador1_c[1].x = 34, jogador1_c[1].y = 34, jogador1_c[1].w = 32, - jogador1_c[1].h = 32; // jogador1 virado para cima - jogador1_c[2].x = 34, jogador1_c[2].y = 0, jogador1_c[2].w = 32, - jogador1_c[2].h = 32; // jogador1 virado para baixo - jogador1_c[3].x = 0, jogador1_c[3].y = 34, jogador1_c[3].w = 32, - jogador1_c[3].h = 32; // jogador1 virado para esquerda - - jogador2_c[0].x = 0, jogador2_c[0].y = 0, jogador2_c[0].w = 32, - jogador2_c[0].h = 32; // jogador2 virado para direita - jogador2_c[1].x = 34, jogador2_c[1].y = 34, jogador2_c[1].w = 32, - jogador2_c[1].h = 32; // jogador2 virado para cima - jogador2_c[2].x = 34, jogador2_c[2].y = 0, jogador2_c[2].w = 32, - jogador2_c[2].h = 32; // jogador2 virado para baixo - jogador2_c[3].x = 0, jogador2_c[3].y = 34, jogador2_c[3].w = 32, - jogador2_c[3].h = 32; // jogador2 virado para esquerda - SDL_Rect pontuacaoZeroRect = pontuacao01.getRect("ZERO"); SDL_BlitSurface(pontuacao, &pontuacaoZeroRect, screen, &pontuacao02); SDL_BlitSurface(pontuacao, &pontuacaoZeroRect, screen, &pontuacao03); - SDL_BlitSurface(player1.spriteSurface, &jogador1_c[0], screen, &player1.position); - SDL_BlitSurface(player2.spriteSurface, &jogador2_c[3], screen, &player2.position); - SDL_Flip(screen); + + SDL_Rect playerSpriteRect; + player1.setDirection(DirectionEnum::RIGHT); - // posicao1 = 2; - posicao2 = 3; - // fim da atribui��o de variaveis + playerSpriteRect = player1.spriteSet.getRect("RIGHT"); + SDL_BlitSurface(player1.spriteSurface, &playerSpriteRect, screen, &player1.position); + + player2.setDirection(DirectionEnum::LEFT); + playerSpriteRect = player2.spriteSet.getRect("LEFT"); + SDL_BlitSurface(player2.spriteSurface, &playerSpriteRect, screen, &player2.position); + SDL_Flip(screen); while (quit2 == 0) // loop para controlar o fim do jogo { @@ -669,7 +322,7 @@ int main(int argc, char *args[]) { switch (event.key.keysym.sym) { // comandos para o jogador 1 case SDLK_UP: // tecla para cima if (player1.state == PlayerStateEnum::IDLE) { - if (checkCollisionPlayer1(player1.position, player2.position, wall, menu, offset3)) { + if (checkCollisionPlayer1(player1.position, player2.position, wall, menu, projectiles)) { player1.position.y = player1.position.y - 6; player1.setDirection(DirectionEnum::UP); break; @@ -682,7 +335,7 @@ int main(int argc, char *args[]) { break; case SDLK_DOWN: // tecla para baixo if (player1.state == PlayerStateEnum::IDLE) { - if (checkCollisionPlayer1(player1.position, player2.position, wall, menu, offset3)) { + if (checkCollisionPlayer1(player1.position, player2.position, wall, menu, projectiles)) { // Update position and direction of player1 player1.position.y = player1.position.y + 6; player1.setDirection(DirectionEnum::DOWN); @@ -696,7 +349,7 @@ int main(int argc, char *args[]) { break; case SDLK_RIGHT: // tecla para a direita if (player1.state == PlayerStateEnum::IDLE) { - if (checkCollisionPlayer1(player1.position, player2.position, wall, menu, offset3)) { + if (checkCollisionPlayer1(player1.position, player2.position, wall, menu, projectiles)) { // Update position and direction of player1 player1.position.x = player1.position.x + 6; player1.setDirection(DirectionEnum::RIGHT); @@ -710,7 +363,7 @@ int main(int argc, char *args[]) { break; case SDLK_LEFT: // tecla para esquerda if (player1.state == PlayerStateEnum::IDLE) { - if (checkCollisionPlayer1(player1.position, player2.position, wall, menu, offset3)) { + if (checkCollisionPlayer1(player1.position, player2.position, wall, menu, projectiles)) { // Update position and direction of player1 player1.position.x = player1.position.x - 6; player1.setDirection(DirectionEnum::LEFT); @@ -725,7 +378,7 @@ int main(int argc, char *args[]) { // comandos para o jogador 2 case SDLK_w: // tecla w ( para cima ) if (player2.state == PlayerStateEnum::IDLE) { - if (checkCollisionPlayer2(player1.position, player2.position, wall, menu, offset3)) { + if (checkCollisionPlayer2(player1.position, player2.position, wall, menu, projectiles)) { // Update position and direction of player2 player2.position.y = player2.position.y - 6; player2.setDirection(DirectionEnum::UP); @@ -739,7 +392,7 @@ int main(int argc, char *args[]) { break; case SDLK_s: // tecla s ( para baixo ) if (player2.state == PlayerStateEnum::IDLE) { - if (checkCollisionPlayer2(player1.position, player2.position, wall, menu, offset3)) { + if (checkCollisionPlayer2(player1.position, player2.position, wall, menu, projectiles)) { // Update position and direction of player2 player2.position.y = player2.position.y + 6; player2.setDirection(DirectionEnum::DOWN); @@ -753,7 +406,7 @@ int main(int argc, char *args[]) { break; case SDLK_d: // tecla d ( para direita ) if (player2.state == PlayerStateEnum::IDLE) { - if (checkCollisionPlayer2(player1.position, player2.position, wall, menu, offset3)) { + if (checkCollisionPlayer2(player1.position, player2.position, wall, menu, projectiles)) { // Update position and direction of player2 player2.position.x = player2.position.x + 6; player2.setDirection(DirectionEnum::RIGHT); @@ -767,7 +420,7 @@ int main(int argc, char *args[]) { break; case SDLK_a: // tecla a ( para esquerda ) if (player2.state == PlayerStateEnum::IDLE) { - if (checkCollisionPlayer2(player1.position, player2.position, wall, menu, offset3)) { + if (checkCollisionPlayer2(player1.position, player2.position, wall, menu, projectiles)) { // Update position and direction of player2 player2.position.x = player2.position.x - 6; player2.setDirection(DirectionEnum::LEFT); @@ -784,481 +437,107 @@ int main(int argc, char *args[]) { break; // comandos para o tiro dos jogadores 1 e 2 case SDLK_m: // tecla m para o tiro do jogador 1 - switch (player1.direction) { - case static_cast(DirectionEnum::UP): - { - // offset3.x = player1.position.x + 12; - // offset3.y = player1.position.y - 12; - - Projectile projectile = Projectile(projectiles_counter); - projectile.loadSprite("resources/bala.bmp"); + { + Projectile projectile = Projectile(projectiles_counter); + projectile.loadSprite("resources/bala.bmp"); + + switch (player1.direction) { + case static_cast(DirectionEnum::UP): + { + projectile.position.x = player1.position.x + 12; + projectile.position.y = player1.position.y - 15; + projectile.position.w = 12; + projectile.position.h = 12; + projectile.setDirection(DirectionEnum::UP); + } + break; + case static_cast(DirectionEnum::DOWN): + { + projectile.position.x = player1.position.x + 12; + projectile.position.y = player1.position.y + 36; + projectile.position.w = 12; + projectile.position.h = 12; + projectile.setDirection(DirectionEnum::DOWN); + } + break; + case static_cast(DirectionEnum::RIGHT): + { + projectile.position.x = player1.position.x + 36; + projectile.position.y = player1.position.y + 12; + projectile.position.w = 12; + projectile.position.h = 12; + projectile.setDirection(DirectionEnum::RIGHT); + } + break; + case static_cast(DirectionEnum::LEFT): + { + projectile.position.x = player1.position.x - 15; + projectile.position.y = player1.position.y + 12; + projectile.position.w = 12; + projectile.position.h = 12; + projectile.setDirection(DirectionEnum::LEFT); + } + break; - projectile.position.x = player1.position.x + 12; - projectile.position.y = player1.position.y - 12; - projectile.setDirection(DirectionEnum::UP); - projectile.movingCooldown = PROJECTILE_MOVING_COOLDOWN; - - projectiles.push_back(projectile); - - projectiles_counter++; - // for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { - // offset3.y = offset3.y - 10; - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - // screen); - // pontuacao_load(pontuacao2, pontuacao03, pontuacao, - // pontuacao01, screen); - // pontuacao_load(pontuacao1, pontuacao02, pontuacao, - // pontuacao01, screen); - // jogador_load(posicao2, offset2, jogador2, - // jogador2_c, screen); - // SDL_BlitSurface(bala, NULL, screen, &offset3); - // SDL_Flip(screen); - // SDL_Delay(50); - // andar(event, screen, telaprincipal, player1.spriteSurface, - // jogador2, bala, explosao, pontuacao, - // pontuacao01, jogador1_c, jogador2_c, wall, - // menu, offset3, pontuacao02, pontuacao03, - // bala01, vencedor, quit1, quit2, x, entrar, - // bala1, bala2, pontuacao1, pontuacao2, - // vencedor0, player1.direction, player1.position); - // if (!checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, - // offset2.h, offset3.x, offset3.y, - // offset3.w, offset3.h)) { - // pontuacao1 = pontuacao1 + 1; - // pontuacao_load(pontuacao1, pontuacao02, - // pontuacao, pontuacao01, screen); - // SDL_BlitSurface(explosao, NULL, screen, - // &offset2); - // SDL_Flip(screen); - // SDL_Delay(100); - // offset2.x = 560, offset2.y = 260; - // break; - // } - // } - // offset3.x = 650; - // offset3.y = 650; - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - // screen); - // pontuacao_load(pontuacao2, pontuacao03, pontuacao, - // pontuacao01, screen); - // pontuacao_load(pontuacao1, pontuacao02, pontuacao, - // pontuacao01, screen); - // jogador_load(posicao2, offset2, jogador2, jogador2_c, - // screen); - // SDL_Flip(screen); - } - break; - case static_cast(DirectionEnum::DOWN): - { - // offset3.x = player1.position.x + 12; - // offset3.y = player1.position.y + 36; - - Projectile projectile = Projectile(projectiles_counter); - projectile.loadSprite("resources/bala.bmp"); - - projectile.position.x = player1.position.x + 12; - projectile.position.y = player1.position.y + 36; - projectile.setDirection(DirectionEnum::DOWN); - projectile.movingCooldown = PROJECTILE_MOVING_COOLDOWN; - - projectiles.push_back(projectile); - - projectiles_counter++; - // for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { - // offset3.y = offset3.y + 10; - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - // screen); - // pontuacao_load(pontuacao2, pontuacao03, pontuacao, - // pontuacao01, screen); - // pontuacao_load(pontuacao1, pontuacao02, pontuacao, - // pontuacao01, screen); - // jogador_load(posicao2, offset2, jogador2, - // jogador2_c, screen); - // SDL_BlitSurface(bala, NULL, screen, &offset3); - // SDL_Flip(screen); - // SDL_Delay(50); - // andar(event, screen, telaprincipal, player1.spriteSurface, - // jogador2, bala, explosao, pontuacao, - // pontuacao01, jogador1_c, jogador2_c, wall, - // menu, offset3, pontuacao02, pontuacao03, - // bala01, vencedor, quit1, quit2, x, entrar, - // bala1, bala2, pontuacao1, pontuacao2, - // vencedor0, player1.direction, player1.position); - // if (!checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, - // offset2.h, offset3.x, offset3.y, - // offset3.w, offset3.h)) { - // pontuacao1 = pontuacao1 + 1; - // pontuacao_load(pontuacao1, pontuacao02, - // pontuacao, pontuacao01, screen); - // SDL_BlitSurface(explosao, NULL, screen, - // &offset2); - // SDL_Flip(screen); - // SDL_Delay(100); - // offset2.x = 560, offset2.y = 260; - // break; - // } - // } - // offset3.x = 650; - // offset3.y = 650; - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - // screen); - // pontuacao_load(pontuacao2, pontuacao03, pontuacao, - // pontuacao01, screen); - // pontuacao_load(pontuacao1, pontuacao02, pontuacao, - // pontuacao01, screen); - // jogador_load(posicao2, offset2, jogador2, jogador2_c, - // screen); - // SDL_Flip(screen); - } - break; - case static_cast(DirectionEnum::RIGHT): - { - // offset3.x = player1.position.x + 36; - // offset3.y = player1.position.y + 12; - - - Projectile projectile = Projectile(projectiles_counter); - projectile.loadSprite("resources/bala.bmp"); - - projectile.position.x = player1.position.x + 36; - projectile.position.y = player1.position.y + 12; - projectile.setDirection(DirectionEnum::RIGHT); - projectile.movingCooldown = PROJECTILE_MOVING_COOLDOWN; - - projectiles.push_back(projectile); - - projectiles_counter++; - // for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { - // offset3.x = offset3.x + 10; - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - // screen); - // pontuacao_load(pontuacao2, pontuacao03, pontuacao, - // pontuacao01, screen); - // pontuacao_load(pontuacao1, pontuacao02, pontuacao, - // pontuacao01, screen); - // jogador_load(posicao2, offset2, jogador2, - // jogador2_c, screen); - // SDL_BlitSurface(bala, NULL, screen, &offset3); - // SDL_Flip(screen); - // SDL_Delay(50); - // andar(event, screen, telaprincipal, player1.spriteSurface, - // jogador2, bala, explosao, pontuacao, - // pontuacao01, jogador1_c, jogador2_c, wall, - // menu, offset3, pontuacao02, pontuacao03, - // bala01, vencedor, quit1, quit2, x, entrar, - // bala1, bala2, pontuacao1, pontuacao2, - // vencedor0, player1.direction, player1.position); - // if (!checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, - // offset2.h, offset3.x, offset3.y, - // offset3.w, offset3.h)) { - // pontuacao1 = pontuacao1 + 1; - // pontuacao_load(pontuacao1, pontuacao02, - // pontuacao, pontuacao01, screen); - // SDL_BlitSurface(explosao, NULL, screen, - // &offset2); - // SDL_Flip(screen); - // SDL_Delay(100); - // offset2.x = 560, offset2.y = 260; - // break; - // } - // } - // offset3.x = 650; - // offset3.y = 650; - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - // screen); - // pontuacao_load(pontuacao2, pontuacao03, pontuacao, - // pontuacao01, screen); - // pontuacao_load(pontuacao1, pontuacao02, pontuacao, - // pontuacao01, screen); - // jogador_load(posicao2, offset2, jogador2, jogador2_c, - // screen); - // SDL_Flip(screen); - } - break; - case static_cast(DirectionEnum::LEFT): - { - // offset3.x = player1.position.x - 12; - // offset3.y = player1.position.y + 12; - - - Projectile projectile = Projectile(projectiles_counter); - projectile.loadSprite("resources/bala.bmp"); - - projectile.position.x = player1.position.x - 12; - projectile.position.y = player1.position.y + 12; - projectile.setDirection(DirectionEnum::LEFT); - projectile.movingCooldown = PROJECTILE_MOVING_COOLDOWN; - - projectiles.push_back(projectile); - - projectiles_counter++; - // for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { - // offset3.x = offset3.x - 10; - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - // screen); - // pontuacao_load(pontuacao2, pontuacao03, pontuacao, - // pontuacao01, screen); - // pontuacao_load(pontuacao1, pontuacao02, pontuacao, - // pontuacao01, screen); - // jogador_load(posicao2, offset2, jogador2, - // jogador2_c, screen); - // SDL_BlitSurface(bala, NULL, screen, &offset3); - // SDL_Flip(screen); - // SDL_Delay(50); - // andar(event, screen, telaprincipal, player1.spriteSurface, - // jogador2, bala, explosao, pontuacao, - // pontuacao01, jogador1_c, jogador2_c, wall, - // menu, offset3, pontuacao02, pontuacao03, - // bala01, vencedor, quit1, quit2, x, entrar, - // bala1, bala2, pontuacao1, pontuacao2, - // vencedor0, player1.direction, player1.position); - // if (!checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, - // offset2.h, offset3.x, offset3.y, - // offset3.w, offset3.h)) { - // pontuacao1 = pontuacao1 + 1; - // pontuacao_load(pontuacao1, pontuacao02, - // pontuacao, pontuacao01, screen); - // SDL_BlitSurface(explosao, NULL, screen, - // &offset2); - // SDL_Flip(screen); - // SDL_Delay(100); - // offset2.x = 560, offset2.y = 260; - // break; - // } - // } - // offset3.x = 650; - // offset3.y = 650; - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - // screen); - // pontuacao_load(pontuacao2, pontuacao03, pontuacao, - // pontuacao01, screen); - // pontuacao_load(pontuacao1, pontuacao02, pontuacao, - // pontuacao01, screen); - // jogador_load(posicao2, offset2, jogador2, jogador2_c, - // screen); - // SDL_Flip(screen); - } - break; + default: + break; + } + projectile.movingCooldown = PROJECTILE_MOVING_COOLDOWN; + projectiles.push_back(projectile); + projectiles_counter++; } break; case SDLK_f: // tecla f para o jogador 2 - switch (posicao2) { - case static_cast(DirectionEnum::UP): - offset3.x = player2.position.x + 12; - offset3.y = player2.position.y - 12; - // for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { - // offset3.y = offset3.y - 10; - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // jogador_load(posicao2, offset2, jogador2, - // jogador2_c, screen); - // pontuacao_load(pontuacao2, pontuacao03, pontuacao, - // pontuacao01, screen); - // pontuacao_load(pontuacao1, pontuacao02, pontuacao, - // pontuacao01, screen); - // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - // screen); - // SDL_BlitSurface(bala, NULL, screen, &offset3); - // SDL_Flip(screen); - // SDL_Delay(50); - // andar(event, screen, telaprincipal, player1.spriteSurface, - // jogador2, bala, explosao, pontuacao, - // pontuacao01, jogador1_c, jogador2_c, wall, - // menu, offset3, pontuacao02, pontuacao03, - // bala01, vencedor, quit1, quit2, x, entrar, - // bala1, bala2, pontuacao1, pontuacao2, - // vencedor0, player1.direction, player1.position); - // if (!checkCollisionBetweenTwoRects( - // player1.position.x, player1.position.y, player1.position.w, player1.position.h, - // offset3.x, offset3.y, offset3.w, - // offset3.h)) { - // pontuacao2 = pontuacao2 + 1; - // pontuacao_load(pontuacao2, pontuacao03, - // pontuacao, pontuacao01, screen); - // SDL_BlitSurface(explosao, NULL, screen, - // &player1.position); - // SDL_Flip(screen); - // SDL_Delay(100); - // player1.position.x = 15, player1.position.y = 170; - // break; - // } - // } - // offset3.x = 650; - // offset3.y = 650; - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // jogador_load(posicao2, offset2, jogador2, jogador2_c, - // screen); - // pontuacao_load(pontuacao2, pontuacao03, pontuacao, - // pontuacao01, screen); - // pontuacao_load(pontuacao1, pontuacao02, pontuacao, - // pontuacao01, screen); - // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - // screen); - // SDL_Flip(screen); - break; - case static_cast(DirectionEnum::DOWN): - offset3.x = player2.position.x + 12; - offset3.y = player2.position.y + 36; - // for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { - // offset3.y = offset3.y + 10; - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // jogador_load(posicao2, offset2, jogador2, - // jogador2_c, screen); - // pontuacao_load(pontuacao2, pontuacao03, pontuacao, - // pontuacao01, screen); - // pontuacao_load(pontuacao1, pontuacao02, pontuacao, - // pontuacao01, screen); - // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - // screen); - // SDL_BlitSurface(bala, NULL, screen, &offset3); - // SDL_Flip(screen); - // SDL_Delay(50); - // andar(event, screen, telaprincipal, player1.spriteSurface, - // jogador2, bala, explosao, pontuacao, - // pontuacao01, jogador1_c, jogador2_c, wall, - // menu, offset3, pontuacao02, pontuacao03, - // bala01, vencedor, quit1, quit2, x, entrar, - // bala1, bala2, pontuacao1, pontuacao2, - // vencedor0, player1.direction, player1.position); - // if (!checkCollisionBetweenTwoRects(player1.position.x, player1.position.y, player1.position.w, player1.position.h, - // offset3.x, offset3.y, offset3.w, - // offset3.h)) { - // pontuacao2 = pontuacao2 + 1; - // pontuacao_load(pontuacao2, pontuacao03, - // pontuacao, pontuacao01, screen); - // SDL_BlitSurface(explosao, NULL, screen, - // &player1.position); - // SDL_Flip(screen); - // SDL_Delay(100); - // player1.position.x = 15, player1.position.y = 170; - // break; - // } - // } - // offset3.x = 650; - // offset3.y = 650; - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // jogador_load(posicao2, offset2, jogador2, jogador2_c, - // screen); - // pontuacao_load(pontuacao2, pontuacao03, pontuacao, - // pontuacao01, screen); - // pontuacao_load(pontuacao1, pontuacao02, pontuacao, - // pontuacao01, screen); - // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - // screen); - // SDL_Flip(screen); - break; - case static_cast(DirectionEnum::RIGHT): - offset3.x = player2.position.x + 36; - offset3.y = player2.position.y + 12; - // for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { - // offset3.x = offset3.x + 10; - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // jogador_load(posicao2, offset2, jogador2, - // jogador2_c, screen); - // pontuacao_load(pontuacao2, pontuacao03, pontuacao, - // pontuacao01, screen); - // pontuacao_load(pontuacao1, pontuacao02, pontuacao, - // pontuacao01, screen); - // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - // screen); - // SDL_BlitSurface(bala, NULL, screen, &offset3); - // SDL_Flip(screen); - // SDL_Delay(50); - // andar(event, screen, telaprincipal, player1.spriteSurface, - // jogador2, bala, explosao, pontuacao, - // pontuacao01, jogador1_c, jogador2_c, wall, - // menu, offset3, pontuacao02, pontuacao03, - // bala01, vencedor, quit1, quit2, x, entrar, - // bala1, bala2, pontuacao1, pontuacao2, - // vencedor0, player1.direction, player1.position); - // if (!checkCollisionBetweenTwoRects(player1.position.x, player1.position.y, player1.position.w, player1.position.h, - // offset3.x, offset3.y, offset3.w, - // offset3.h)) { - // pontuacao2 = pontuacao2 + 1; - // pontuacao_load(pontuacao2, pontuacao03, - // pontuacao, pontuacao01, screen); - // SDL_BlitSurface(explosao, NULL, screen, - // &player1.position); - // SDL_Flip(screen); - // SDL_Delay(100); - // player1.position.x = 15, player1.position.y = 170; - // break; - // } - // } - // offset3.x = 650; - // offset3.y = 650; - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // jogador_load(posicao2, offset2, jogador2, jogador2_c, - // screen); - // pontuacao_load(pontuacao2, pontuacao03, pontuacao, - // pontuacao01, screen); - // pontuacao_load(pontuacao1, pontuacao02, pontuacao, - // pontuacao01, screen); - // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - // screen); - // SDL_Flip(screen); - break; - case static_cast(DirectionEnum::LEFT): - offset3.x = player2.position.x - 12; - offset3.y = player2.position.y + 12; - // for (bala1 = 1; bala1 < 10; bala1 = bala1 + 1) { - // offset3.x = offset3.x - 10; - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // jogador_load(posicao2, offset2, jogador2, - // jogador2_c, screen); - // pontuacao_load(pontuacao2, pontuacao03, pontuacao, - // pontuacao01, screen); - // pontuacao_load(pontuacao1, pontuacao02, pontuacao, - // pontuacao01, screen); - // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - // screen); - // SDL_BlitSurface(bala, NULL, screen, &offset3); - // SDL_Flip(screen); - // SDL_Delay(50); - // andar(event, screen, telaprincipal, player1.spriteSurface, - // jogador2, bala, explosao, pontuacao, - // pontuacao01, jogador1_c, jogador2_c, wall, - // menu, offset3, pontuacao02, pontuacao03, - // bala01, vencedor, quit1, quit2, x, entrar, - // bala1, bala2, pontuacao1, pontuacao2, - // vencedor0, player1.direction, player1.position); - // if (!checkCollisionBetweenTwoRects(player1.position.x, player1.position.y, player1.position.w, player1.position.h, - // offset3.x, offset3.y, offset3.w, - // offset3.h)) { - // pontuacao2 = pontuacao2 + 1; - // pontuacao_load(pontuacao2, pontuacao03, - // pontuacao, pontuacao01, screen); - // SDL_BlitSurface(explosao, NULL, screen, - // &player1.position); - // SDL_Flip(screen); - // SDL_Delay(100); - // player1.position.x = 15, player1.position.y = 170; - // break; - // } - // } - // offset3.x = 650; - // offset3.y = 650; - // SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - // jogador_load(posicao2, offset2, jogador2, jogador2_c, - // screen); - // pontuacao_load(pontuacao2, pontuacao03, pontuacao, - // pontuacao01, screen); - // pontuacao_load(pontuacao1, pontuacao02, pontuacao, - // pontuacao01, screen); - // jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, - // screen); - // SDL_Flip(screen); - break; - default: - x = 0; + { + Projectile projectile = Projectile(projectiles_counter); + projectile.loadSprite("resources/bala.bmp"); + + switch (player2.direction) { + case static_cast(DirectionEnum::UP): + { + projectile.position.x = player2.position.x + 12; + projectile.position.y = player2.position.y - 15; + projectile.position.w = 12; + projectile.position.h = 12; + projectile.setDirection(DirectionEnum::UP); + } + break; + case static_cast(DirectionEnum::DOWN): + { + projectile.position.x = player2.position.x + 12; + projectile.position.y = player2.position.y + 36; + projectile.position.w = 12; + projectile.position.h = 12; + projectile.setDirection(DirectionEnum::DOWN); + } + break; + case static_cast(DirectionEnum::RIGHT): + { + projectile.position.x = player2.position.x + 36; + projectile.position.y = player2.position.y + 12; + projectile.position.w = 12; + projectile.position.h = 12; + projectile.setDirection(DirectionEnum::RIGHT); + } + break; + case static_cast(DirectionEnum::LEFT): + { + projectile.position.x = player2.position.x - 15; + projectile.position.y = player2.position.y + 12; + projectile.position.w = 12; + projectile.position.h = 12; + projectile.setDirection(DirectionEnum::LEFT); + } + break; + default: + break; + + } + projectile.movingCooldown = PROJECTILE_MOVING_COOLDOWN; + projectiles.push_back(projectile); + projectiles_counter++; } + break; default: x = 0; } @@ -1276,6 +555,25 @@ int main(int argc, char *args[]) { } } + + if ( + player1.state != PlayerStateEnum::EXPLODING && + !checkCollisionPlayer1(player1.position, player2.position, wall, menu, projectiles) + ) { + pontuacao2 = pontuacao2 + 1; + player1.state = PlayerStateEnum::EXPLODING; + player1.timer = 1000; + } + + if ( + player2.state != PlayerStateEnum::EXPLODING && + !checkCollisionPlayer2(player1.position, player2.position, wall, menu, projectiles) + ) { + pontuacao1 = pontuacao1 + 1; + player2.state = PlayerStateEnum::EXPLODING; + player2.timer = 1000; + } + // Here it should be the drawing logic! // Define the color to clear the screen (e.g., black) @@ -1286,7 +584,7 @@ int main(int argc, char *args[]) { SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - jogador_load(player1.direction, player1.position, player1.spriteSurface, jogador1_c, + jogador_load(player1.direction, player1.position, player1.spriteSurface, player1.spriteSet, screen); switch (player1.state) @@ -1306,7 +604,7 @@ int main(int argc, char *args[]) { break; } - jogador_load(player2.direction, player2.position, player2.spriteSurface, jogador2_c, + jogador_load(player2.direction, player2.position, player2.spriteSurface, player2.spriteSet, screen); switch (player2.state) From 2f4b7f12f2dc3d07ad13f97cf766813b942a499d Mon Sep 17 00:00:00 2001 From: Arthur Moreno Date: Wed, 6 Nov 2024 21:15:58 +0100 Subject: [PATCH 5/5] Remove redundant explosing logic and format code. --- src/Constants.hpp | 21 +- src/Player.hpp | 33 ++-- src/Projectile.hpp | 33 ++-- src/SpriteSet.cpp | 15 +- src/SpriteSet.hpp | 8 +- src/main.cpp | 483 +++++++++++++++++++-------------------------- 6 files changed, 262 insertions(+), 331 deletions(-) diff --git a/src/Constants.hpp b/src/Constants.hpp index 3993032..b24856f 100644 --- a/src/Constants.hpp +++ b/src/Constants.hpp @@ -3,21 +3,26 @@ #include -enum struct DirectionEnum { UP = 0, DOWN = 1, RIGHT = 2, LEFT = 3}; +enum struct DirectionEnum { UP = 0, DOWN = 1, RIGHT = 2, LEFT = 3 }; -enum struct PlayerStateEnum { IDLE = 0, MOVING = 1, FIRING = 2, EXPLODING = 3}; +enum struct PlayerStateEnum { IDLE = 0, MOVING = 1, FIRING = 2, EXPLODING = 3 }; // Function to convert Jogador2Direction to string inline std::string directionToString(DirectionEnum dir) { switch (dir) { - case DirectionEnum::RIGHT: return "RIGHT"; - case DirectionEnum::UP: return "UP"; - case DirectionEnum::DOWN: return "DOWN"; - case DirectionEnum::LEFT: return "LEFT"; - default: return "UNKNOWN"; + case DirectionEnum::RIGHT: + return "RIGHT"; + case DirectionEnum::UP: + return "UP"; + case DirectionEnum::DOWN: + return "DOWN"; + case DirectionEnum::LEFT: + return "LEFT"; + default: + return "UNKNOWN"; } } const int PROJECTILE_MOVING_COOLDOWN = 20; -#endif // CONSTANTS_H \ No newline at end of file +#endif // CONSTANTS_H \ No newline at end of file diff --git a/src/Player.hpp b/src/Player.hpp index 4747424..2e4ed32 100644 --- a/src/Player.hpp +++ b/src/Player.hpp @@ -11,13 +11,11 @@ #include "Constants.hpp" #include "SpriteSet.hpp" - - class Player { -public: + public: std::string playerName; SpriteSet spriteSet; - SDL_Surface *spriteSurface; + SDL_Surface* spriteSurface; int direction; SDL_Rect position; @@ -26,30 +24,31 @@ class Player { PlayerStateEnum state; Player(const std::string& playerName) - : playerName(playerName), spriteSet("Jogador1") // Initialize spriteSet here + : playerName(playerName), + spriteSet("Jogador1") // Initialize spriteSet here { state = PlayerStateEnum::IDLE; direction = static_cast(DirectionEnum::RIGHT); - spriteSet.addRect(directionToString(DirectionEnum::RIGHT), 0, 0, 32, 32); // Virado para direita - spriteSet.addRect(directionToString(DirectionEnum::UP), 34, 34, 32, 32); // Virado para cima - spriteSet.addRect(directionToString(DirectionEnum::DOWN), 34, 0, 32, 32); // Virado para baixo - spriteSet.addRect(directionToString(DirectionEnum::LEFT), 0, 34, 32, 32); // Virado para esquerda - + spriteSet.addRect(directionToString(DirectionEnum::RIGHT), 0, 0, 32, + 32); // Virado para direita + spriteSet.addRect(directionToString(DirectionEnum::UP), 34, 34, 32, + 32); // Virado para cima + spriteSet.addRect(directionToString(DirectionEnum::DOWN), 34, 0, 32, + 32); // Virado para baixo + spriteSet.addRect(directionToString(DirectionEnum::LEFT), 0, 34, 32, + 32); // Virado para esquerda }; void loadSprite(const std::string& spriteFileName) { spriteSurface = SDL_LoadBMP(spriteFileName.c_str()); SDL_SetColorKey(spriteSurface, SDL_SRCCOLORKEY | SDL_RLEACCEL, (Uint16)SDL_MapRGB(spriteSurface->format, 0, 255, - 0)); // para por transparencia no verde. + 0)); // para por transparencia no verde. }; - void setDirection(DirectionEnum directionEnum) { - direction = static_cast(directionEnum); - } - + void setDirection(DirectionEnum directionEnum) { direction = static_cast(directionEnum); } -private: + private: }; -#endif // PLAYER_H \ No newline at end of file +#endif // PLAYER_H \ No newline at end of file diff --git a/src/Projectile.hpp b/src/Projectile.hpp index ab000d4..a92f819 100644 --- a/src/Projectile.hpp +++ b/src/Projectile.hpp @@ -12,40 +12,41 @@ #include "SpriteSet.hpp" class Projectile { -public: + public: int projectileId; SpriteSet spriteSet; - SDL_Surface *spriteSurface; + SDL_Surface* spriteSurface; int direction; SDL_Rect position; - + int movingCooldown; Projectile(const int projectileId) - : projectileId(projectileId), spriteSet("Bala") // Initialize spriteSet here + : projectileId(projectileId), + spriteSet("Bala") // Initialize spriteSet here { direction = static_cast(DirectionEnum::RIGHT); - spriteSet.addRect(directionToString(DirectionEnum::RIGHT), 0, 0, 32, 32); // Virado para direita - spriteSet.addRect(directionToString(DirectionEnum::UP), 34, 34, 32, 32); // Virado para cima - spriteSet.addRect(directionToString(DirectionEnum::DOWN), 34, 0, 32, 32); // Virado para baixo - spriteSet.addRect(directionToString(DirectionEnum::LEFT), 0, 34, 32, 32); // Virado para esquerda - + spriteSet.addRect(directionToString(DirectionEnum::RIGHT), 0, 0, 32, + 32); // Virado para direita + spriteSet.addRect(directionToString(DirectionEnum::UP), 34, 34, 32, + 32); // Virado para cima + spriteSet.addRect(directionToString(DirectionEnum::DOWN), 34, 0, 32, + 32); // Virado para baixo + spriteSet.addRect(directionToString(DirectionEnum::LEFT), 0, 34, 32, + 32); // Virado para esquerda }; void loadSprite(const std::string& spriteFileName) { spriteSurface = SDL_LoadBMP(spriteFileName.c_str()); SDL_SetColorKey(spriteSurface, SDL_SRCCOLORKEY | SDL_RLEACCEL, (Uint16)SDL_MapRGB(spriteSurface->format, 0, 255, - 0)); // para por transparencia no verde. + 0)); // para por transparencia no verde. }; - void setDirection(DirectionEnum directionEnum) { - direction = static_cast(directionEnum); - } - + void setDirection(DirectionEnum directionEnum) { direction = static_cast(directionEnum); } -private: + private: }; -#endif // PROJECTILE_H \ No newline at end of file +#endif // PROJECTILE_H \ No newline at end of file diff --git a/src/SpriteSet.cpp b/src/SpriteSet.cpp index a19b527..42d57d4 100644 --- a/src/SpriteSet.cpp +++ b/src/SpriteSet.cpp @@ -1,11 +1,12 @@ // SpriteSet.cpp #include "SpriteSet.hpp" + #include SpriteSet::SpriteSet(const std::string& name) : name_(name) {} void SpriteSet::addRect(const std::string& name, int x, int y, int w, int h) { - SDL_Rect rect = { x, y, w, h }; + SDL_Rect rect = {x, y, w, h}; rects_[name] = rect; } @@ -17,14 +18,8 @@ const SDL_Rect& SpriteSet::getRect(const std::string& name) const { throw std::out_of_range("Sprite name not found: " + name); } -bool SpriteSet::hasRect(const std::string& name) const { - return rects_.find(name) != rects_.end(); -} +bool SpriteSet::hasRect(const std::string& name) const { return rects_.find(name) != rects_.end(); } -size_t SpriteSet::size() const { - return rects_.size(); -} +size_t SpriteSet::size() const { return rects_.size(); } -const std::string& SpriteSet::getName() const { - return name_; -} \ No newline at end of file +const std::string& SpriteSet::getName() const { return name_; } \ No newline at end of file diff --git a/src/SpriteSet.hpp b/src/SpriteSet.hpp index 56b3c1c..c883936 100644 --- a/src/SpriteSet.hpp +++ b/src/SpriteSet.hpp @@ -2,8 +2,8 @@ #ifndef SPRITESET_H #define SPRITESET_H -#include #include +#include #ifdef __APPLE__ #include @@ -12,7 +12,7 @@ #endif class SpriteSet { -public: + public: // Constructor SpriteSet(const std::string& name); @@ -31,9 +31,9 @@ class SpriteSet { // Get the name of the sprite set const std::string& getName() const; -private: + private: std::string name_; std::unordered_map rects_; }; -#endif // SPRITESET_H \ No newline at end of file +#endif // SPRITESET_H \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index cd2516e..94a5015 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,7 +1,8 @@ -#include #include #include #include + +#include #include #define SDL_MAIN_HANDLED // Add this line @@ -13,13 +14,13 @@ #endif #include "Constants.hpp" -#include "SpriteSet.hpp" #include "Player.hpp" #include "Projectile.hpp" +#include "SpriteSet.hpp" // funcao para carregar os tanques na tela -void jogador_load(int playerPosition, SDL_Rect offset2, SDL_Surface *jogador2, SpriteSet& playerSpriteSet, - SDL_Surface *screen) { +void jogador_load(int playerPosition, SDL_Rect offset2, SDL_Surface* jogador2, + SpriteSet& playerSpriteSet, SDL_Surface* screen) { SDL_Rect playerSpriteRect; switch (playerPosition) { case static_cast(DirectionEnum::UP): @@ -42,8 +43,8 @@ void jogador_load(int playerPosition, SDL_Rect offset2, SDL_Surface *jogador2, S } // funcao para carregar as pontuacoes dos jogadores na tela -void pontuacao_load(int pontuacao3, SDL_Rect pontuacao03, SDL_Surface *pontuacao, - SpriteSet& pontuacao01, SDL_Surface *screen) { +void pontuacao_load(int pontuacao3, SDL_Rect pontuacao03, SDL_Surface* pontuacao, + SpriteSet& pontuacao01, SDL_Surface* screen) { SDL_Rect pontuacaoSpriteRect; switch (pontuacao3) { case 0: @@ -87,82 +88,68 @@ bool checkCollisionBetweenTwoRects(int ax, int ay, int aw, int ah, int cx, int c return (((ax > dx) || (bx < cx) || (ay > dy) || (by < cy))); } -bool checkCollisionPlayer1(SDL_Rect& offset, SDL_Rect& offset2, SDL_Rect& wall, SDL_Rect& menu, std::vector& projectiles) { - +bool checkCollisionPlayer1(SDL_Rect& offset, SDL_Rect& offset2, SDL_Rect& wall, SDL_Rect& menu, + std::vector& projectiles) { bool notCollidedWithProjectile = true; - for (auto projectile = projectiles.begin(); projectile != projectiles.end(); ) { + for (auto projectile = projectiles.begin(); projectile != projectiles.end();) { bool _notCollidedWithProjectile = checkCollisionBetweenTwoRects( - offset.x, offset.y, offset.w, offset.h, - projectile->position.x, projectile->position.y, - projectile->position.w, projectile->position.h - ); + offset.x, offset.y, offset.w, offset.h, projectile->position.x, projectile->position.y, + projectile->position.w, projectile->position.h); std::cout << "Not collided with projectile: " << _notCollidedWithProjectile << std::endl; - notCollidedWithProjectile = ( - notCollidedWithProjectile && _notCollidedWithProjectile - ); + notCollidedWithProjectile = (notCollidedWithProjectile && _notCollidedWithProjectile); if (!_notCollidedWithProjectile) { // Collision detected, remove projectile - projectile = projectiles.erase(projectile); // Erase returns the next iterator + projectile = projectiles.erase(projectile); // Erase returns the next iterator } else { - ++projectile; // Move to the next element + ++projectile; // Move to the next element } } - return ( - checkCollisionBetweenTwoRects( - offset.x, offset.y, offset.w, offset.h, wall.x, wall.y, wall.w, - wall.h) && - checkCollisionBetweenTwoRects(offset.x, offset.y, offset.w, offset.h, offset2.x, offset2.y, - offset2.w, offset2.h) && - checkCollisionBetweenTwoRects(offset.x, offset.y, offset.w, offset.h, menu.x, menu.y, menu.w, - menu.h) && - notCollidedWithProjectile - ); + return (checkCollisionBetweenTwoRects(offset.x, offset.y, offset.w, offset.h, wall.x, wall.y, + wall.w, wall.h) && + checkCollisionBetweenTwoRects(offset.x, offset.y, offset.w, offset.h, offset2.x, + offset2.y, offset2.w, offset2.h) && + checkCollisionBetweenTwoRects(offset.x, offset.y, offset.w, offset.h, menu.x, menu.y, + menu.w, menu.h) && + notCollidedWithProjectile); } - -bool checkCollisionPlayer2(SDL_Rect& offset, SDL_Rect& offset2, SDL_Rect& wall, SDL_Rect& menu, std::vector& projectiles) { - +bool checkCollisionPlayer2(SDL_Rect& offset, SDL_Rect& offset2, SDL_Rect& wall, SDL_Rect& menu, + std::vector& projectiles) { bool notCollidedWithProjectile = true; - for (auto projectile = projectiles.begin(); projectile != projectiles.end(); ) { + for (auto projectile = projectiles.begin(); projectile != projectiles.end();) { bool _notCollidedWithProjectile = checkCollisionBetweenTwoRects( - offset2.x, offset2.y, offset2.w, offset2.h, - projectile->position.x, projectile->position.y, - projectile->position.w, projectile->position.h - ); + offset2.x, offset2.y, offset2.w, offset2.h, projectile->position.x, + projectile->position.y, projectile->position.w, projectile->position.h); std::cout << "Not collided with projectile: " << _notCollidedWithProjectile << std::endl; - notCollidedWithProjectile = ( - notCollidedWithProjectile && _notCollidedWithProjectile - ); + notCollidedWithProjectile = (notCollidedWithProjectile && _notCollidedWithProjectile); if (!_notCollidedWithProjectile) { // Collision detected, remove projectile - projectile = projectiles.erase(projectile); // Erase returns the next iterator + projectile = projectiles.erase(projectile); // Erase returns the next iterator } else { - ++projectile; // Move to the next element + ++projectile; // Move to the next element } } - return ( - checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, offset2.h, wall.x, wall.y, wall.w, - wall.h) && - checkCollisionBetweenTwoRects(offset.x, offset.y, offset.w, offset.h, offset2.x, offset2.y, - offset2.w, offset2.h) && - checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, offset2.h, menu.x, menu.y, menu.w, - menu.h) && - notCollidedWithProjectile - ); + return (checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, offset2.h, wall.x, + wall.y, wall.w, wall.h) && + checkCollisionBetweenTwoRects(offset.x, offset.y, offset.w, offset.h, offset2.x, + offset2.y, offset2.w, offset2.h) && + checkCollisionBetweenTwoRects(offset2.x, offset2.y, offset2.w, offset2.h, menu.x, + menu.y, menu.w, menu.h) && + notCollidedWithProjectile); } -int main(int argc, char *args[]) { +int main(int argc, char* args[]) { SDL_Init(SDL_INIT_VIDEO); // inicializa��o das fun��es de video SDL_Init(SDL_INIT_TIMER); // inicializa��o das fun��es de tempo - SDL_Surface *screen; // superficie de video - SDL_Surface *telaprincipal; // supercie de fundo - SDL_Surface *bala; // superficie da bala - SDL_Surface *explosao; // superficie da explos�o - SDL_Surface *pontuacao; // superficie dos numeros para pontua��o + SDL_Surface* screen; // superficie de video + SDL_Surface* telaprincipal; // supercie de fundo + SDL_Surface* bala; // superficie da bala + SDL_Surface* explosao; // superficie da explos�o + SDL_Surface* pontuacao; // superficie dos numeros para pontua��o SpriteSet pontuacao01{"Pontuacao01"}; Player player1{"Player1"}; @@ -171,7 +158,7 @@ int main(int argc, char *args[]) { std::vector projectiles{}; size_t projectiles_counter = 0; - SDL_Rect wall; // retangulo para determinar a colis�o com a parede central + SDL_Rect wall; // retangulo para determinar a colis�o com a parede central SDL_Rect menu; // retangulo para determinar a colis�o com a barra de informa��es inferior SDL_Rect offset3; // coordenada da bala SDL_Rect pontuacao02; // coordenada da pontua��o do jogador 1 @@ -234,8 +221,7 @@ int main(int argc, char *args[]) { quit1 = 1; } } - } - else if (entrar == 3) // condi��o de entrada no menu + } else if (entrar == 3) // condi��o de entrada no menu { SDL_FreeSurface(telaprincipal); telaprincipal = SDL_LoadBMP("resources/menu.bmp"); // troca a imagem bmp para o menu @@ -265,8 +251,7 @@ int main(int argc, char *args[]) { quit1 = 1; } } - } - else if (entrar == 2) // condicao 2 (o jogo em si) + } else if (entrar == 2) // condicao 2 (o jogo em si) { // atribuicao de variaveis inteiras , retangulos , coordenadas e etc. pontuacao1 = 0; @@ -281,8 +266,10 @@ int main(int argc, char *args[]) { pontuacao02.x = 212, pontuacao02.y = 435; pontuacao03.x = 550, pontuacao03.y = 435; - player1.position.x = 15, player1.position.y = 170, player1.position.w = 32, player1.position.h = 32; - player2.position.x = 560, player2.position.y = 260, player2.position.w = 32, player2.position.h = 32; + player1.position.x = 15, player1.position.y = 170, player1.position.w = 32, + player1.position.h = 32; + player2.position.x = 560, player2.position.y = 260, player2.position.w = 32, + player2.position.h = 32; wall.x = 287, wall.y = 102, wall.w = 53, wall.h = 240; menu.x = 1, menu.y = 413, menu.w = 638, menu.h = 66; @@ -322,113 +309,97 @@ int main(int argc, char *args[]) { switch (event.key.keysym.sym) { // comandos para o jogador 1 case SDLK_UP: // tecla para cima if (player1.state == PlayerStateEnum::IDLE) { - if (checkCollisionPlayer1(player1.position, player2.position, wall, menu, projectiles)) { + if (checkCollisionPlayer1(player1.position, + player2.position, wall, menu, + projectiles)) { player1.position.y = player1.position.y - 6; player1.setDirection(DirectionEnum::UP); break; - } else { - pontuacao2 = pontuacao2 + 1; - player1.state = PlayerStateEnum::EXPLODING; - player1.timer = 1000; } } break; case SDLK_DOWN: // tecla para baixo if (player1.state == PlayerStateEnum::IDLE) { - if (checkCollisionPlayer1(player1.position, player2.position, wall, menu, projectiles)) { + if (checkCollisionPlayer1(player1.position, + player2.position, wall, menu, + projectiles)) { // Update position and direction of player1 player1.position.y = player1.position.y + 6; player1.setDirection(DirectionEnum::DOWN); break; - } else { - pontuacao2 = pontuacao2 + 1; - player1.state = PlayerStateEnum::EXPLODING; - player1.timer = 1000; } } break; case SDLK_RIGHT: // tecla para a direita if (player1.state == PlayerStateEnum::IDLE) { - if (checkCollisionPlayer1(player1.position, player2.position, wall, menu, projectiles)) { + if (checkCollisionPlayer1(player1.position, + player2.position, wall, menu, + projectiles)) { // Update position and direction of player1 player1.position.x = player1.position.x + 6; player1.setDirection(DirectionEnum::RIGHT); break; - } else { - pontuacao2 = pontuacao2 + 1; - player1.state = PlayerStateEnum::EXPLODING; - player1.timer = 1000; } } break; case SDLK_LEFT: // tecla para esquerda if (player1.state == PlayerStateEnum::IDLE) { - if (checkCollisionPlayer1(player1.position, player2.position, wall, menu, projectiles)) { + if (checkCollisionPlayer1(player1.position, + player2.position, wall, menu, + projectiles)) { // Update position and direction of player1 player1.position.x = player1.position.x - 6; player1.setDirection(DirectionEnum::LEFT); break; - } else { - pontuacao2 = pontuacao2 + 1; - player1.state = PlayerStateEnum::EXPLODING; - player1.timer = 1000; } } break; // comandos para o jogador 2 case SDLK_w: // tecla w ( para cima ) if (player2.state == PlayerStateEnum::IDLE) { - if (checkCollisionPlayer2(player1.position, player2.position, wall, menu, projectiles)) { + if (checkCollisionPlayer2(player1.position, + player2.position, wall, menu, + projectiles)) { // Update position and direction of player2 player2.position.y = player2.position.y - 6; player2.setDirection(DirectionEnum::UP); break; - } else { - pontuacao1 = pontuacao1 + 1; - player2.state = PlayerStateEnum::EXPLODING; - player2.timer = 1000; } } break; case SDLK_s: // tecla s ( para baixo ) if (player2.state == PlayerStateEnum::IDLE) { - if (checkCollisionPlayer2(player1.position, player2.position, wall, menu, projectiles)) { + if (checkCollisionPlayer2(player1.position, + player2.position, wall, menu, + projectiles)) { // Update position and direction of player2 player2.position.y = player2.position.y + 6; player2.setDirection(DirectionEnum::DOWN); break; - } else { - pontuacao1 = pontuacao1 + 1; - player2.state = PlayerStateEnum::EXPLODING; - player2.timer = 1000; } } break; case SDLK_d: // tecla d ( para direita ) if (player2.state == PlayerStateEnum::IDLE) { - if (checkCollisionPlayer2(player1.position, player2.position, wall, menu, projectiles)) { + if (checkCollisionPlayer2(player1.position, + player2.position, wall, menu, + projectiles)) { // Update position and direction of player2 player2.position.x = player2.position.x + 6; player2.setDirection(DirectionEnum::RIGHT); break; - } else { - pontuacao1 = pontuacao1 + 1; - player2.state = PlayerStateEnum::EXPLODING; - player2.timer = 1000; } } break; case SDLK_a: // tecla a ( para esquerda ) if (player2.state == PlayerStateEnum::IDLE) { - if (checkCollisionPlayer2(player1.position, player2.position, wall, menu, projectiles)) { + if (checkCollisionPlayer2(player1.position, + player2.position, wall, menu, + projectiles)) { // Update position and direction of player2 player2.position.x = player2.position.x - 6; player2.setDirection(DirectionEnum::LEFT); break; - } else { - pontuacao1 = pontuacao1 + 1; - player2.state = PlayerStateEnum::EXPLODING; - player2.timer = 1000; } } break; @@ -437,107 +408,88 @@ int main(int argc, char *args[]) { break; // comandos para o tiro dos jogadores 1 e 2 case SDLK_m: // tecla m para o tiro do jogador 1 - { - Projectile projectile = Projectile(projectiles_counter); - projectile.loadSprite("resources/bala.bmp"); - - switch (player1.direction) { - case static_cast(DirectionEnum::UP): - { - projectile.position.x = player1.position.x + 12; - projectile.position.y = player1.position.y - 15; - projectile.position.w = 12; - projectile.position.h = 12; - projectile.setDirection(DirectionEnum::UP); - } - break; - case static_cast(DirectionEnum::DOWN): - { - projectile.position.x = player1.position.x + 12; - projectile.position.y = player1.position.y + 36; - projectile.position.w = 12; - projectile.position.h = 12; - projectile.setDirection(DirectionEnum::DOWN); - } - break; - case static_cast(DirectionEnum::RIGHT): - { - projectile.position.x = player1.position.x + 36; - projectile.position.y = player1.position.y + 12; - projectile.position.w = 12; - projectile.position.h = 12; - projectile.setDirection(DirectionEnum::RIGHT); - } - break; - case static_cast(DirectionEnum::LEFT): - { - projectile.position.x = player1.position.x - 15; - projectile.position.y = player1.position.y + 12; - projectile.position.w = 12; - projectile.position.h = 12; - projectile.setDirection(DirectionEnum::LEFT); - } - break; - - default: - break; - } - projectile.movingCooldown = PROJECTILE_MOVING_COOLDOWN; - projectiles.push_back(projectile); - projectiles_counter++; + { + Projectile projectile = Projectile(projectiles_counter); + projectile.loadSprite("resources/bala.bmp"); + + switch (player1.direction) { + case static_cast(DirectionEnum::UP): { + projectile.position.x = player1.position.x + 12; + projectile.position.y = player1.position.y - 15; + projectile.position.w = 12; + projectile.position.h = 12; + projectile.setDirection(DirectionEnum::UP); + } break; + case static_cast(DirectionEnum::DOWN): { + projectile.position.x = player1.position.x + 12; + projectile.position.y = player1.position.y + 36; + projectile.position.w = 12; + projectile.position.h = 12; + projectile.setDirection(DirectionEnum::DOWN); + } break; + case static_cast(DirectionEnum::RIGHT): { + projectile.position.x = player1.position.x + 36; + projectile.position.y = player1.position.y + 12; + projectile.position.w = 12; + projectile.position.h = 12; + projectile.setDirection(DirectionEnum::RIGHT); + } break; + case static_cast(DirectionEnum::LEFT): { + projectile.position.x = player1.position.x - 15; + projectile.position.y = player1.position.y + 12; + projectile.position.w = 12; + projectile.position.h = 12; + projectile.setDirection(DirectionEnum::LEFT); + } break; + + default: + break; } - break; + projectile.movingCooldown = PROJECTILE_MOVING_COOLDOWN; + projectiles.push_back(projectile); + projectiles_counter++; + } break; case SDLK_f: // tecla f para o jogador 2 - { - Projectile projectile = Projectile(projectiles_counter); - projectile.loadSprite("resources/bala.bmp"); - - switch (player2.direction) { - case static_cast(DirectionEnum::UP): - { - projectile.position.x = player2.position.x + 12; - projectile.position.y = player2.position.y - 15; - projectile.position.w = 12; - projectile.position.h = 12; - projectile.setDirection(DirectionEnum::UP); - } - break; - case static_cast(DirectionEnum::DOWN): - { - projectile.position.x = player2.position.x + 12; - projectile.position.y = player2.position.y + 36; - projectile.position.w = 12; - projectile.position.h = 12; - projectile.setDirection(DirectionEnum::DOWN); - } - break; - case static_cast(DirectionEnum::RIGHT): - { - projectile.position.x = player2.position.x + 36; - projectile.position.y = player2.position.y + 12; - projectile.position.w = 12; - projectile.position.h = 12; - projectile.setDirection(DirectionEnum::RIGHT); - } - break; - case static_cast(DirectionEnum::LEFT): - { - projectile.position.x = player2.position.x - 15; - projectile.position.y = player2.position.y + 12; - projectile.position.w = 12; - projectile.position.h = 12; - projectile.setDirection(DirectionEnum::LEFT); - } - break; - default: - break; - - } - projectile.movingCooldown = PROJECTILE_MOVING_COOLDOWN; - projectiles.push_back(projectile); - projectiles_counter++; + { + Projectile projectile = Projectile(projectiles_counter); + projectile.loadSprite("resources/bala.bmp"); + + switch (player2.direction) { + case static_cast(DirectionEnum::UP): { + projectile.position.x = player2.position.x + 12; + projectile.position.y = player2.position.y - 15; + projectile.position.w = 12; + projectile.position.h = 12; + projectile.setDirection(DirectionEnum::UP); + } break; + case static_cast(DirectionEnum::DOWN): { + projectile.position.x = player2.position.x + 12; + projectile.position.y = player2.position.y + 36; + projectile.position.w = 12; + projectile.position.h = 12; + projectile.setDirection(DirectionEnum::DOWN); + } break; + case static_cast(DirectionEnum::RIGHT): { + projectile.position.x = player2.position.x + 36; + projectile.position.y = player2.position.y + 12; + projectile.position.w = 12; + projectile.position.h = 12; + projectile.setDirection(DirectionEnum::RIGHT); + } break; + case static_cast(DirectionEnum::LEFT): { + projectile.position.x = player2.position.x - 15; + projectile.position.y = player2.position.y + 12; + projectile.position.w = 12; + projectile.position.h = 12; + projectile.setDirection(DirectionEnum::LEFT); + } break; + default: + break; } - break; + projectile.movingCooldown = PROJECTILE_MOVING_COOLDOWN; + projectiles.push_back(projectile); + projectiles_counter++; + } break; default: x = 0; } @@ -555,20 +507,17 @@ int main(int argc, char *args[]) { } } - - if ( - player1.state != PlayerStateEnum::EXPLODING && - !checkCollisionPlayer1(player1.position, player2.position, wall, menu, projectiles) - ) { + if (player1.state != PlayerStateEnum::EXPLODING && + !checkCollisionPlayer1(player1.position, player2.position, wall, menu, + projectiles)) { pontuacao2 = pontuacao2 + 1; player1.state = PlayerStateEnum::EXPLODING; player1.timer = 1000; } - - if ( - player2.state != PlayerStateEnum::EXPLODING && - !checkCollisionPlayer2(player1.position, player2.position, wall, menu, projectiles) - ) { + + if (player2.state != PlayerStateEnum::EXPLODING && + !checkCollisionPlayer2(player1.position, player2.position, wall, menu, + projectiles)) { pontuacao1 = pontuacao1 + 1; player2.state = PlayerStateEnum::EXPLODING; player2.timer = 1000; @@ -581,36 +530,33 @@ int main(int argc, char *args[]) { // Fill the screen surface with the clear color SDL_FillRect(screen, NULL, clearColor); - + SDL_BlitSurface(telaprincipal, NULL, screen, NULL); - - jogador_load(player1.direction, player1.position, player1.spriteSurface, player1.spriteSet, - screen); - switch (player1.state) - { - case PlayerStateEnum::EXPLODING: - if (player1.timer > 0) { - SDL_BlitSurface(explosao, NULL, screen, &player1.position); - player1.timer--; - } else { - player1.state = PlayerStateEnum::IDLE; - player1.position.x = 15, player1.position.y = 170; - } - - break; - - default: - break; + jogador_load(player1.direction, player1.position, player1.spriteSurface, + player1.spriteSet, screen); + + switch (player1.state) { + case PlayerStateEnum::EXPLODING: + if (player1.timer > 0) { + SDL_BlitSurface(explosao, NULL, screen, &player1.position); + player1.timer--; + } else { + player1.state = PlayerStateEnum::IDLE; + player1.position.x = 15, player1.position.y = 170; + } + + break; + + default: + break; } - jogador_load(player2.direction, player2.position, player2.spriteSurface, player2.spriteSet, - screen); + jogador_load(player2.direction, player2.position, player2.spriteSurface, + player2.spriteSet, screen); - switch (player2.state) - { - case PlayerStateEnum::EXPLODING: - { + switch (player2.state) { + case PlayerStateEnum::EXPLODING: { if (player2.timer > 0) { SDL_BlitSurface(explosao, NULL, screen, &player2.position); player2.timer--; @@ -618,59 +564,48 @@ int main(int argc, char *args[]) { player2.state = PlayerStateEnum::IDLE; player2.position.x = 560, player2.position.y = 260; } - } - break; - - default: - break; + } break; + + default: + break; } - for (auto projectile = projectiles.begin(); projectile != projectiles.end(); ) { + for (auto projectile = projectiles.begin(); projectile != projectiles.end();) { SDL_Rect blitPosition = projectile->position; SDL_BlitSurface(projectile->spriteSurface, NULL, screen, &blitPosition); - + if (projectile->movingCooldown > 0) { projectile->movingCooldown--; } else { - switch (projectile->direction) - { - case static_cast(DirectionEnum::UP): - { + switch (projectile->direction) { + case static_cast(DirectionEnum::UP): { projectile->position.y--; projectile->movingCooldown = PROJECTILE_MOVING_COOLDOWN; - } - break; - case static_cast(DirectionEnum::DOWN): - { + } break; + case static_cast(DirectionEnum::DOWN): { projectile->position.y++; projectile->movingCooldown = PROJECTILE_MOVING_COOLDOWN; - } - break; - case static_cast(DirectionEnum::RIGHT): - { + } break; + case static_cast(DirectionEnum::RIGHT): { projectile->position.x++; projectile->movingCooldown = PROJECTILE_MOVING_COOLDOWN; - } - break; - case static_cast(DirectionEnum::LEFT): - { + } break; + case static_cast(DirectionEnum::LEFT): { projectile->position.x--; projectile->movingCooldown = PROJECTILE_MOVING_COOLDOWN; - } - break; + } break; - default: - break; + default: + break; } } - if ( - projectile->position.x < -10 || projectile->position.x > 1000 || - projectile->position.y < -10 || projectile->position.y > 1000 - ) { + if (projectile->position.x < -10 || projectile->position.x > 1000 || + projectile->position.y < -10 || projectile->position.y > 1000) { std::cout << "Before erase projectile" << std::endl; - projectile = projectiles.erase(projectile); // erase returns the next valid iterator + projectile = + projectiles.erase(projectile); // erase returns the next valid iterator } else { - ++projectile; // Only increment if no deletion occurred + ++projectile; // Only increment if no deletion occurred } } @@ -679,11 +614,8 @@ int main(int argc, char *args[]) { std::cout << "The length of the vector is: " << length << std::endl; - - pontuacao_load(pontuacao2, pontuacao03, pontuacao, - pontuacao01, screen); - pontuacao_load(pontuacao1, pontuacao02, pontuacao, - pontuacao01, screen); + pontuacao_load(pontuacao2, pontuacao03, pontuacao, pontuacao01, screen); + pontuacao_load(pontuacao1, pontuacao02, pontuacao, pontuacao01, screen); SDL_Flip(screen); // condi��es para verificar a vitoria dos jogadores @@ -740,8 +672,7 @@ int main(int argc, char *args[]) { } } } - } - else { + } else { entrar = 1; } }