thx a lot Djalim
This commit is contained in:
parent
5b04846e7d
commit
f32488458c
12
QUESTIONS.md
12
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 ?
|
||||
- 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 ?)
|
@ -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:
|
||||
|
@ -33,6 +33,7 @@ private:
|
||||
|
||||
// basic methods
|
||||
void display();
|
||||
void updateColumns();
|
||||
|
||||
// managers
|
||||
void managePlayers();
|
||||
|
@ -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;
|
||||
|
@ -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");
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user