diff --git a/QUESTIONS.md b/QUESTIONS.md index e3368e0..140d4f6 100644 --- a/QUESTIONS.md +++ b/QUESTIONS.md @@ -1,7 +1,7 @@ -Questions que je (Thomas Rubini) voudrait poser au prof -c'est un fichier perso, après si vous voulez ajouter des trucs allez-y +Questions que je (Thomas Rubini) voudrais poser -- Est-ce que vous préférez l'implémentation orienté objet ou orienté macro pour lire la config ? -- Est-ce que vouloir faire des structures optimisées (pas de redondance de mémoire) est une bonne chose, ou osef ? -- Est-ce que traduire les chars A B et C (identifiants des types d'aliens) tirés de la config en valeurs d'enum est une bonne chose, osef, ou contre-productif ? -- Est-ce que mon implémentation du réseau est bone ? \ No newline at end of file +- Est-ce que vous préférez l'implémentation orienté objet ou orienté macro pour lire la config ? Pourquoi ? +- Est-ce que vouloir faire des structures optimisées (pas de redondance de mémoire) est une bonne chose, ou pas importa,t ? +- Est-ce que traduire les chars A B et C (identifiants des types d'aliens) tirés de la config en valeurs d'enum est une bonne chose, pas important, ou contre-productif ? +- Est-ce que mon implémentation du réseau est bonne ? +- Est-on obligé d'utiliser size_t quand on sait que la taille du vecteur ne dépassera jamais concrètement la taille d'un int (cas précis : taille de 100 maximum, est-on obligé d'utiliser size_t de 8 bytes ?) \ No newline at end of file diff --git a/config.yml b/config.yml index 0f89a3d..3e7d7a8 100644 --- a/config.yml +++ b/config.yml @@ -3,7 +3,7 @@ players: width: 250 startXPosition: 50 fireCooldown: 50 - speed: 1 + speed: 2 user1: color: red keys: @@ -21,7 +21,7 @@ players: invaders: fireCooldown: 20 size: 15 - speed: 0 + speed: 10 distance: 10 # distance in pixels between invaders typeA: @@ -49,4 +49,4 @@ projectiles: grid: - " AAAAAAAA" - "B BBBBBBBB" - - " CCCCCCCC" \ No newline at end of file + - " CCCCCCCC" diff --git a/headers/game.h b/headers/game.h index cd52b01..8a6007a 100644 --- a/headers/game.h +++ b/headers/game.h @@ -33,6 +33,7 @@ private: // basic methods void display(); + void updateColumns(); // managers void managePlayers(); diff --git a/headers/utils.h b/headers/utils.h index f8a8150..a7ab523 100644 --- a/headers/utils.h +++ b/headers/utils.h @@ -22,7 +22,10 @@ enum class InvaderType { TYPEC, NONE, }; -typedef vector InvadersColumn; +class InvadersColumn : public vector{ +public: + size_t getOutterInvader(); +}; typedef vector InvadersGrid; typedef nsGraphics::Vec2D Position; typedef unsigned playerID; diff --git a/src/configManagement.cpp b/src/configManagement.cpp index 488e350..5f68632 100644 --- a/src/configManagement.cpp +++ b/src/configManagement.cpp @@ -192,7 +192,7 @@ void ConfigBuilder::readConfig() { collectedData.torpedosWidth = getInt("projectiles.torpedos.width"); collectedData.torpedosLength = collectedData.torpedosWidth*PROJ_LENGTH_FACTOR; - collectedData.torpedosSpeed = getInt("projectiles.missiles.speed"); + collectedData.torpedosSpeed = getInt("projectiles.torpedos.speed"); collectedData.torpedosColor = getColor("projectiles.torpedos.color"); } diff --git a/src/gameBasics.cpp b/src/gameBasics.cpp index 0fbd0a5..7f9d87c 100644 --- a/src/gameBasics.cpp +++ b/src/gameBasics.cpp @@ -12,6 +12,17 @@ Game::Game() : WININIT, pm(window) { } } +void Game::updateColumns(){ + while(grid.at(0).getOutterInvader()==grid.at(0).size()){ + grid.erase(grid.begin()); + basePos+=confData.invadersSize+confData.invadersDistance; + } + + while(grid.at(grid.size()-1).getOutterInvader()==grid.at(grid.size()-1).size()){ + grid.erase(grid.end()-1); + } +} + void Game::managedGames() { playMode = PlayMode::NONE; @@ -78,7 +89,7 @@ WinValue Game::playGame(){ // returns when game is finished } players[0].x = confData.startXPosition; - basePos = Position(0, 0); + basePos = Position(200, 0); // GAMELOOP #define MAX_FPS 1000 diff --git a/src/gameManagers.cpp b/src/gameManagers.cpp index 31fe5cd..2631b8e 100644 --- a/src/gameManagers.cpp +++ b/src/gameManagers.cpp @@ -168,12 +168,14 @@ bool Game::checkMissilesAndPlayers() { bool Game::checkTorpedosAndInvaders() { auto tor_ite = torpedos.begin(); while(tor_ite!=torpedos.end()){ - unsigned i=0; + size_t i=0; for(;i=tor_ite->getY() && @@ -182,18 +184,19 @@ bool Game::checkTorpedosAndInvaders() { if(areLinesColliding( // now check collision on X tor_ite->getX(), tor_ite->getX() + confData.torpedosWidth, pos.getX(), pos.getX() + confData.invadersSize)){ + + + InvaderType invType = grid[i][grid[i].size()]; + players[tor_ite->owner].score += confData.invadersDef[invType].points; + torpedos.erase(tor_ite); + + grid[i][alienIndex] = InvaderType::NONE; + updateColumns(); break; } } } if(i==grid.size()) ++tor_ite; - else{ - // compute points associated with invaders - InvaderType invType = grid[i][grid[i].size()]; - players[tor_ite->owner].score += confData.invadersDef[invType].points; - torpedos.erase(tor_ite); - grid[i].pop_back(); - } } return false; } diff --git a/src/utils.cpp b/src/utils.cpp index e0eb026..3f727a8 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -1,6 +1,18 @@ + +#include + #include "utils.h" bool areLinesColliding(unsigned start1, unsigned end1, unsigned start2, unsigned end2){ return start1 < end2 == start2 < end1; // if it returns true, lines are colliding. I like truth tables -} \ No newline at end of file +} + +size_t InvadersColumn::getOutterInvader(){ + size_t i=size(); + while(i>0){ + --i; + if(at(i)!=InvaderType::NONE)return i; + } + return size(); +}