From 69ba7221d6d6be4a4a0209780807e8834673f7e5 Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 16 Dec 2021 15:23:56 +0100 Subject: [PATCH] zsgiyurfzei --- headers/game.h | 11 ++++++--- headers/pos.h | 11 +++++++++ headers/utils.h | 3 +++ src/game_basics.cpp | 11 ++++++--- src/game_managers.cpp | 55 ++++++++++++++++++++++++++++++++++++++++++- src/pos.cpp | 6 +++++ 6 files changed, 90 insertions(+), 7 deletions(-) create mode 100644 headers/pos.h create mode 100644 src/pos.cpp diff --git a/headers/game.h b/headers/game.h index 11d8cab..c12d9dd 100644 --- a/headers/game.h +++ b/headers/game.h @@ -5,6 +5,7 @@ #include "drawEngine.h" #include "config.h" #include "utils.h" +#include "pos.h" using namespace std; @@ -15,13 +16,17 @@ private: unsigned baseX; unsigned baseY; aliensGrid grid; - vector missiles; - vector torpilles; + vector missiles; + vector torpedos; + pos player; - unsigned manageCollisions(); void managePlayer(); bool manageInvaders(); void display(); + unsigned manageAllCollisions(); + void remCollidingProjectiles(); + void moveMissiles(); + void moveTorpedos(); public: // in case someone wants to mess with the code, here's a minimal API, costs nothing to us Game(); diff --git a/headers/pos.h b/headers/pos.h new file mode 100644 index 0000000..a6532f7 --- /dev/null +++ b/headers/pos.h @@ -0,0 +1,11 @@ +#ifndef SPACE_POS_H +#define SPACE_POS_H + +#include + +class pos : public nsGraphics::Vec2D { +public: + bool isColliding(pos& p, unsigned rx, unsigned ry); +}; + +#endif //SPACE_POS_H diff --git a/headers/utils.h b/headers/utils.h index 6cefcc3..4dba7cb 100644 --- a/headers/utils.h +++ b/headers/utils.h @@ -2,12 +2,15 @@ #define SPACE_STRUCTS #include +#include #define PLAYER_WINS 1 #define INVADERS_WINS 2 using namespace std; +#define PLAYER_HEIGHT 100 + typedef unsigned Alien; typedef vector aliensLine; typedef vector aliensGrid; diff --git a/src/game_basics.cpp b/src/game_basics.cpp index 40484b2..38009bb 100644 --- a/src/game_basics.cpp +++ b/src/game_basics.cpp @@ -7,6 +7,9 @@ Game::Game() { void Game::managedGames() { initialMenuHandler(); // returns when user clicked plays + // ILLEGAL THINGS +// conf.grid = ; + while(true){ playGame(); deathMenuHandler(); // returns when user clicked replay @@ -38,14 +41,16 @@ void Game::deathMenuHandler(){ unsigned Game::playGame(){ // returns when game is finished // INIT grid = conf.grid; // will copy the vector + player.setX() + player.setY() // GAMELOOP while(true){ - display(); - unsigned res = manageCollisions(); // also advances missiles + torpedos - if(res!=0)return res; managePlayer(); if(manageInvaders())return INVADERS_WINS; + unsigned res = manageAllCollisions(); // also advances missiles + torpedos + if(res!=0)return res; + display(); } } diff --git a/src/game_managers.cpp b/src/game_managers.cpp index b790851..03c897e 100644 --- a/src/game_managers.cpp +++ b/src/game_managers.cpp @@ -18,6 +18,59 @@ bool Game::manageInvaders(){ * * @return 1 if the invaders are all dead, 2 if the player is dead, else 0 */ -unsigned Game::manageCollisions(){ + + +void Game::remCollidingProjectiles(){ + + auto i = missiles.begin(); + auto j = torpedos.begin(); + + while(i!=missiles.end()){ + bool flag = true; + while(j!=torpedos.end()){ + if(*i==*j){ + missiles.erase(i); + torpedos.erase(j); + flag = false; + break; + } + ++j; + } + if(flag)++i; + } +} + +void Game::moveMissiles() { + auto i = missiles.begin(); + while (i != missiles.end()) { + if (i->getY() == 0)missiles.erase(i); + else if (PLAYER_HEIGHT(me, *i))return INVADERS_WINS; + else { + ++(i->line); + ++i; + } + } +} + +void Game::moveTorpedos() { + auto i = torpedos.begin(); + while (i != torpedos.end()) { + i->setY(i->getY()-1); + if (i->getY() == NB_LIGNES)torpedo.erase(i); + else if (contains(game.invader, *i))return PLAYER_WINS; + else ++i; + } +} + +unsigned Game::manageAllCollisions() { + moveMissiles(); + if(checkMissilesAndPlayer())return INVADERS_WINS; + + remCollidingProjectiles(); + + moveTorpedos(); + + remCollidingProjectiles(); + return 0; } \ No newline at end of file diff --git a/src/pos.cpp b/src/pos.cpp new file mode 100644 index 0000000..b2207bd --- /dev/null +++ b/src/pos.cpp @@ -0,0 +1,6 @@ +#include "pos.h" +#include + +bool pos::isColliding(pos& p, unsigned rx, unsigned ry) { + return nsGraphics::Vec2D::isColliding(p, p+nsGraphics::Vec2D(rx, ry)); +} \ No newline at end of file