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: | ||||
| @ -49,4 +49,4 @@ projectiles: | ||||
| grid: | ||||
|  - "  AAAAAAAA" | ||||
|  - "B BBBBBBBB" | ||||
|  - "  CCCCCCCC" | ||||
|  - "  CCCCCCCC" | ||||
|  | ||||
| @ -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