zsgiyurfzei
This commit is contained in:
parent
fac5bc245a
commit
69ba7221d6
@ -5,6 +5,7 @@
|
||||
#include "drawEngine.h"
|
||||
#include "config.h"
|
||||
#include "utils.h"
|
||||
#include "pos.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
@ -15,13 +16,17 @@ private:
|
||||
unsigned baseX;
|
||||
unsigned baseY;
|
||||
aliensGrid grid;
|
||||
vector<nsGraphics::Vec2D> missiles;
|
||||
vector<nsGraphics::Vec2D> torpilles;
|
||||
vector<pos> missiles;
|
||||
vector<pos> torpedos;
|
||||
pos player;
|
||||
|
||||
unsigned manageCollisions();
|
||||
void managePlayer();
|
||||
bool manageInvaders();
|
||||
void display();
|
||||
unsigned manageAllCollisions();
|
||||
void remCollidingProjectiles();
|
||||
void moveMissiles();
|
||||
void moveTorpedos();
|
||||
public:
|
||||
// in case someone wants to mess with the code, here's a minimal API, costs nothing to us
|
||||
Game();
|
||||
|
11
headers/pos.h
Normal file
11
headers/pos.h
Normal file
@ -0,0 +1,11 @@
|
||||
#ifndef SPACE_POS_H
|
||||
#define SPACE_POS_H
|
||||
|
||||
#include<mingl/mingl.h>
|
||||
|
||||
class pos : public nsGraphics::Vec2D {
|
||||
public:
|
||||
bool isColliding(pos& p, unsigned rx, unsigned ry);
|
||||
};
|
||||
|
||||
#endif //SPACE_POS_H
|
@ -2,12 +2,15 @@
|
||||
#define SPACE_STRUCTS
|
||||
|
||||
#include<vector>
|
||||
#include<mingl/mingl.h>
|
||||
|
||||
#define PLAYER_WINS 1
|
||||
#define INVADERS_WINS 2
|
||||
|
||||
using namespace std;
|
||||
|
||||
#define PLAYER_HEIGHT 100
|
||||
|
||||
typedef unsigned Alien;
|
||||
typedef vector<Alien> aliensLine;
|
||||
typedef vector<aliensLine> aliensGrid;
|
||||
|
@ -7,6 +7,9 @@ Game::Game() {
|
||||
void Game::managedGames() {
|
||||
initialMenuHandler(); // returns when user clicked plays
|
||||
|
||||
// ILLEGAL THINGS
|
||||
// conf.grid = ;
|
||||
|
||||
while(true){
|
||||
playGame();
|
||||
deathMenuHandler(); // returns when user clicked replay
|
||||
@ -38,14 +41,16 @@ void Game::deathMenuHandler(){
|
||||
unsigned Game::playGame(){ // returns when game is finished
|
||||
// INIT
|
||||
grid = conf.grid; // will copy the vector
|
||||
player.setX()
|
||||
player.setY()
|
||||
|
||||
// GAMELOOP
|
||||
while(true){
|
||||
display();
|
||||
unsigned res = manageCollisions(); // also advances missiles + torpedos
|
||||
if(res!=0)return res;
|
||||
managePlayer();
|
||||
if(manageInvaders())return INVADERS_WINS;
|
||||
unsigned res = manageAllCollisions(); // also advances missiles + torpedos
|
||||
if(res!=0)return res;
|
||||
display();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,59 @@ bool Game::manageInvaders(){
|
||||
*
|
||||
* @return 1 if the invaders are all dead, 2 if the player is dead, else 0
|
||||
*/
|
||||
unsigned Game::manageCollisions(){
|
||||
|
||||
|
||||
void Game::remCollidingProjectiles(){
|
||||
|
||||
auto i = missiles.begin();
|
||||
auto j = torpedos.begin();
|
||||
|
||||
while(i!=missiles.end()){
|
||||
bool flag = true;
|
||||
while(j!=torpedos.end()){
|
||||
if(*i==*j){
|
||||
missiles.erase(i);
|
||||
torpedos.erase(j);
|
||||
flag = false;
|
||||
break;
|
||||
}
|
||||
++j;
|
||||
}
|
||||
if(flag)++i;
|
||||
}
|
||||
}
|
||||
|
||||
void Game::moveMissiles() {
|
||||
auto i = missiles.begin();
|
||||
while (i != missiles.end()) {
|
||||
if (i->getY() == 0)missiles.erase(i);
|
||||
else if (PLAYER_HEIGHT(me, *i))return INVADERS_WINS;
|
||||
else {
|
||||
++(i->line);
|
||||
++i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Game::moveTorpedos() {
|
||||
auto i = torpedos.begin();
|
||||
while (i != torpedos.end()) {
|
||||
i->setY(i->getY()-1);
|
||||
if (i->getY() == NB_LIGNES)torpedo.erase(i);
|
||||
else if (contains(game.invader, *i))return PLAYER_WINS;
|
||||
else ++i;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned Game::manageAllCollisions() {
|
||||
moveMissiles();
|
||||
if(checkMissilesAndPlayer())return INVADERS_WINS;
|
||||
|
||||
remCollidingProjectiles();
|
||||
|
||||
moveTorpedos();
|
||||
|
||||
remCollidingProjectiles();
|
||||
|
||||
return 0;
|
||||
}
|
6
src/pos.cpp
Normal file
6
src/pos.cpp
Normal file
@ -0,0 +1,6 @@
|
||||
#include "pos.h"
|
||||
#include <mingl/mingl.h>
|
||||
|
||||
bool pos::isColliding(pos& p, unsigned rx, unsigned ry) {
|
||||
return nsGraphics::Vec2D::isColliding(p, p+nsGraphics::Vec2D(rx, ry));
|
||||
}
|
Loading…
Reference in New Issue
Block a user