zsgiyurfzei

This commit is contained in:
Thomas 2021-12-16 15:23:56 +01:00
parent fac5bc245a
commit 69ba7221d6
No known key found for this signature in database
GPG Key ID: E538821A6CDFDAD7
6 changed files with 90 additions and 7 deletions

View File

@ -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
View 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

View File

@ -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;

View File

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

View File

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