invaders now pew pew too (and did some refactoring)
This commit is contained in:
parent
bffc3bf04c
commit
306d557030
@ -9,7 +9,7 @@ typedef string configKey;
|
||||
|
||||
struct ConfigData {
|
||||
|
||||
invadersGrid grid;
|
||||
InvadersGrid grid;
|
||||
|
||||
unsigned startXPosition;
|
||||
unsigned playersSpeed;
|
||||
|
@ -18,8 +18,8 @@ private:
|
||||
PixelManager pm;
|
||||
ConfigData confData;
|
||||
|
||||
position basePos;
|
||||
invadersGrid grid;
|
||||
Position basePos;
|
||||
InvadersGrid grid;
|
||||
bool direction = true;
|
||||
|
||||
vector<missile> missiles;
|
||||
@ -28,11 +28,18 @@ private:
|
||||
PlayMode playMode;
|
||||
vector<Player> players;
|
||||
|
||||
void managePlayers();
|
||||
bool manageInvaders();
|
||||
// invaders related variables
|
||||
unsigned fireCooldown=120;
|
||||
|
||||
// basic methods
|
||||
void display();
|
||||
|
||||
// collision thingies
|
||||
// managers
|
||||
void managePlayers();
|
||||
void manageOnePlayer(unsigned);
|
||||
bool manageInvaders();
|
||||
|
||||
// collision things
|
||||
void remCollidingProjectiles();
|
||||
void moveMissiles();
|
||||
void moveTorpedos();
|
||||
@ -40,8 +47,6 @@ private:
|
||||
bool checkTorpedosAndInvaders();
|
||||
bool invadersTouchPlayer();
|
||||
|
||||
void manageOnePlayer(unsigned);
|
||||
|
||||
public:
|
||||
// in case someone wants to mess with the code, here's a minimal API, costs nothing to us
|
||||
Game();
|
||||
|
@ -1,7 +1,7 @@
|
||||
#ifndef GUARD_PLAYMODE_H
|
||||
#define GUARD_PLAYMODE_H
|
||||
|
||||
enum PlayMode {
|
||||
enum class PlayMode {
|
||||
NONE,
|
||||
SINGLE,
|
||||
TWO_LOCAL,
|
||||
|
@ -3,9 +3,9 @@
|
||||
|
||||
#include "utils.h"
|
||||
|
||||
typedef position missile;
|
||||
typedef Position missile;
|
||||
|
||||
class torpedo : public position {
|
||||
class torpedo : public Position {
|
||||
public:
|
||||
playerID owner;
|
||||
torpedo(int x, int y, playerID owner);
|
||||
|
@ -8,7 +8,7 @@
|
||||
#define PLAYER_HEIGHT 100
|
||||
#define PROJ_LENGTH_FACTOR 2
|
||||
|
||||
enum WinValue{
|
||||
enum class WinValue{
|
||||
NOBODY, // should never be used
|
||||
PLAYERS,
|
||||
INVADERS,
|
||||
@ -16,13 +16,17 @@ enum WinValue{
|
||||
|
||||
using namespace std;
|
||||
|
||||
typedef unsigned Invader;
|
||||
typedef vector<Invader> invadersColumn;
|
||||
typedef vector<invadersColumn> invadersGrid;
|
||||
typedef nsGraphics::Vec2D position;
|
||||
enum class Invader {
|
||||
TypeA,
|
||||
TypeB,
|
||||
TypeC,
|
||||
};
|
||||
typedef vector<Invader> InvadersColumn;
|
||||
typedef vector<InvadersColumn> InvadersGrid;
|
||||
typedef nsGraphics::Vec2D Position;
|
||||
typedef unsigned playerID;
|
||||
|
||||
// didn't want to use position because of the semantic with x and y
|
||||
// didn't want to use Position because of the semantic with x and y
|
||||
bool areLinesColliding(unsigned start1, unsigned end1, unsigned start2, unsigned end2);
|
||||
|
||||
#endif
|
@ -37,7 +37,7 @@ public:
|
||||
/**
|
||||
* @brief Constructeur de recopie pour la classe Vec2D
|
||||
* @param[in] pos : Vec2D a copier
|
||||
* @fn Vec2D(const Vec2D& position);
|
||||
* @fn Vec2D(const Vec2D& Position);
|
||||
*/
|
||||
Vec2D(const Vec2D& pos);
|
||||
|
||||
@ -56,21 +56,21 @@ public:
|
||||
/**
|
||||
* @brief Opérateur d'addition
|
||||
* @param[in] pos : Vecteur a additionner
|
||||
* @fn Vec2D operator+(const Vec2D& position) const;
|
||||
* @fn Vec2D operator+(const Vec2D& Position) const;
|
||||
*/
|
||||
Vec2D operator+(const Vec2D& pos) const;
|
||||
|
||||
/**
|
||||
* @brief Opérateur de soustraction
|
||||
* @param[in] pos : Vecteur a soustraire
|
||||
* @fn Vec2D operator-(const Vec2D& position) const;
|
||||
* @fn Vec2D operator-(const Vec2D& Position) const;
|
||||
*/
|
||||
Vec2D operator-(const Vec2D& pos) const;
|
||||
|
||||
/**
|
||||
* @brief Opérateur de multiplication
|
||||
* @param[in] pos : Vecteur a multiplier
|
||||
* @fn Vec2D operator*(const Vec2D& position) const;
|
||||
* @fn Vec2D operator*(const Vec2D& Position) const;
|
||||
*/
|
||||
Vec2D operator*(const Vec2D& pos) const;
|
||||
|
||||
@ -84,7 +84,7 @@ public:
|
||||
/**
|
||||
* @brief Opérateur de division
|
||||
* @param[in] pos : Vecteur a diviser
|
||||
* @fn Vec2D operator/(const Vec2D& position) const;
|
||||
* @fn Vec2D operator/(const Vec2D& Position) const;
|
||||
*/
|
||||
Vec2D operator/(const Vec2D& pos) const;
|
||||
|
||||
@ -98,21 +98,21 @@ public:
|
||||
/**
|
||||
* @brief Opérateur modulo
|
||||
* @param[in] pos : Vecteur avec lequel faire un modulo
|
||||
* @fn Vec2D operator%(const Vec2D& position) const;
|
||||
* @fn Vec2D operator%(const Vec2D& Position) const;
|
||||
*/
|
||||
Vec2D operator%(const Vec2D& pos) const;
|
||||
|
||||
/**
|
||||
* @brief Opérateur d'égalité
|
||||
* @param[in] pos : Vecteur avec lequel vérifier l'égalité
|
||||
* @fn bool operator==(const Vec2D& position) const;
|
||||
* @fn bool operator==(const Vec2D& Position) const;
|
||||
*/
|
||||
bool operator==(const Vec2D& pos) const;
|
||||
|
||||
/**
|
||||
* @brief Opérateur d'inégalité
|
||||
* @param[in] pos : Vecteur avec lequel vérifier l'inégalité
|
||||
* @fn bool operator!=(const Vec2D& position) const;
|
||||
* @fn bool operator!=(const Vec2D& Position) const;
|
||||
*/
|
||||
bool operator!=(const Vec2D& pos) const;
|
||||
|
||||
@ -120,7 +120,7 @@ public:
|
||||
* @brief Opérateur de stricte infériorité
|
||||
* (Vérifie la stricte infériorité de la magnitude des deux vecteurs)
|
||||
* @param[in] pos : Vecteur avec lequel vérifier la stricte infériorité
|
||||
* @fn bool operator<(const Vec2D& position) const;
|
||||
* @fn bool operator<(const Vec2D& Position) const;
|
||||
*/
|
||||
bool operator<(const Vec2D& pos) const;
|
||||
|
||||
@ -128,7 +128,7 @@ public:
|
||||
* @brief Opérateur de stricte supériorité
|
||||
* (Vérifie la stricte supériorité de la magnitude des deux vecteurs)
|
||||
* @param[in] pos : Vecteur avec lequel vérifier la stricte supériorité
|
||||
* @fn bool operator>(const Vec2D& position) const;
|
||||
* @fn bool operator>(const Vec2D& Position) const;
|
||||
*/
|
||||
bool operator>(const Vec2D& pos) const;
|
||||
|
||||
@ -136,7 +136,7 @@ public:
|
||||
* @brief Opérateur d'infériorité
|
||||
* (Vérifie l'infériorité de la magnitude des deux vecteurs)
|
||||
* @param[in] pos : Vecteur avec lequel vérifier l'infériorité
|
||||
* @fn bool operator<=(const Vec2D& position) const;
|
||||
* @fn bool operator<=(const Vec2D& Position) const;
|
||||
*/
|
||||
bool operator<=(const Vec2D& pos) const;
|
||||
|
||||
@ -144,49 +144,49 @@ public:
|
||||
* @brief Opérateur de supériorité
|
||||
* (Vérifie la supériorité de la magnitude des deux vecteurs)
|
||||
* @param[in] pos : Vecteur avec lequel vérifier la supériorité
|
||||
* @fn bool operator>=(const Vec2D& position) const;
|
||||
* @fn bool operator>=(const Vec2D& Position) const;
|
||||
*/
|
||||
bool operator>=(const Vec2D& pos) const;
|
||||
|
||||
/**
|
||||
* @brief Opérateur d'assignement
|
||||
* @param[in] pos : Vecteur source
|
||||
* @fn Vec2D& operator=(const Vec2D& position);
|
||||
* @fn Vec2D& operator=(const Vec2D& Position);
|
||||
*/
|
||||
Vec2D& operator=(const Vec2D& pos);
|
||||
|
||||
/**
|
||||
* @brief Opérateur d'addition avec assignement
|
||||
* @param[in] pos : Vecteur avec lequel additionner le vecteur actuel
|
||||
* @fn Vec2D& operator+=(const Vec2D& position);
|
||||
* @fn Vec2D& operator+=(const Vec2D& Position);
|
||||
*/
|
||||
Vec2D& operator+=(const Vec2D& pos);
|
||||
|
||||
/**
|
||||
* @brief Opérateur de soustraction avec assignement
|
||||
* @param[in] pos : Vecteur avec lequel soustraire le vecteur actuel
|
||||
* @fn Vec2D& operator-=(const Vec2D& position);
|
||||
* @fn Vec2D& operator-=(const Vec2D& Position);
|
||||
*/
|
||||
Vec2D& operator-=(const Vec2D& pos);
|
||||
|
||||
/**
|
||||
* @brief Opérateur de multiplication avec assignement
|
||||
* @param[in] pos : Vecteur avec lequel multiplier le vecteur actuel
|
||||
* @fn Vec2D& operator*=(const Vec2D& position);
|
||||
* @fn Vec2D& operator*=(const Vec2D& Position);
|
||||
*/
|
||||
Vec2D& operator*=(const Vec2D& pos);
|
||||
|
||||
/**
|
||||
* @brief Opérateur de division avec assignement
|
||||
* @param[in] pos : Vecteur avec lequel diviser le vecteur actuel
|
||||
* @fn Vec2D& operator/=(const Vec2D& position);
|
||||
* @fn Vec2D& operator/=(const Vec2D& Position);
|
||||
*/
|
||||
Vec2D& operator/=(const Vec2D& pos);
|
||||
|
||||
/**
|
||||
* @brief Opérateur modulo avec assignement
|
||||
* @param[in] pos : Vecteur avec lequel faire un modulo sur le vecteur actuel
|
||||
* @fn Vec2D& operator%=(const Vec2D& position);
|
||||
* @fn Vec2D& operator%=(const Vec2D& Position);
|
||||
*/
|
||||
Vec2D& operator%=(const Vec2D& pos);
|
||||
|
||||
@ -222,29 +222,29 @@ public:
|
||||
double computeMagnitude() const;
|
||||
|
||||
/**
|
||||
* @brief Récupère la position X (abscisse)
|
||||
* @brief Récupère la Position X (abscisse)
|
||||
* @return Une référence constante vers m_x
|
||||
* @fn int getX() const;
|
||||
*/
|
||||
int getX() const;
|
||||
|
||||
/**
|
||||
* @brief Définit la nouvelle position X (abscisse)
|
||||
* @param[in] x : Nouvelle position X
|
||||
* @brief Définit la nouvelle Position X (abscisse)
|
||||
* @param[in] x : Nouvelle Position X
|
||||
* @fn void setX(int x);
|
||||
*/
|
||||
void setX(int x);
|
||||
|
||||
/**
|
||||
* @brief Récupère la position Y (ordonnée)
|
||||
* @brief Récupère la Position Y (ordonnée)
|
||||
* @return Une référence constante vers m_y
|
||||
* @fn int getY() const;
|
||||
*/
|
||||
int getY() const;
|
||||
|
||||
/**
|
||||
* @brief Définit la nouvelle position Y (ordonnée)
|
||||
* @param[in] y : Nouvelle position Y
|
||||
* @brief Définit la nouvelle Position Y (ordonnée)
|
||||
* @param[in] y : Nouvelle Position Y
|
||||
* @fn void setY(int y);
|
||||
*/
|
||||
void setY(int y);
|
||||
|
@ -32,14 +32,14 @@ public:
|
||||
* @brief TransitionIds : Liste de toutes les transitions que cet élément peut exécuter
|
||||
*/
|
||||
enum TransitionIds {
|
||||
TRANSITION_POSITION, /**< Transition pour la position */
|
||||
TRANSITION_POSITION, /**< Transition pour la Position */
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Constructeur pour la classe Sprite, charge les données depuis un fichier
|
||||
* @param[in] filename : Chemin d'accès vers le fichier image
|
||||
* @param[in] position : Position du sprite
|
||||
* @fn Sprite(const std::string& filename, const nsGraphics::Vec2D& position = nsGraphics::Vec2D());
|
||||
* @fn Sprite(const std::string& filename, const nsGraphics::Vec2D& Position = nsGraphics::Vec2D());
|
||||
*/
|
||||
Sprite(const std::string& filename, const nsGraphics::Vec2D& position = nsGraphics::Vec2D());
|
||||
|
||||
@ -48,7 +48,7 @@ public:
|
||||
* @param[in] pixelData : Vecteur contenant des données sur les pixels
|
||||
* @param[in] rowSize : Nombre de pixels par ligne
|
||||
* @param[in] position : Position du sprite
|
||||
* @fn Sprite(const std::vector<nsGraphics::RGBAcolor>& pixelData, const uint32_t& rowSize, const nsGraphics::Vec2D& position = nsGraphics::Vec2D());
|
||||
* @fn Sprite(const std::vector<nsGraphics::RGBAcolor>& pixelData, const uint32_t& rowSize, const nsGraphics::Vec2D& Position = nsGraphics::Vec2D());
|
||||
*/
|
||||
Sprite(const std::vector<nsGraphics::RGBAcolor>& pixelData, const uint32_t& rowSize, const nsGraphics::Vec2D& position = nsGraphics::Vec2D());
|
||||
|
||||
@ -72,16 +72,16 @@ public:
|
||||
const std::vector<nsGraphics::RGBAcolor>& getPixelData() const;
|
||||
|
||||
/**
|
||||
* @brief Récupère la position du sprite
|
||||
* @brief Récupère la Position du sprite
|
||||
* @return Une référence const vers m_position
|
||||
* @fn const nsGraphics::Vec2D& getPosition() const;
|
||||
*/
|
||||
const nsGraphics::Vec2D& getPosition() const;
|
||||
|
||||
/**
|
||||
* @brief Définit la nouvelle position du sprite
|
||||
* @param[in] position : Nouvelle position
|
||||
* @fn void setPosition(const nsGraphics::Vec2D &position);
|
||||
* @brief Définit la nouvelle Position du sprite
|
||||
* @param[in] position : Nouvelle Position
|
||||
* @fn void setPosition(const nsGraphics::Vec2D &Position);
|
||||
*/
|
||||
void setPosition(const nsGraphics::Vec2D& position);
|
||||
|
||||
|
@ -36,7 +36,7 @@ public:
|
||||
enum TransitionIds {
|
||||
TRANSITION_COLOR_RGB, /**< Transition pour la couleur RGB */
|
||||
TRANSITION_COLOR_ALPHA, /**< Transition pour la transparence */
|
||||
TRANSITION_POSITION, /**< Transition pour la position */
|
||||
TRANSITION_POSITION, /**< Transition pour la Position */
|
||||
};
|
||||
|
||||
/**
|
||||
@ -65,7 +65,7 @@ public:
|
||||
* @param[in] textFont : Police du texte (8x13 Bitmap par défaut)
|
||||
* @param[in] horizontalAlignment : Alignement horizontal du texte (Alignement a gauche par défaut)
|
||||
* @param[in] verticalAlignment : Alignement vertical du texte (Alignement en bas par défaut)
|
||||
* @fn Text(const nsGraphics::Vec2D &position, const std::string &content,
|
||||
* @fn Text(const nsGraphics::Vec2D &Position, const std::string &content,
|
||||
const nsGraphics::RGBAcolor &textColor, const GlutFont::GlutFonts &textFont = GlutFont::GlutFonts::BITMAP_8_BY_13,
|
||||
const HorizontalAlignment &horizontalAlignment = ALIGNH_LEFT,
|
||||
const VerticalAlignment &verticalAlignment = ALIGNV_BOTTOM);
|
||||
@ -95,15 +95,15 @@ public:
|
||||
int computeHeight() const;
|
||||
|
||||
/**
|
||||
* @brief Calcule la position visible du texte, calculée avec l'alignement vertical et horizontal
|
||||
* @return La position visible, en haut a gauche
|
||||
* @brief Calcule la Position visible du texte, calculée avec l'alignement vertical et horizontal
|
||||
* @return La Position visible, en haut a gauche
|
||||
* @fn nsGraphics::Vec2D computeVisiblePosition() const;
|
||||
*/
|
||||
nsGraphics::Vec2D computeVisiblePosition() const;
|
||||
|
||||
/**
|
||||
* @brief Calcule la position de fin visible du texte, calculée avec l'alignement vertical et horizontal
|
||||
* @return La position visible, en bas a droite
|
||||
* @brief Calcule la Position de fin visible du texte, calculée avec l'alignement vertical et horizontal
|
||||
* @return La Position visible, en bas a droite
|
||||
* @fn nsGraphics::Vec2D computeVisibleEndPosition() const;
|
||||
*/
|
||||
nsGraphics::Vec2D computeVisibleEndPosition() const;
|
||||
@ -123,15 +123,15 @@ public:
|
||||
void setContent(const std::string &content);
|
||||
|
||||
/**
|
||||
* @brief Récupère la position du texte
|
||||
* @brief Récupère la Position du texte
|
||||
* @fn const nsGraphics::Vec2D& getPosition() const;
|
||||
*/
|
||||
const nsGraphics::Vec2D& getPosition() const;
|
||||
|
||||
/**
|
||||
* @brief Définit la nouvelle position du texte
|
||||
* @param[in] position : Nouvelle position
|
||||
* @fn void setPosition(const nsGraphics::Vec2D &position);
|
||||
* @brief Définit la nouvelle Position du texte
|
||||
* @param[in] position : Nouvelle Position
|
||||
* @fn void setPosition(const nsGraphics::Vec2D &Position);
|
||||
*/
|
||||
void setPosition(const nsGraphics::Vec2D &position);
|
||||
|
||||
|
@ -154,14 +154,14 @@ public:
|
||||
void setWindowSize(const nsGraphics::Vec2D& windowSize);
|
||||
|
||||
/**
|
||||
* @brief Récupère la position de la fenêtre
|
||||
* @brief Récupère la Position de la fenêtre
|
||||
* @fn nsGraphics::Vec2D getWindowPosition() const;
|
||||
*/
|
||||
nsGraphics::Vec2D getWindowPosition() const;
|
||||
|
||||
/**
|
||||
* @brief Règle la position de la fenêtre
|
||||
* @param[in] windowPosition : Nouvelle position
|
||||
* @brief Règle la Position de la fenêtre
|
||||
* @param[in] windowPosition : Nouvelle Position
|
||||
* @fn void setWindowPosition(const nsGraphics::Vec2D &windowPosition);
|
||||
*/
|
||||
void setWindowPosition(const nsGraphics::Vec2D &windowPosition);
|
||||
|
@ -34,7 +34,7 @@ public:
|
||||
TRANSITION_FILL_COLOR_ALPHA, /**< Transition pour la transparence de remplissage */
|
||||
TRANSITION_BORDER_COLOR_RGB, /**< Transition pour la couleur de bord */
|
||||
TRANSITION_BORDER_COLOR_ALPHA, /**< Transition pour la transparence de bord */
|
||||
TRANSITION_POSITION, /**< Transition pour la position */
|
||||
TRANSITION_POSITION, /**< Transition pour la Position */
|
||||
TRANSITION_RADIUS, /**< Transition pour le rayon */
|
||||
};
|
||||
|
||||
@ -44,7 +44,7 @@ public:
|
||||
* @param[in] radius : Rayon du cercle
|
||||
* @param[in] fillColor : Couleur de remplissage
|
||||
* @param[in] borderColor : Couleur de bord
|
||||
* @fn Circle(const nsGraphics::Vec2D& position, const unsigned& radius, const nsGraphics::RGBAcolor& fillColor, const nsGraphics::RGBAcolor& borderColor = nsGraphics::KTransparent);
|
||||
* @fn Circle(const nsGraphics::Vec2D& Position, const unsigned& radius, const nsGraphics::RGBAcolor& fillColor, const nsGraphics::RGBAcolor& borderColor = nsGraphics::KTransparent);
|
||||
*/
|
||||
Circle(const nsGraphics::Vec2D& position, const unsigned& radius, const nsGraphics::RGBAcolor& fillColor, const nsGraphics::RGBAcolor& borderColor = nsGraphics::KTransparent);
|
||||
|
||||
@ -62,27 +62,27 @@ public:
|
||||
/**
|
||||
* @brief Opérateur de décalage
|
||||
* @param[in] position : Position a additionner
|
||||
* @fn Circle operator+(const nsGraphics::Vec2D& position) const
|
||||
* @fn Circle operator+(const nsGraphics::Vec2D& Position) const
|
||||
*/
|
||||
Circle operator+(const nsGraphics::Vec2D& getPosition) const;
|
||||
|
||||
/**
|
||||
* @brief Opérateur de réduction
|
||||
* @param[in] f : Nombre avec lequel multiplier la position actuelle
|
||||
* @param[in] f : Nombre avec lequel multiplier la Position actuelle
|
||||
* @fn Circle operator*(const float& f) const
|
||||
*/
|
||||
Circle operator*(const float& f) const;
|
||||
|
||||
/**
|
||||
* @brief Récupère la position du cercle
|
||||
* @brief Récupère la Position du cercle
|
||||
* @fn const nsGraphics::Vec2D& getPosition() const;
|
||||
*/
|
||||
const nsGraphics::Vec2D& getPosition() const;
|
||||
|
||||
/**
|
||||
* @brief Définit la nouvelle position du cercle
|
||||
* @param[in] position : Nouvelle position
|
||||
* @fn void setPosition(const nsGraphics::Vec2D &position);
|
||||
* @brief Définit la nouvelle Position du cercle
|
||||
* @param[in] position : Nouvelle Position
|
||||
* @fn void setPosition(const nsGraphics::Vec2D &Position);
|
||||
*/
|
||||
void setPosition(const nsGraphics::Vec2D &position);
|
||||
|
||||
|
@ -34,8 +34,8 @@ public:
|
||||
TRANSITION_FILL_COLOR_ALPHA, /**< Transition pour la transparence de remplissage */
|
||||
TRANSITION_BORDER_COLOR_RGB, /**< Transition pour la couleur de bord */
|
||||
TRANSITION_BORDER_COLOR_ALPHA, /**< Transition pour la transparence de bord */
|
||||
TRANSITION_FIRST_POSITION, /**< Transition pour la position du premier sommet */
|
||||
TRANSITION_SECOND_POSITION, /**< Transition pour la position du second sommet */
|
||||
TRANSITION_FIRST_POSITION, /**< Transition pour la Position du premier sommet */
|
||||
TRANSITION_SECOND_POSITION, /**< Transition pour la Position du second sommet */
|
||||
TRANSITION_LINE_WIDTH, /**< Transition pour l'épaisseur de la ligne */
|
||||
};
|
||||
|
||||
@ -63,39 +63,39 @@ public:
|
||||
/**
|
||||
* @brief Opérateur de décalage
|
||||
* @param[in] position : Position a additionner
|
||||
* @fn Line operator+(const nsGraphics::Vec2D& position) const
|
||||
* @fn Line operator+(const nsGraphics::Vec2D& Position) const
|
||||
*/
|
||||
Line operator+(const nsGraphics::Vec2D& position) const;
|
||||
|
||||
/**
|
||||
* @brief Opérateur de réduction
|
||||
* @param[in] f : Nombre avec lequel multiplier la position actuelle
|
||||
* @param[in] f : Nombre avec lequel multiplier la Position actuelle
|
||||
* @fn Line operator*(const float& f) const
|
||||
*/
|
||||
Line operator*(const float& f) const;
|
||||
|
||||
/**
|
||||
* @brief Récupère la position du premier sommet de la ligne
|
||||
* @brief Récupère la Position du premier sommet de la ligne
|
||||
* @fn const nsGraphics::Vec2D& getFirstPosition() const;
|
||||
*/
|
||||
const nsGraphics::Vec2D& getFirstPosition() const;
|
||||
|
||||
/**
|
||||
* @brief Définit la nouvelle position du premier sommet de la ligne
|
||||
* @param[in] firstPosition : Nouvelle position du premier sommet
|
||||
* @brief Définit la nouvelle Position du premier sommet de la ligne
|
||||
* @param[in] firstPosition : Nouvelle Position du premier sommet
|
||||
* @fn void setFirstPosition(const nsGraphics::Vec2D &firstPosition);
|
||||
*/
|
||||
void setFirstPosition(const nsGraphics::Vec2D &firstPosition);
|
||||
|
||||
/**
|
||||
* @brief Récupère la position du second sommet de la ligne
|
||||
* @brief Récupère la Position du second sommet de la ligne
|
||||
* @fn const nsGraphics::Vec2D& getSecondPosition() const;
|
||||
*/
|
||||
const nsGraphics::Vec2D& getSecondPosition() const;
|
||||
|
||||
/**
|
||||
* @brief Définit la nouvelle position du second sommet de la ligne
|
||||
* @param[in] secondPosition : Nouvelle position du second sommet
|
||||
* @brief Définit la nouvelle Position du second sommet de la ligne
|
||||
* @param[in] secondPosition : Nouvelle Position du second sommet
|
||||
* @fn void setSecondPosition(const nsGraphics::Vec2D &secondPosition);
|
||||
*/
|
||||
void setSecondPosition(const nsGraphics::Vec2D &secondPosition);
|
||||
|
@ -34,8 +34,8 @@ public:
|
||||
TRANSITION_FILL_COLOR_ALPHA, /**< Transition pour la transparence de remplissage */
|
||||
TRANSITION_BORDER_COLOR_RGB, /**< Transition pour la couleur de bord */
|
||||
TRANSITION_BORDER_COLOR_ALPHA, /**< Transition pour la transparence de bord */
|
||||
TRANSITION_FIRST_POSITION, /**< Transition pour la position du coin haut-gauche */
|
||||
TRANSITION_SECOND_POSITION, /**< Transition pour la position du coin bas-droit */
|
||||
TRANSITION_FIRST_POSITION, /**< Transition pour la Position du coin haut-gauche */
|
||||
TRANSITION_SECOND_POSITION, /**< Transition pour la Position du coin bas-droit */
|
||||
};
|
||||
|
||||
/**
|
||||
@ -57,7 +57,7 @@ public:
|
||||
* @param[in] height : Hauteur du rectangle
|
||||
* @param[in] fillColor : Couleur de remplissage
|
||||
* @param[in] borderColor : Couleur de bord
|
||||
* @fn Rectangle(const nsGraphics::Vec2D& position, const unsigned& width, const unsigned& height, const nsGraphics::RGBAcolor& fillColor,
|
||||
* @fn Rectangle(const nsGraphics::Vec2D& Position, const unsigned& width, const unsigned& height, const nsGraphics::RGBAcolor& fillColor,
|
||||
const nsGraphics::RGBAcolor& borderColor = nsGraphics::KTransparent);
|
||||
*/
|
||||
Rectangle(const nsGraphics::Vec2D& position, const unsigned& width, const unsigned& height, const nsGraphics::RGBAcolor& fillColor,
|
||||
@ -77,39 +77,39 @@ public:
|
||||
/**
|
||||
* @brief Opérateur de décalage
|
||||
* @param[in] position : Position a additionner
|
||||
* @fn Rectangle operator+(const nsGraphics::Vec2D& position) const
|
||||
* @fn Rectangle operator+(const nsGraphics::Vec2D& Position) const
|
||||
*/
|
||||
Rectangle operator+(const nsGraphics::Vec2D& position) const;
|
||||
|
||||
/**
|
||||
* @brief Opérateur de réduction
|
||||
* @param[in] f : Nombre avec lequel multiplier la position actuelle
|
||||
* @param[in] f : Nombre avec lequel multiplier la Position actuelle
|
||||
* @fn Rectangle operator*(const float& f) const
|
||||
*/
|
||||
Rectangle operator*(const float& f) const;
|
||||
|
||||
/**
|
||||
* @brief Récupère la position du coin haut-gauche du rectangle
|
||||
* @brief Récupère la Position du coin haut-gauche du rectangle
|
||||
* @fn const nsGraphics::Vec2D& getFirstPosition() const;
|
||||
*/
|
||||
const nsGraphics::Vec2D& getFirstPosition() const;
|
||||
|
||||
/**
|
||||
* @brief Définit la nouvelle position du coin haut-gauche du rectangle
|
||||
* @param[in] firstPosition : Nouvelle position du coin haut-gauche
|
||||
* @brief Définit la nouvelle Position du coin haut-gauche du rectangle
|
||||
* @param[in] firstPosition : Nouvelle Position du coin haut-gauche
|
||||
* @fn void setFirstPosition(const nsGraphics::Vec2D &firstPosition);
|
||||
*/
|
||||
void setFirstPosition(const nsGraphics::Vec2D &firstPosition);
|
||||
|
||||
/**
|
||||
* @brief Récupère la position du coin bas-droit du rectangle
|
||||
* @brief Récupère la Position du coin bas-droit du rectangle
|
||||
* @fn const nsGraphics::Vec2D& getSecondPosition() const;
|
||||
*/
|
||||
const nsGraphics::Vec2D& getSecondPosition() const;
|
||||
|
||||
/**
|
||||
* @brief Définit la nouvelle position du coin bas-droit du rectangle
|
||||
* @param[in] secondPosition : Nouvelle position du coin bas-droit
|
||||
* @brief Définit la nouvelle Position du coin bas-droit du rectangle
|
||||
* @param[in] secondPosition : Nouvelle Position du coin bas-droit
|
||||
* @fn void setSecondPosition(const nsGraphics::Vec2D &secondPosition);
|
||||
*/
|
||||
void setSecondPosition(const nsGraphics::Vec2D &secondPosition);
|
||||
|
@ -34,9 +34,9 @@ public:
|
||||
TRANSITION_FILL_COLOR_ALPHA, /**< Transition pour la transparence de remplissage */
|
||||
TRANSITION_BORDER_COLOR_RGB, /**< Transition pour la couleur de bord */
|
||||
TRANSITION_BORDER_COLOR_ALPHA, /**< Transition pour la transparence de bord */
|
||||
TRANSITION_FIRST_POSITION, /**< Transition pour la position du premier sommet */
|
||||
TRANSITION_SECOND_POSITION, /**< Transition pour la position du second sommet */
|
||||
TRANSITION_THIRD_POSITION, /**< Transition pour la position du troisième sommet */
|
||||
TRANSITION_FIRST_POSITION, /**< Transition pour la Position du premier sommet */
|
||||
TRANSITION_SECOND_POSITION, /**< Transition pour la Position du second sommet */
|
||||
TRANSITION_THIRD_POSITION, /**< Transition pour la Position du troisième sommet */
|
||||
};
|
||||
|
||||
/**
|
||||
@ -66,52 +66,52 @@ public:
|
||||
/**
|
||||
* @brief Opérateur de décalage
|
||||
* @param[in] position : Position a additionner
|
||||
* @fn Triangle operator+(const nsGraphics::Vec2D& position) const
|
||||
* @fn Triangle operator+(const nsGraphics::Vec2D& Position) const
|
||||
*/
|
||||
Triangle operator+(const nsGraphics::Vec2D& position) const;
|
||||
|
||||
/**
|
||||
* @brief Opérateur de réduction
|
||||
* @param[in] f : Nombre avec lequel multiplier la position actuelle
|
||||
* @param[in] f : Nombre avec lequel multiplier la Position actuelle
|
||||
* @fn Triangle operator*(const float& f) const
|
||||
*/
|
||||
Triangle operator*(const float& f) const;
|
||||
|
||||
/**
|
||||
* @brief Récupère la position du premier sommet du triangle
|
||||
* @brief Récupère la Position du premier sommet du triangle
|
||||
* @fn const nsGraphics::Vec2D& getFirstPosition() const;
|
||||
*/
|
||||
const nsGraphics::Vec2D& getFirstPosition() const;
|
||||
|
||||
/**
|
||||
* @brief Définit la nouvelle position du premier sommet du triangle
|
||||
* @param[in] firstPosition : Nouvelle position du premier sommet
|
||||
* @brief Définit la nouvelle Position du premier sommet du triangle
|
||||
* @param[in] firstPosition : Nouvelle Position du premier sommet
|
||||
* @fn void setFirstPosition(const nsGraphics::Vec2D &firstPosition);
|
||||
*/
|
||||
void setFirstPosition(const nsGraphics::Vec2D &firstPosition);
|
||||
|
||||
/**
|
||||
* @brief Récupère la position du second sommet du triangle
|
||||
* @brief Récupère la Position du second sommet du triangle
|
||||
* @fn const nsGraphics::Vec2D& getSecondPosition() const;
|
||||
*/
|
||||
const nsGraphics::Vec2D& getSecondPosition() const;
|
||||
|
||||
/**
|
||||
* @brief Définit la nouvelle position du second sommet du triangle
|
||||
* @param[in] secondPosition : Nouvelle position du second sommet
|
||||
* @brief Définit la nouvelle Position du second sommet du triangle
|
||||
* @param[in] secondPosition : Nouvelle Position du second sommet
|
||||
* @fn void setSecondPosition(const nsGraphics::Vec2D &secondPosition);
|
||||
*/
|
||||
void setSecondPosition(const nsGraphics::Vec2D &secondPosition);
|
||||
|
||||
/**
|
||||
* @brief Récupère la position du troisième sommet du triangle
|
||||
* @brief Récupère la Position du troisième sommet du triangle
|
||||
* @fn const nsGraphics::Vec2D& getThirdPosition() const;
|
||||
*/
|
||||
const nsGraphics::Vec2D& getThirdPosition() const;
|
||||
|
||||
/**
|
||||
* @brief Définit la nouvelle position du troisième sommet du triangle
|
||||
* @param[in] thirdPosition : Nouvelle position du troisième sommet
|
||||
* @brief Définit la nouvelle Position du troisième sommet du triangle
|
||||
* @param[in] thirdPosition : Nouvelle Position du troisième sommet
|
||||
* @fn void setThirdPosition(const nsGraphics::Vec2D &thirdPosition);
|
||||
*/
|
||||
void setThirdPosition(const nsGraphics::Vec2D &thirdPosition);
|
||||
|
@ -70,7 +70,7 @@ void ConfigBuilder::readConfig() {
|
||||
collectedData.grid.resize(S);
|
||||
for(unsigned i=0;i<S;++i){
|
||||
collectedData.grid[i].resize(3);
|
||||
for(unsigned j=0;j<3;++j)collectedData.grid[i][j] = j;
|
||||
for(unsigned j=0;j<3;++j)collectedData.grid[i][j] = static_cast<Invader>(j);
|
||||
}
|
||||
|
||||
// players
|
||||
|
@ -14,17 +14,17 @@ Game::Game() : WININIT, pm(window) {
|
||||
|
||||
void Game::managedGames() {
|
||||
|
||||
playMode = NONE;
|
||||
playMode = PlayMode::NONE;
|
||||
|
||||
while(playMode!=EXIT){
|
||||
if(playMode==NONE){
|
||||
while(playMode!=PlayMode::EXIT){
|
||||
if(playMode==PlayMode::NONE){
|
||||
playMode = initialMenuHandler();
|
||||
}else{
|
||||
playGame(); // will read the playMode
|
||||
cout << players[0].score << endl; // will remove
|
||||
cout << "END OF GAME" << endl;
|
||||
break; // TODO remove
|
||||
if(!deathMenuHandler()) playMode = NONE; // back to the main menu
|
||||
if(!deathMenuHandler()) playMode = PlayMode::NONE; // back to the main menu
|
||||
|
||||
}
|
||||
}
|
||||
@ -58,15 +58,6 @@ bool Game::deathMenuHandler(){
|
||||
return pm.showDeathMenu();
|
||||
}
|
||||
|
||||
bool Game::invadersTouchPlayer(){
|
||||
for(invadersColumn& line : grid){
|
||||
if(basePos.getY()+ line.size() * confData.invadersSize >= pm.getScreenHeight() - PLAYER_HEIGHT){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Plays the game, and returns once the game is finished
|
||||
*
|
||||
@ -78,21 +69,21 @@ WinValue Game::playGame(){ // returns when game is finished
|
||||
grid = confData.grid; // will copy the vector
|
||||
|
||||
|
||||
if(playMode==SINGLE){
|
||||
if(playMode==PlayMode::SINGLE){
|
||||
players.resize(1);
|
||||
}else{
|
||||
players.resize(2);
|
||||
// mirror the start X position for the other
|
||||
// mirror the start X Position for the other
|
||||
players[1].x = pm.getScreenWidth() - confData.startXPosition - confData.playersWidth;
|
||||
}
|
||||
players[0].x = confData.startXPosition;
|
||||
|
||||
basePos = position(0,0);
|
||||
basePos = Position(0, 0);
|
||||
// GAMELOOP
|
||||
|
||||
#define FPS 1000
|
||||
#define MAX_FPS 1000
|
||||
while(window.isOpen()){
|
||||
auto targetTime = chrono::high_resolution_clock::now() + chrono::duration<double, ratio<1, FPS>>(1);
|
||||
auto targetTime = chrono::high_resolution_clock::now() + chrono::duration<double, ratio<1, MAX_FPS>>(1);
|
||||
|
||||
pm.startFrame();
|
||||
|
||||
@ -104,8 +95,8 @@ WinValue Game::playGame(){ // returns when game is finished
|
||||
moveTorpedos();
|
||||
remCollidingProjectiles();
|
||||
|
||||
if(checkMissilesAndPlayers())return INVADERS;
|
||||
if(checkTorpedosAndInvaders())return PLAYERS;
|
||||
if(checkMissilesAndPlayers())return WinValue::INVADERS;
|
||||
if(checkTorpedosAndInvaders())return WinValue::PLAYERS;
|
||||
|
||||
display();
|
||||
|
||||
@ -128,15 +119,15 @@ void Game::display() {
|
||||
basePos.getY() + j * confData.invadersSize + j * confData.invadersDistance
|
||||
);
|
||||
switch(grid[i][j]){
|
||||
case 0:{
|
||||
case Invader::TypeA:{
|
||||
pm.drawInvader1(vec, confData.invadersSize);
|
||||
break;
|
||||
}
|
||||
case 1:{
|
||||
case Invader::TypeB:{
|
||||
pm.drawInvader2(vec, confData.invadersSize);
|
||||
break;
|
||||
}
|
||||
case 2:{
|
||||
case Invader::TypeC:{
|
||||
pm.drawInvader3(vec, confData.invadersSize);
|
||||
break;
|
||||
}
|
||||
@ -145,13 +136,13 @@ void Game::display() {
|
||||
}
|
||||
|
||||
for(missile& miss : missiles){
|
||||
pm.drawTorpedo(miss, confData.missilesWidth, confData.missilesColor);
|
||||
pm.drawMissile(miss, confData.missilesWidth, confData.missilesColor);
|
||||
}
|
||||
for(torpedo& tor : torpedos){
|
||||
pm.drawTorpedo(tor, confData.torpedosWidth, confData.torpedosColor);
|
||||
}
|
||||
|
||||
for(size_t i=0;i<players.size();++i){
|
||||
pm.drawPlayer(position(players[i].x, 0), confData.playersWidth, confData.playerDefs[i].color);
|
||||
pm.drawPlayer(Position(players[i].x, 0), confData.playersWidth, confData.playerDefs[i].color);
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
#include "game.h"
|
||||
|
||||
void Game::manageOnePlayer(unsigned id){
|
||||
#define ISPRESSED(ID, X) window.isPressed({confData.playerDefs[ID].keys.X, false})
|
||||
void Game::manageOnePlayer(unsigned id){
|
||||
if (ISPRESSED(id, left)){
|
||||
if(players[id].x < confData.playersSpeed) players[id].x = 0;
|
||||
else players[id].x -= confData.playersSpeed;
|
||||
@ -33,8 +33,36 @@ void Game::managePlayers(){
|
||||
* @return true if the invaders went down from one line (and we should check lower boundary), else false
|
||||
*/
|
||||
bool Game::manageInvaders(){
|
||||
// shoot
|
||||
if(fireCooldown==0){
|
||||
cout << "try" << endl;
|
||||
fireCooldown = confData.invadersFireCooldown+rand()%60;
|
||||
|
||||
// compute the number of valid columns for firing, so rand() can't pick an empty column to fire
|
||||
unsigned counter=0;
|
||||
for(InvadersColumn& col : grid){
|
||||
if(!col.empty())++counter;
|
||||
}
|
||||
|
||||
unsigned rd = (rand()%counter)+1;
|
||||
counter = 0;
|
||||
|
||||
for(size_t i=0;i<grid.size();++i){
|
||||
if(!grid[i].empty())++counter;
|
||||
if(counter==rd){
|
||||
// fire !
|
||||
missiles.push_back(basePos+Position(
|
||||
confData.invadersSize*i+confData.invadersDistance*(i+0.5),
|
||||
confData.invadersSize*(grid[i].size()-1)+confData.invadersDistance*(grid[i].size()-1)
|
||||
));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}else --fireCooldown;
|
||||
|
||||
// moving
|
||||
if(direction){ // go to the right
|
||||
int end = basePos.getX(); // start position
|
||||
int end = basePos.getX(); // start Position
|
||||
end+= grid.size() * confData.invadersSize; // add the invaders
|
||||
end+= (grid.size()-1) * confData.invadersDistance; // add the invadersDistance between invaders
|
||||
|
||||
@ -87,7 +115,7 @@ void Game::remCollidingProjectiles(){
|
||||
}
|
||||
++tor;
|
||||
}
|
||||
/* if it was colling, it was removed and his position is now replaced by the next.
|
||||
/* if it was colling, it was removed and his Position is now replaced by the next.
|
||||
* else, go to the next
|
||||
*/
|
||||
if(!wasColliding)++miss;
|
||||
@ -119,9 +147,9 @@ void Game::moveTorpedos() {
|
||||
bool Game::checkMissilesAndPlayers() {
|
||||
auto miss_ite = missiles.begin();
|
||||
while(miss_ite!=missiles.end()){
|
||||
bool wasColliding = false;
|
||||
if(miss_ite->getY()<=PLAYER_HEIGHT){ // check collision on Y
|
||||
// now check collision on X (with both players)
|
||||
bool wasColliding = false;
|
||||
for(Player& p : players){
|
||||
if(areLinesColliding(
|
||||
miss_ite->getX(), miss_ite->getX() + confData.missilesWidth,
|
||||
@ -131,9 +159,9 @@ bool Game::checkMissilesAndPlayers() {
|
||||
// do not break, the second player also deserves to be hit
|
||||
}
|
||||
}
|
||||
if(wasColliding)missiles.erase(miss_ite);
|
||||
else ++miss_ite;
|
||||
}
|
||||
if(wasColliding)missiles.erase(miss_ite);
|
||||
else ++miss_ite;
|
||||
}
|
||||
return false; // TODO manage death animation
|
||||
}
|
||||
@ -143,8 +171,8 @@ bool Game::checkTorpedosAndInvaders() {
|
||||
while(tor_ite!=torpedos.end()){
|
||||
unsigned i=0;
|
||||
for(;i<grid.size();++i){
|
||||
// calculate top-left position of invader
|
||||
position pos = basePos+position(
|
||||
// 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)
|
||||
);
|
||||
@ -167,4 +195,13 @@ bool Game::checkTorpedosAndInvaders() {
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool Game::invadersTouchPlayer(){
|
||||
for(InvadersColumn& line : grid){
|
||||
if(basePos.getY() + line.size() * confData.invadersSize >= pm.getScreenHeight() - PLAYER_HEIGHT){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ using namespace std;
|
||||
|
||||
// TODO changer tout les unsigned par des size_t dans les boucles
|
||||
int main(){
|
||||
srand(time(NULL));
|
||||
Game g;
|
||||
g.managedGames();
|
||||
|
||||
|
@ -45,11 +45,11 @@ void PixelManager::drawPlayer(const nsGraphics::Vec2D& baseVector, unsigned widt
|
||||
}
|
||||
|
||||
void PixelManager::drawMissile(const nsGraphics::Vec2D& baseVector, unsigned width, const nsGraphics::RGBAcolor& color){
|
||||
window << nsShape::Rectangle(baseVector, baseVector+position(width, width*PROJ_LENGTH_FACTOR), color);
|
||||
window << nsShape::Rectangle(baseVector, baseVector + Position(width, width * PROJ_LENGTH_FACTOR), color);
|
||||
}
|
||||
|
||||
void PixelManager::drawTorpedo(const nsGraphics::Vec2D& baseVector, unsigned width, const nsGraphics::RGBAcolor& color){
|
||||
window << nsShape::Rectangle(baseVector, baseVector+position(width, width*PROJ_LENGTH_FACTOR), color);
|
||||
window << nsShape::Rectangle(baseVector, baseVector + Position(width, width * PROJ_LENGTH_FACTOR), color);
|
||||
}
|
||||
|
||||
void PixelManager::drawBackground(){
|
||||
|
@ -1,5 +1,5 @@
|
||||
#include "projectiles.h"
|
||||
|
||||
torpedo::torpedo(int x, int y, playerID owner) : position(x, y) {
|
||||
torpedo::torpedo(int x, int y, playerID owner) : Position(x, y) {
|
||||
this->owner = owner;
|
||||
}
|
||||
|
@ -3,4 +3,4 @@
|
||||
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
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user