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
|
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 ?)
|
@ -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"
|
||||||
|
@ -33,6 +33,7 @@ private:
|
|||||||
|
|
||||||
// basic methods
|
// basic methods
|
||||||
void display();
|
void display();
|
||||||
|
void updateColumns();
|
||||||
|
|
||||||
// managers
|
// managers
|
||||||
void managePlayers();
|
void managePlayers();
|
||||||
|
@ -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;
|
||||||
|
@ -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");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user