thx a lot Djalim

This commit is contained in:
Thomas 2022-01-02 20:10:19 +01:00
parent 5b04846e7d
commit f32488458c
No known key found for this signature in database
GPG Key ID: E538821A6CDFDAD7
8 changed files with 52 additions and 22 deletions

View File

@ -1,7 +1,7 @@
Questions que je (Thomas Rubini) voudrait poser au prof Questions que je (Thomas Rubini) voudrais poser
c'est un fichier perso, après si vous voulez ajouter des trucs allez-y
- Est-ce que vous préférez l'implémentation orienté objet ou orienté macro pour lire la config ? - 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 osef ? - 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, osef, ou contre-productif ? - 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 bone ? - 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 ?)

View File

@ -3,7 +3,7 @@ players:
width: 250 width: 250
startXPosition: 50 startXPosition: 50
fireCooldown: 50 fireCooldown: 50
speed: 1 speed: 2
user1: user1:
color: red color: red
keys: keys:
@ -21,7 +21,7 @@ players:
invaders: invaders:
fireCooldown: 20 fireCooldown: 20
size: 15 size: 15
speed: 0 speed: 10
distance: 10 # distance in pixels between invaders distance: 10 # distance in pixels between invaders
typeA: typeA:
@ -49,4 +49,4 @@ projectiles:
grid: grid:
- " AAAAAAAA" - " AAAAAAAA"
- "B BBBBBBBB" - "B BBBBBBBB"
- " CCCCCCCC" - " CCCCCCCC"

View File

@ -33,6 +33,7 @@ private:
// basic methods // basic methods
void display(); void display();
void updateColumns();
// managers // managers
void managePlayers(); void managePlayers();

View File

@ -22,7 +22,10 @@ enum class InvaderType {
TYPEC, TYPEC,
NONE, NONE,
}; };
typedef vector<InvaderType> InvadersColumn; class InvadersColumn : public vector<InvaderType>{
public:
size_t getOutterInvader();
};
typedef vector<InvadersColumn> InvadersGrid; typedef vector<InvadersColumn> InvadersGrid;
typedef nsGraphics::Vec2D Position; typedef nsGraphics::Vec2D Position;
typedef unsigned playerID; typedef unsigned playerID;

View File

@ -192,7 +192,7 @@ void ConfigBuilder::readConfig() {
collectedData.torpedosWidth = getInt("projectiles.torpedos.width"); collectedData.torpedosWidth = getInt("projectiles.torpedos.width");
collectedData.torpedosLength = collectedData.torpedosWidth*PROJ_LENGTH_FACTOR; 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"); collectedData.torpedosColor = getColor("projectiles.torpedos.color");
} }

View File

@ -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() { void Game::managedGames() {
playMode = PlayMode::NONE; playMode = PlayMode::NONE;
@ -78,7 +89,7 @@ WinValue Game::playGame(){ // returns when game is finished
} }
players[0].x = confData.startXPosition; players[0].x = confData.startXPosition;
basePos = Position(0, 0); basePos = Position(200, 0);
// GAMELOOP // GAMELOOP
#define MAX_FPS 1000 #define MAX_FPS 1000

View File

@ -168,12 +168,14 @@ bool Game::checkMissilesAndPlayers() {
bool Game::checkTorpedosAndInvaders() { bool Game::checkTorpedosAndInvaders() {
auto tor_ite = torpedos.begin(); auto tor_ite = torpedos.begin();
while(tor_ite!=torpedos.end()){ while(tor_ite!=torpedos.end()){
unsigned i=0; size_t i=0;
for(;i<grid.size();++i){ for(;i<grid.size();++i){
size_t alienIndex = grid[i].getOutterInvader();
// calculate top-left Position of invader // calculate top-left Position of invader
Position pos = basePos + Position( Position pos = basePos + Position(
confData.invadersSize*i+confData.invadersDistance*i, confData.invadersSize*i+confData.invadersDistance*i,
confData.invadersSize*(grid[i].size()-1)+confData.invadersDistance*(grid[i].size()-1) confData.invadersSize*alienIndex+confData.invadersDistance*alienIndex
); );
// check collision on Y (invaders can actually be "under" torpedos, so we check both lower and upper bounds // check collision on Y (invaders can actually be "under" torpedos, so we check both lower and upper bounds
if(pos.getY()+confData.invadersSize>=tor_ite->getY() && if(pos.getY()+confData.invadersSize>=tor_ite->getY() &&
@ -182,18 +184,19 @@ bool Game::checkTorpedosAndInvaders() {
if(areLinesColliding( // now check collision on X if(areLinesColliding( // now check collision on X
tor_ite->getX(), tor_ite->getX() + confData.torpedosWidth, tor_ite->getX(), tor_ite->getX() + confData.torpedosWidth,
pos.getX(), pos.getX() + confData.invadersSize)){ 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; break;
} }
} }
} }
if(i==grid.size()) ++tor_ite; 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; return false;
} }

View File

@ -1,6 +1,18 @@
#include <utils.h>
#include "utils.h" #include "utils.h"
bool areLinesColliding(unsigned start1, unsigned end1, unsigned start2, unsigned end2){ bool areLinesColliding(unsigned start1, unsigned end1, unsigned start2, unsigned end2){
return start1 < end2 == start2 < end1; return start1 < end2 == start2 < end1;
// if it returns true, lines are colliding. I like truth tables // if it returns true, lines are colliding. I like truth tables
} }
size_t InvadersColumn::getOutterInvader(){
size_t i=size();
while(i>0){
--i;
if(at(i)!=InvaderType::NONE)return i;
}
return size();
}