invaders now pew pew too (and did some refactoring)

This commit is contained in:
Thomas 2022-01-02 00:10:57 +01:00
parent bffc3bf04c
commit 306d557030
No known key found for this signature in database
GPG Key ID: E538821A6CDFDAD7
20 changed files with 181 additions and 143 deletions

View File

@ -9,7 +9,7 @@ typedef string configKey;
struct ConfigData { struct ConfigData {
invadersGrid grid; InvadersGrid grid;
unsigned startXPosition; unsigned startXPosition;
unsigned playersSpeed; unsigned playersSpeed;

View File

@ -18,8 +18,8 @@ private:
PixelManager pm; PixelManager pm;
ConfigData confData; ConfigData confData;
position basePos; Position basePos;
invadersGrid grid; InvadersGrid grid;
bool direction = true; bool direction = true;
vector<missile> missiles; vector<missile> missiles;
@ -28,11 +28,18 @@ private:
PlayMode playMode; PlayMode playMode;
vector<Player> players; vector<Player> players;
void managePlayers(); // invaders related variables
bool manageInvaders(); unsigned fireCooldown=120;
// basic methods
void display(); void display();
// collision thingies // managers
void managePlayers();
void manageOnePlayer(unsigned);
bool manageInvaders();
// collision things
void remCollidingProjectiles(); void remCollidingProjectiles();
void moveMissiles(); void moveMissiles();
void moveTorpedos(); void moveTorpedos();
@ -40,8 +47,6 @@ private:
bool checkTorpedosAndInvaders(); bool checkTorpedosAndInvaders();
bool invadersTouchPlayer(); bool invadersTouchPlayer();
void manageOnePlayer(unsigned);
public: public:
// in case someone wants to mess with the code, here's a minimal API, costs nothing to us // in case someone wants to mess with the code, here's a minimal API, costs nothing to us
Game(); Game();

View File

@ -1,7 +1,7 @@
#ifndef GUARD_PLAYMODE_H #ifndef GUARD_PLAYMODE_H
#define GUARD_PLAYMODE_H #define GUARD_PLAYMODE_H
enum PlayMode { enum class PlayMode {
NONE, NONE,
SINGLE, SINGLE,
TWO_LOCAL, TWO_LOCAL,

View File

@ -3,9 +3,9 @@
#include "utils.h" #include "utils.h"
typedef position missile; typedef Position missile;
class torpedo : public position { class torpedo : public Position {
public: public:
playerID owner; playerID owner;
torpedo(int x, int y, playerID owner); torpedo(int x, int y, playerID owner);

View File

@ -8,7 +8,7 @@
#define PLAYER_HEIGHT 100 #define PLAYER_HEIGHT 100
#define PROJ_LENGTH_FACTOR 2 #define PROJ_LENGTH_FACTOR 2
enum WinValue{ enum class WinValue{
NOBODY, // should never be used NOBODY, // should never be used
PLAYERS, PLAYERS,
INVADERS, INVADERS,
@ -16,13 +16,17 @@ enum WinValue{
using namespace std; using namespace std;
typedef unsigned Invader; enum class Invader {
typedef vector<Invader> invadersColumn; TypeA,
typedef vector<invadersColumn> invadersGrid; TypeB,
typedef nsGraphics::Vec2D position; TypeC,
};
typedef vector<Invader> InvadersColumn;
typedef vector<InvadersColumn> InvadersGrid;
typedef nsGraphics::Vec2D Position;
typedef unsigned playerID; 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); bool areLinesColliding(unsigned start1, unsigned end1, unsigned start2, unsigned end2);
#endif #endif

View File

@ -37,7 +37,7 @@ public:
/** /**
* @brief Constructeur de recopie pour la classe Vec2D * @brief Constructeur de recopie pour la classe Vec2D
* @param[in] pos : Vec2D a copier * @param[in] pos : Vec2D a copier
* @fn Vec2D(const Vec2D& position); * @fn Vec2D(const Vec2D& Position);
*/ */
Vec2D(const Vec2D& pos); Vec2D(const Vec2D& pos);
@ -56,21 +56,21 @@ public:
/** /**
* @brief Opérateur d'addition * @brief Opérateur d'addition
* @param[in] pos : Vecteur a additionner * @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; Vec2D operator+(const Vec2D& pos) const;
/** /**
* @brief Opérateur de soustraction * @brief Opérateur de soustraction
* @param[in] pos : Vecteur a soustraire * @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; Vec2D operator-(const Vec2D& pos) const;
/** /**
* @brief Opérateur de multiplication * @brief Opérateur de multiplication
* @param[in] pos : Vecteur a multiplier * @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; Vec2D operator*(const Vec2D& pos) const;
@ -84,7 +84,7 @@ public:
/** /**
* @brief Opérateur de division * @brief Opérateur de division
* @param[in] pos : Vecteur a diviser * @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; Vec2D operator/(const Vec2D& pos) const;
@ -98,21 +98,21 @@ public:
/** /**
* @brief Opérateur modulo * @brief Opérateur modulo
* @param[in] pos : Vecteur avec lequel faire un 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; Vec2D operator%(const Vec2D& pos) const;
/** /**
* @brief Opérateur d'égalité * @brief Opérateur d'égalité
* @param[in] pos : Vecteur avec lequel vérifier l'é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; bool operator==(const Vec2D& pos) const;
/** /**
* @brief Opérateur d'inégalité * @brief Opérateur d'inégalité
* @param[in] pos : Vecteur avec lequel vérifier l'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; bool operator!=(const Vec2D& pos) const;
@ -120,7 +120,7 @@ public:
* @brief Opérateur de stricte infériorité * @brief Opérateur de stricte infériorité
* (Vérifie la stricte infériorité de la magnitude des deux vecteurs) * (Vérifie la stricte infériorité de la magnitude des deux vecteurs)
* @param[in] pos : Vecteur avec lequel vérifier la stricte infériorité * @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; bool operator<(const Vec2D& pos) const;
@ -128,7 +128,7 @@ public:
* @brief Opérateur de stricte supériorité * @brief Opérateur de stricte supériorité
* (Vérifie la stricte supériorité de la magnitude des deux vecteurs) * (Vérifie la stricte supériorité de la magnitude des deux vecteurs)
* @param[in] pos : Vecteur avec lequel vérifier la stricte supériorité * @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; bool operator>(const Vec2D& pos) const;
@ -136,7 +136,7 @@ public:
* @brief Opérateur d'infériorité * @brief Opérateur d'infériorité
* (Vérifie l'infériorité de la magnitude des deux vecteurs) * (Vérifie l'infériorité de la magnitude des deux vecteurs)
* @param[in] pos : Vecteur avec lequel vérifier l'infériorité * @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; bool operator<=(const Vec2D& pos) const;
@ -144,49 +144,49 @@ public:
* @brief Opérateur de supériorité * @brief Opérateur de supériorité
* (Vérifie la supériorité de la magnitude des deux vecteurs) * (Vérifie la supériorité de la magnitude des deux vecteurs)
* @param[in] pos : Vecteur avec lequel vérifier la supériorité * @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; bool operator>=(const Vec2D& pos) const;
/** /**
* @brief Opérateur d'assignement * @brief Opérateur d'assignement
* @param[in] pos : Vecteur source * @param[in] pos : Vecteur source
* @fn Vec2D& operator=(const Vec2D& position); * @fn Vec2D& operator=(const Vec2D& Position);
*/ */
Vec2D& operator=(const Vec2D& pos); Vec2D& operator=(const Vec2D& pos);
/** /**
* @brief Opérateur d'addition avec assignement * @brief Opérateur d'addition avec assignement
* @param[in] pos : Vecteur avec lequel additionner le vecteur actuel * @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); Vec2D& operator+=(const Vec2D& pos);
/** /**
* @brief Opérateur de soustraction avec assignement * @brief Opérateur de soustraction avec assignement
* @param[in] pos : Vecteur avec lequel soustraire le vecteur actuel * @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); Vec2D& operator-=(const Vec2D& pos);
/** /**
* @brief Opérateur de multiplication avec assignement * @brief Opérateur de multiplication avec assignement
* @param[in] pos : Vecteur avec lequel multiplier le vecteur actuel * @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); Vec2D& operator*=(const Vec2D& pos);
/** /**
* @brief Opérateur de division avec assignement * @brief Opérateur de division avec assignement
* @param[in] pos : Vecteur avec lequel diviser le vecteur actuel * @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); Vec2D& operator/=(const Vec2D& pos);
/** /**
* @brief Opérateur modulo avec assignement * @brief Opérateur modulo avec assignement
* @param[in] pos : Vecteur avec lequel faire un modulo sur le vecteur actuel * @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); Vec2D& operator%=(const Vec2D& pos);
@ -222,29 +222,29 @@ public:
double computeMagnitude() const; 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 * @return Une référence constante vers m_x
* @fn int getX() const; * @fn int getX() const;
*/ */
int getX() const; int getX() const;
/** /**
* @brief Définit la nouvelle position X (abscisse) * @brief Définit la nouvelle Position X (abscisse)
* @param[in] x : Nouvelle position X * @param[in] x : Nouvelle Position X
* @fn void setX(int x); * @fn void setX(int x);
*/ */
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 * @return Une référence constante vers m_y
* @fn int getY() const; * @fn int getY() const;
*/ */
int getY() const; int getY() const;
/** /**
* @brief Définit la nouvelle position Y (ordonnée) * @brief Définit la nouvelle Position Y (ordonnée)
* @param[in] y : Nouvelle position Y * @param[in] y : Nouvelle Position Y
* @fn void setY(int y); * @fn void setY(int y);
*/ */
void setY(int y); void setY(int y);

View File

@ -32,14 +32,14 @@ public:
* @brief TransitionIds : Liste de toutes les transitions que cet élément peut exécuter * @brief TransitionIds : Liste de toutes les transitions que cet élément peut exécuter
*/ */
enum TransitionIds { 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 * @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] filename : Chemin d'accès vers le fichier image
* @param[in] position : Position du sprite * @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()); 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] pixelData : Vecteur contenant des données sur les pixels
* @param[in] rowSize : Nombre de pixels par ligne * @param[in] rowSize : Nombre de pixels par ligne
* @param[in] position : Position du sprite * @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()); 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; 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 * @return Une référence const vers m_position
* @fn const nsGraphics::Vec2D& getPosition() const; * @fn const nsGraphics::Vec2D& getPosition() const;
*/ */
const nsGraphics::Vec2D& getPosition() const; const nsGraphics::Vec2D& getPosition() const;
/** /**
* @brief Définit la nouvelle position du sprite * @brief Définit la nouvelle Position du sprite
* @param[in] position : Nouvelle position * @param[in] position : Nouvelle Position
* @fn void setPosition(const nsGraphics::Vec2D &position); * @fn void setPosition(const nsGraphics::Vec2D &Position);
*/ */
void setPosition(const nsGraphics::Vec2D& position); void setPosition(const nsGraphics::Vec2D& position);

View File

@ -36,7 +36,7 @@ public:
enum TransitionIds { enum TransitionIds {
TRANSITION_COLOR_RGB, /**< Transition pour la couleur RGB */ TRANSITION_COLOR_RGB, /**< Transition pour la couleur RGB */
TRANSITION_COLOR_ALPHA, /**< Transition pour la transparence */ 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] textFont : Police du texte (8x13 Bitmap par défaut)
* @param[in] horizontalAlignment : Alignement horizontal du texte (Alignement a gauche 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) * @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 nsGraphics::RGBAcolor &textColor, const GlutFont::GlutFonts &textFont = GlutFont::GlutFonts::BITMAP_8_BY_13,
const HorizontalAlignment &horizontalAlignment = ALIGNH_LEFT, const HorizontalAlignment &horizontalAlignment = ALIGNH_LEFT,
const VerticalAlignment &verticalAlignment = ALIGNV_BOTTOM); const VerticalAlignment &verticalAlignment = ALIGNV_BOTTOM);
@ -95,15 +95,15 @@ public:
int computeHeight() const; int computeHeight() const;
/** /**
* @brief Calcule la position visible du texte, calculée avec l'alignement vertical et horizontal * @brief Calcule la Position visible du texte, calculée avec l'alignement vertical et horizontal
* @return La position visible, en haut a gauche * @return La Position visible, en haut a gauche
* @fn nsGraphics::Vec2D computeVisiblePosition() const; * @fn nsGraphics::Vec2D computeVisiblePosition() const;
*/ */
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 * @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 * @return La Position visible, en bas a droite
* @fn nsGraphics::Vec2D computeVisibleEndPosition() const; * @fn nsGraphics::Vec2D computeVisibleEndPosition() const;
*/ */
nsGraphics::Vec2D computeVisibleEndPosition() const; nsGraphics::Vec2D computeVisibleEndPosition() const;
@ -123,15 +123,15 @@ public:
void setContent(const std::string &content); 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; * @fn const nsGraphics::Vec2D& getPosition() const;
*/ */
const nsGraphics::Vec2D& getPosition() const; const nsGraphics::Vec2D& getPosition() const;
/** /**
* @brief Définit la nouvelle position du texte * @brief Définit la nouvelle Position du texte
* @param[in] position : Nouvelle position * @param[in] position : Nouvelle Position
* @fn void setPosition(const nsGraphics::Vec2D &position); * @fn void setPosition(const nsGraphics::Vec2D &Position);
*/ */
void setPosition(const nsGraphics::Vec2D &position); void setPosition(const nsGraphics::Vec2D &position);

View File

@ -154,14 +154,14 @@ public:
void setWindowSize(const nsGraphics::Vec2D& windowSize); 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; * @fn nsGraphics::Vec2D getWindowPosition() const;
*/ */
nsGraphics::Vec2D getWindowPosition() const; nsGraphics::Vec2D getWindowPosition() const;
/** /**
* @brief Règle la position de la fenêtre * @brief Règle la Position de la fenêtre
* @param[in] windowPosition : Nouvelle position * @param[in] windowPosition : Nouvelle Position
* @fn void setWindowPosition(const nsGraphics::Vec2D &windowPosition); * @fn void setWindowPosition(const nsGraphics::Vec2D &windowPosition);
*/ */
void setWindowPosition(const nsGraphics::Vec2D &windowPosition); void setWindowPosition(const nsGraphics::Vec2D &windowPosition);

View File

@ -34,7 +34,7 @@ public:
TRANSITION_FILL_COLOR_ALPHA, /**< Transition pour la transparence de remplissage */ TRANSITION_FILL_COLOR_ALPHA, /**< Transition pour la transparence de remplissage */
TRANSITION_BORDER_COLOR_RGB, /**< Transition pour la couleur de bord */ TRANSITION_BORDER_COLOR_RGB, /**< Transition pour la couleur de bord */
TRANSITION_BORDER_COLOR_ALPHA, /**< Transition pour la transparence 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 */ TRANSITION_RADIUS, /**< Transition pour le rayon */
}; };
@ -44,7 +44,7 @@ public:
* @param[in] radius : Rayon du cercle * @param[in] radius : Rayon du cercle
* @param[in] fillColor : Couleur de remplissage * @param[in] fillColor : Couleur de remplissage
* @param[in] borderColor : Couleur de bord * @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); 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 * @brief Opérateur de décalage
* @param[in] position : Position a additionner * @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; Circle operator+(const nsGraphics::Vec2D& getPosition) const;
/** /**
* @brief Opérateur de réduction * @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 * @fn Circle operator*(const float& f) const
*/ */
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; * @fn const nsGraphics::Vec2D& getPosition() const;
*/ */
const nsGraphics::Vec2D& getPosition() const; const nsGraphics::Vec2D& getPosition() const;
/** /**
* @brief Définit la nouvelle position du cercle * @brief Définit la nouvelle Position du cercle
* @param[in] position : Nouvelle position * @param[in] position : Nouvelle Position
* @fn void setPosition(const nsGraphics::Vec2D &position); * @fn void setPosition(const nsGraphics::Vec2D &Position);
*/ */
void setPosition(const nsGraphics::Vec2D &position); void setPosition(const nsGraphics::Vec2D &position);

View File

@ -34,8 +34,8 @@ public:
TRANSITION_FILL_COLOR_ALPHA, /**< Transition pour la transparence de remplissage */ TRANSITION_FILL_COLOR_ALPHA, /**< Transition pour la transparence de remplissage */
TRANSITION_BORDER_COLOR_RGB, /**< Transition pour la couleur de bord */ TRANSITION_BORDER_COLOR_RGB, /**< Transition pour la couleur de bord */
TRANSITION_BORDER_COLOR_ALPHA, /**< Transition pour la transparence de bord */ TRANSITION_BORDER_COLOR_ALPHA, /**< Transition pour la transparence de bord */
TRANSITION_FIRST_POSITION, /**< Transition pour la position du premier sommet */ TRANSITION_FIRST_POSITION, /**< Transition pour la Position du premier sommet */
TRANSITION_SECOND_POSITION, /**< Transition pour la position du second sommet */ TRANSITION_SECOND_POSITION, /**< Transition pour la Position du second sommet */
TRANSITION_LINE_WIDTH, /**< Transition pour l'épaisseur de la ligne */ TRANSITION_LINE_WIDTH, /**< Transition pour l'épaisseur de la ligne */
}; };
@ -63,39 +63,39 @@ public:
/** /**
* @brief Opérateur de décalage * @brief Opérateur de décalage
* @param[in] position : Position a additionner * @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; Line operator+(const nsGraphics::Vec2D& position) const;
/** /**
* @brief Opérateur de réduction * @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 * @fn Line operator*(const float& f) const
*/ */
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; * @fn const nsGraphics::Vec2D& getFirstPosition() const;
*/ */
const nsGraphics::Vec2D& getFirstPosition() const; const nsGraphics::Vec2D& getFirstPosition() const;
/** /**
* @brief Définit la nouvelle position du premier sommet de la ligne * @brief Définit la nouvelle Position du premier sommet de la ligne
* @param[in] firstPosition : Nouvelle position du premier sommet * @param[in] firstPosition : Nouvelle Position du premier sommet
* @fn void setFirstPosition(const nsGraphics::Vec2D &firstPosition); * @fn void setFirstPosition(const nsGraphics::Vec2D &firstPosition);
*/ */
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; * @fn const nsGraphics::Vec2D& getSecondPosition() const;
*/ */
const nsGraphics::Vec2D& getSecondPosition() const; const nsGraphics::Vec2D& getSecondPosition() const;
/** /**
* @brief Définit la nouvelle position du second sommet de la ligne * @brief Définit la nouvelle Position du second sommet de la ligne
* @param[in] secondPosition : Nouvelle position du second sommet * @param[in] secondPosition : Nouvelle Position du second sommet
* @fn void setSecondPosition(const nsGraphics::Vec2D &secondPosition); * @fn void setSecondPosition(const nsGraphics::Vec2D &secondPosition);
*/ */
void setSecondPosition(const nsGraphics::Vec2D &secondPosition); void setSecondPosition(const nsGraphics::Vec2D &secondPosition);

View File

@ -34,8 +34,8 @@ public:
TRANSITION_FILL_COLOR_ALPHA, /**< Transition pour la transparence de remplissage */ TRANSITION_FILL_COLOR_ALPHA, /**< Transition pour la transparence de remplissage */
TRANSITION_BORDER_COLOR_RGB, /**< Transition pour la couleur de bord */ TRANSITION_BORDER_COLOR_RGB, /**< Transition pour la couleur de bord */
TRANSITION_BORDER_COLOR_ALPHA, /**< Transition pour la transparence de bord */ TRANSITION_BORDER_COLOR_ALPHA, /**< Transition pour la transparence de bord */
TRANSITION_FIRST_POSITION, /**< Transition pour la position du coin haut-gauche */ TRANSITION_FIRST_POSITION, /**< Transition pour la Position du coin haut-gauche */
TRANSITION_SECOND_POSITION, /**< Transition pour la position du coin bas-droit */ TRANSITION_SECOND_POSITION, /**< Transition pour la Position du coin bas-droit */
}; };
/** /**
@ -57,7 +57,7 @@ public:
* @param[in] height : Hauteur du rectangle * @param[in] height : Hauteur du rectangle
* @param[in] fillColor : Couleur de remplissage * @param[in] fillColor : Couleur de remplissage
* @param[in] borderColor : Couleur de bord * @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); const nsGraphics::RGBAcolor& borderColor = nsGraphics::KTransparent);
*/ */
Rectangle(const nsGraphics::Vec2D& position, const unsigned& width, const unsigned& height, const nsGraphics::RGBAcolor& fillColor, 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 * @brief Opérateur de décalage
* @param[in] position : Position a additionner * @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; Rectangle operator+(const nsGraphics::Vec2D& position) const;
/** /**
* @brief Opérateur de réduction * @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 * @fn Rectangle operator*(const float& f) const
*/ */
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; * @fn const nsGraphics::Vec2D& getFirstPosition() const;
*/ */
const nsGraphics::Vec2D& getFirstPosition() const; const nsGraphics::Vec2D& getFirstPosition() const;
/** /**
* @brief Définit la nouvelle position du coin haut-gauche du rectangle * @brief Définit la nouvelle Position du coin haut-gauche du rectangle
* @param[in] firstPosition : Nouvelle position du coin haut-gauche * @param[in] firstPosition : Nouvelle Position du coin haut-gauche
* @fn void setFirstPosition(const nsGraphics::Vec2D &firstPosition); * @fn void setFirstPosition(const nsGraphics::Vec2D &firstPosition);
*/ */
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; * @fn const nsGraphics::Vec2D& getSecondPosition() const;
*/ */
const nsGraphics::Vec2D& getSecondPosition() const; const nsGraphics::Vec2D& getSecondPosition() const;
/** /**
* @brief Définit la nouvelle position du coin bas-droit du rectangle * @brief Définit la nouvelle Position du coin bas-droit du rectangle
* @param[in] secondPosition : Nouvelle position du coin bas-droit * @param[in] secondPosition : Nouvelle Position du coin bas-droit
* @fn void setSecondPosition(const nsGraphics::Vec2D &secondPosition); * @fn void setSecondPosition(const nsGraphics::Vec2D &secondPosition);
*/ */
void setSecondPosition(const nsGraphics::Vec2D &secondPosition); void setSecondPosition(const nsGraphics::Vec2D &secondPosition);

View File

@ -34,9 +34,9 @@ public:
TRANSITION_FILL_COLOR_ALPHA, /**< Transition pour la transparence de remplissage */ TRANSITION_FILL_COLOR_ALPHA, /**< Transition pour la transparence de remplissage */
TRANSITION_BORDER_COLOR_RGB, /**< Transition pour la couleur de bord */ TRANSITION_BORDER_COLOR_RGB, /**< Transition pour la couleur de bord */
TRANSITION_BORDER_COLOR_ALPHA, /**< Transition pour la transparence de bord */ TRANSITION_BORDER_COLOR_ALPHA, /**< Transition pour la transparence de bord */
TRANSITION_FIRST_POSITION, /**< Transition pour la position du premier sommet */ TRANSITION_FIRST_POSITION, /**< Transition pour la Position du premier sommet */
TRANSITION_SECOND_POSITION, /**< Transition pour la position du second sommet */ TRANSITION_SECOND_POSITION, /**< Transition pour la Position du second sommet */
TRANSITION_THIRD_POSITION, /**< Transition pour la position du troisième sommet */ TRANSITION_THIRD_POSITION, /**< Transition pour la Position du troisième sommet */
}; };
/** /**
@ -66,52 +66,52 @@ public:
/** /**
* @brief Opérateur de décalage * @brief Opérateur de décalage
* @param[in] position : Position a additionner * @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; Triangle operator+(const nsGraphics::Vec2D& position) const;
/** /**
* @brief Opérateur de réduction * @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 * @fn Triangle operator*(const float& f) const
*/ */
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; * @fn const nsGraphics::Vec2D& getFirstPosition() const;
*/ */
const nsGraphics::Vec2D& getFirstPosition() const; const nsGraphics::Vec2D& getFirstPosition() const;
/** /**
* @brief Définit la nouvelle position du premier sommet du triangle * @brief Définit la nouvelle Position du premier sommet du triangle
* @param[in] firstPosition : Nouvelle position du premier sommet * @param[in] firstPosition : Nouvelle Position du premier sommet
* @fn void setFirstPosition(const nsGraphics::Vec2D &firstPosition); * @fn void setFirstPosition(const nsGraphics::Vec2D &firstPosition);
*/ */
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; * @fn const nsGraphics::Vec2D& getSecondPosition() const;
*/ */
const nsGraphics::Vec2D& getSecondPosition() const; const nsGraphics::Vec2D& getSecondPosition() const;
/** /**
* @brief Définit la nouvelle position du second sommet du triangle * @brief Définit la nouvelle Position du second sommet du triangle
* @param[in] secondPosition : Nouvelle position du second sommet * @param[in] secondPosition : Nouvelle Position du second sommet
* @fn void setSecondPosition(const nsGraphics::Vec2D &secondPosition); * @fn void setSecondPosition(const nsGraphics::Vec2D &secondPosition);
*/ */
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; * @fn const nsGraphics::Vec2D& getThirdPosition() const;
*/ */
const nsGraphics::Vec2D& getThirdPosition() const; const nsGraphics::Vec2D& getThirdPosition() const;
/** /**
* @brief Définit la nouvelle position du troisième sommet du triangle * @brief Définit la nouvelle Position du troisième sommet du triangle
* @param[in] thirdPosition : Nouvelle position du troisième sommet * @param[in] thirdPosition : Nouvelle Position du troisième sommet
* @fn void setThirdPosition(const nsGraphics::Vec2D &thirdPosition); * @fn void setThirdPosition(const nsGraphics::Vec2D &thirdPosition);
*/ */
void setThirdPosition(const nsGraphics::Vec2D &thirdPosition); void setThirdPosition(const nsGraphics::Vec2D &thirdPosition);

View File

@ -70,7 +70,7 @@ void ConfigBuilder::readConfig() {
collectedData.grid.resize(S); collectedData.grid.resize(S);
for(unsigned i=0;i<S;++i){ for(unsigned i=0;i<S;++i){
collectedData.grid[i].resize(3); 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 // players

View File

@ -14,17 +14,17 @@ Game::Game() : WININIT, pm(window) {
void Game::managedGames() { void Game::managedGames() {
playMode = NONE; playMode = PlayMode::NONE;
while(playMode!=EXIT){ while(playMode!=PlayMode::EXIT){
if(playMode==NONE){ if(playMode==PlayMode::NONE){
playMode = initialMenuHandler(); playMode = initialMenuHandler();
}else{ }else{
playGame(); // will read the playMode playGame(); // will read the playMode
cout << players[0].score << endl; // will remove cout << players[0].score << endl; // will remove
cout << "END OF GAME" << endl; cout << "END OF GAME" << endl;
break; // TODO remove 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(); 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 * 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 grid = confData.grid; // will copy the vector
if(playMode==SINGLE){ if(playMode==PlayMode::SINGLE){
players.resize(1); players.resize(1);
}else{ }else{
players.resize(2); 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[1].x = pm.getScreenWidth() - confData.startXPosition - confData.playersWidth;
} }
players[0].x = confData.startXPosition; players[0].x = confData.startXPosition;
basePos = position(0,0); basePos = Position(0, 0);
// GAMELOOP // GAMELOOP
#define FPS 1000 #define MAX_FPS 1000
while(window.isOpen()){ 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(); pm.startFrame();
@ -104,8 +95,8 @@ WinValue Game::playGame(){ // returns when game is finished
moveTorpedos(); moveTorpedos();
remCollidingProjectiles(); remCollidingProjectiles();
if(checkMissilesAndPlayers())return INVADERS; if(checkMissilesAndPlayers())return WinValue::INVADERS;
if(checkTorpedosAndInvaders())return PLAYERS; if(checkTorpedosAndInvaders())return WinValue::PLAYERS;
display(); display();
@ -128,15 +119,15 @@ void Game::display() {
basePos.getY() + j * confData.invadersSize + j * confData.invadersDistance basePos.getY() + j * confData.invadersSize + j * confData.invadersDistance
); );
switch(grid[i][j]){ switch(grid[i][j]){
case 0:{ case Invader::TypeA:{
pm.drawInvader1(vec, confData.invadersSize); pm.drawInvader1(vec, confData.invadersSize);
break; break;
} }
case 1:{ case Invader::TypeB:{
pm.drawInvader2(vec, confData.invadersSize); pm.drawInvader2(vec, confData.invadersSize);
break; break;
} }
case 2:{ case Invader::TypeC:{
pm.drawInvader3(vec, confData.invadersSize); pm.drawInvader3(vec, confData.invadersSize);
break; break;
} }
@ -145,13 +136,13 @@ void Game::display() {
} }
for(missile& miss : missiles){ for(missile& miss : missiles){
pm.drawTorpedo(miss, confData.missilesWidth, confData.missilesColor); pm.drawMissile(miss, confData.missilesWidth, confData.missilesColor);
} }
for(torpedo& tor : torpedos){ for(torpedo& tor : torpedos){
pm.drawTorpedo(tor, confData.torpedosWidth, confData.torpedosColor); pm.drawTorpedo(tor, confData.torpedosWidth, confData.torpedosColor);
} }
for(size_t i=0;i<players.size();++i){ 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);
} }
} }

View File

@ -1,7 +1,7 @@
#include "game.h" #include "game.h"
void Game::manageOnePlayer(unsigned id){
#define ISPRESSED(ID, X) window.isPressed({confData.playerDefs[ID].keys.X, false}) #define ISPRESSED(ID, X) window.isPressed({confData.playerDefs[ID].keys.X, false})
void Game::manageOnePlayer(unsigned id){
if (ISPRESSED(id, left)){ if (ISPRESSED(id, left)){
if(players[id].x < confData.playersSpeed) players[id].x = 0; if(players[id].x < confData.playersSpeed) players[id].x = 0;
else players[id].x -= confData.playersSpeed; 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 * @return true if the invaders went down from one line (and we should check lower boundary), else false
*/ */
bool Game::manageInvaders(){ 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 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() * confData.invadersSize; // add the invaders
end+= (grid.size()-1) * confData.invadersDistance; // add the invadersDistance between invaders end+= (grid.size()-1) * confData.invadersDistance; // add the invadersDistance between invaders
@ -87,7 +115,7 @@ void Game::remCollidingProjectiles(){
} }
++tor; ++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 * else, go to the next
*/ */
if(!wasColliding)++miss; if(!wasColliding)++miss;
@ -119,9 +147,9 @@ void Game::moveTorpedos() {
bool Game::checkMissilesAndPlayers() { bool Game::checkMissilesAndPlayers() {
auto miss_ite = missiles.begin(); auto miss_ite = missiles.begin();
while(miss_ite!=missiles.end()){ while(miss_ite!=missiles.end()){
bool wasColliding = false;
if(miss_ite->getY()<=PLAYER_HEIGHT){ // check collision on Y if(miss_ite->getY()<=PLAYER_HEIGHT){ // check collision on Y
// now check collision on X (with both players) // now check collision on X (with both players)
bool wasColliding = false;
for(Player& p : players){ for(Player& p : players){
if(areLinesColliding( if(areLinesColliding(
miss_ite->getX(), miss_ite->getX() + confData.missilesWidth, 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 // 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 return false; // TODO manage death animation
} }
@ -143,8 +171,8 @@ bool Game::checkTorpedosAndInvaders() {
while(tor_ite!=torpedos.end()){ while(tor_ite!=torpedos.end()){
unsigned i=0; unsigned i=0;
for(;i<grid.size();++i){ for(;i<grid.size();++i){
// 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*(grid[i].size()-1)+confData.invadersDistance*(grid[i].size()-1)
); );
@ -167,4 +195,13 @@ bool Game::checkTorpedosAndInvaders() {
} }
} }
return false; return false;
} }
bool Game::invadersTouchPlayer(){
for(InvadersColumn& line : grid){
if(basePos.getY() + line.size() * confData.invadersSize >= pm.getScreenHeight() - PLAYER_HEIGHT){
return true;
}
}
return false;
}

View File

@ -4,6 +4,7 @@ using namespace std;
// TODO changer tout les unsigned par des size_t dans les boucles // TODO changer tout les unsigned par des size_t dans les boucles
int main(){ int main(){
srand(time(NULL));
Game g; Game g;
g.managedGames(); g.managedGames();

View File

@ -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){ 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){ 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(){ void PixelManager::drawBackground(){

View File

@ -1,5 +1,5 @@
#include "projectiles.h" #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; this->owner = owner;
} }

View File

@ -3,4 +3,4 @@
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
} }