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
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 ?
- 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 ?)

View File

@ -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"
- " CCCCCCCC"

View File

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

View File

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

View File

@ -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");
}

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() {
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

View File

@ -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<grid.size();++i){
size_t alienIndex = grid[i].getOutterInvader();
// calculate top-left Position of invader
Position pos = basePos + Position(
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
if(pos.getY()+confData.invadersSize>=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;
}

View File

@ -1,6 +1,18 @@
#include <utils.h>
#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
}
}
size_t InvadersColumn::getOutterInvader(){
size_t i=size();
while(i>0){
--i;
if(at(i)!=InvaderType::NONE)return i;
}
return size();
}