26 cout <<
"\033[" << Coul <<
"m";
31 cout <<
"\033[H\033[2J";
37 Space[Pos.first][Pos.second] = Car;
52 cout << string (Space[0].size() + 2,
'-') << endl;
53 for (
const string & Line : Space)
56 for (
const char Cel : Line)
74 cout << string (Space[0].size() + 2,
'-') << endl;
81 for (
string & Line : Space)
85 for (
unsigned i (0); i < Obj[0].size (); ++i)
90 for (
unsigned i(0); i < Obj[2].size(); ++i)
91 Obj[2][i] = make_pair (Space.size () -1,
KBegMe +i);
98 for (
unsigned i (1); i < VPos.size(); ++i)
99 if (MaxPos.second < VPos[i].second)
106 for (
unsigned i (1); i < VPos.size(); ++i)
107 if (MaxPos.first < VPos[i].first)
115 for (
unsigned i (1); i < VPos.size(); ++i)
116 if (MinPos.second > VPos[i].second)
124 if (0 == MinPos.second)
return false;
134 if (Space.size() -1 == MaxPos.second)
return false;
158 read (STDIN_FILENO, &Move, 1);
168 Obj[3].push_back(Obj[2][rand () % Obj[2].size ()]);
200 Obj[1].push_back(Obj[0][rand () % Obj[0].size ()]);
207 for (
unsigned i (0); i < Objects.size (); ++i)
210 for (
unsigned j (0); j < StarShips.size (); )
212 if (Objects[i] == StarShips[j])
214 StarShips.erase (StarShips.begin () +j);
215 Objects.erase (Objects.begin () +i);
230 for (
unsigned i (0); i < Missiles.size (); )
234 for (; j < Torpedos.size (); ++j)
236 if (Missiles[i] != Torpedos[j])
continue;
238 Torpedos.erase (Torpedos.begin () +j);
239 Missiles.erase (Missiles.begin () +i);
243 if (j == Torpedos.size ()) ++i;
256 if (0 == Obj[0].size ())
return 2;
257 else if (0 == Obj[2].size() || Obj[0][0].first == Space.size()-1)
return 1;
264 for (
unsigned i (0); i < Missiles.size(); )
266 if (Missiles[i].first == Space.size())
267 Missiles.erase(Missiles.begin()+i);
274 for (
unsigned i (0); i < Torpedos.size(); )
276 if (
unsigned (-1) == Torpedos[i].first)
277 Torpedos.erase(Torpedos.begin()+i);
288 unsigned Direction (0);
289 unsigned WhatInvaderDo (0);
291 unsigned WhoIsToPlay (0);
292 while (1 != Vict && 2 != Vict)
329 ifstream ifs (FileName);
330 for (
string Line; getline (ifs, Line);)
331 cout << Line << endl;
338 struct termios tattr;
341 if (!isatty (STDIN_FILENO))
343 fprintf (stderr,
"Not a terminal.\n");
348 tcgetattr (STDIN_FILENO, &tattr);
349 tattr.c_lflag &= ~(ICANON|ECHO);
350 tattr.c_cc[VMIN] = 0;
351 tattr.c_cc[VTIME] = 3;
352 tcsetattr (STDIN_FILENO, TCSAFLUSH, &tattr);
const unsigned KRatioMeInvaders
Nombre de fois où c'est le tour du joueur pour un tour de l'envahisseur.
void ShowFile(const string &FileName)
Permet d'afficher le contenu d'un fichier à l'écran.
Fichier décrivant l'ensemble des signatures vers les fonctions utilisées dans le jeu.
void PutCVPosition(const CVPosition &VPos, char Car, CVString &Space)
Permet d'insérer le carcactère passé en second paramètre à toutes les positions souhaitées (1er param...
void Couleur(const string &Coul)
const unsigned KBegMe
Numéro de colonne où commence le joueur.
unsigned SpaceInvaders(void)
Fonction principale du jeu sans option.
std::pair< unsigned, unsigned > CPosition
Alias vers une coordonnée de la matrice. Le premier élément de la paire désigne une ordonnée (axe Y)...
std::vector< std::string > CVString
Alias vers le type de l'écran (l'espace, la matrice).
const unsigned KMySize
Nombre de caractères qui forment mon vaisseau.
void MoveUp(CVPosition &VPos)
Simule un déplacement haut en ajoutant une unité de déplacement à toutes les ordonnées des objets en ...
void MaxX(const CVPosition &VPos, CPosition &MaxPos)
Trouve le maximum d'un vecteur de CPosition de la coordonées en X (abscisse).
const std::string KMyColor(KVert)
Couleur liée à mes objets (vaisseaux et tropilles).
const char KMissile
Caractèrere formant le missile.
void ManageCollisions(CAObject &Obj)
Gère toutes les collisions du jeu.
const std::string KReset("0")
Alias remetant la couleur du texte du terminal à sa valeur par défaut.
void DisplaySpace(const CVString &Space)
Permet d'afficher l'espace de jeu.
void ClearScreen()
Fonction effaçant le contenu de l'écran.
int ppal(const string &Path)
Fichier décrivant l'ensemble des alias vers les types utilisés dans le jeu.
const char KLeft
Alias vers la touche servant à se déplacer à gauche.
void MaxY(const CVPosition &VPos, CPosition &MaxPos)
Trouve le maximum d'un vecteur de CPosition de la coordonées en Y (ordonnée).
bool MoveRight(const CVString &Space, CVPosition &VPos)
Simule un déplacement droit en ajoutant une unité de déplacement à toutes les abscisses des objets en...
const char KTorpedo
Caractèrere formant ma torpille.
const char KShoot
Alias vers la touche servant à lancer une torpille.
void CollisionBetweenObjectsAndShips(CVPosition &Objects, CVPosition &StarShips)
Gère les collisions entre les objets et les vaisseaux. Si une collision est détéctée (même coordonées...
const char KInsideInvader
Caractèrere formant l'envahisseur.
void ManageInvaders(const CVString &Space, CAObject &Obj, unsigned &Direction, unsigned &WhatInvaderDo)
ManageInvaders Simule le jeu de l'envahisseur.
std::vector< CPosition > CVPosition
Alias vers un vecteur de coordonnees.
bool MoveLeft(CVPosition &VPos)
Simule un déplacement gauche en retranchant une unité de déplacement à toutes les abscisses des objet...
const unsigned KMissileRatio
Nombre de fois où l'envahisseur tire un missile par rapport à son déplacement.
void MoveDown(CVPosition &VPos)
Simule un déplacement bas en ajoutant une unité de déplacement à toutes les ordonnées des objets en p...
void PutAllObjects(const CAObject &Obj, CVString &Space)
Vide l'espace de jeu, puis insère tous les objets du jeu.
const std::string KEmptyLine(KSizeLine, KEmpty)
Alias vers une ligne vide de l'esapce.
void MinX(const CVPosition &VPos, CPosition &MinPos)
Trouve le minimum d'un vecteur de CPosition de la coordonées en X (abscisse).
void DeleteMissiles(const CVString &Space, CVPosition &Missiles)
Supprime les missiles qui sortent de l'espace de jeu.
const char KRight
Alias vers la touche servant à se déplacer à droite.
void CollisionBetweenMissilesAndTorpedos(CVPosition &Missiles, CVPosition &Torpedos)
Gère les collisions (multiples) entre les missiles et les tropilles.
const unsigned KBegInvader
Numéro de colonne où commence l'envahisseur.
const char KInsideMe
Caractèrere formant mon vaisseau.
void DeleteTorpedos(CVPosition &Torpedos)
Supprime les tropilles qui sortent de l'espace de jeu.
void InitSpace(CVString &Space, CAObject &Obj)
Permet d'initialiser l'espace de jeu et de définir les coordonnées des objets à placer au lancement d...
void ManageMe(const CVString &Space, CAObject &Obj)
Simule le jeu du joueur. C'est ici que le joueur choisit ce qu'il fait. S'il décide de tirer...
unsigned Victory(const CVString &Space, const CAObject &Obj)
Teste si l'envahisseur ou si le joueur ont gagné.
void set_input_mode(void)
Permet d'activer la saisie à la volée. Utile pour gérer les déplacement du joueur sans appuyer sur la...
const unsigned KInvadersSize
Nombre de caractères qui forment l'envahisseur.
std::array< CVPosition, 4 > CAObject
Alias vers un tableau de 4 vecteurs de coordonnees.
const std::string KInvadersColor(KJaune)
Couleur de l'envahisseur.
Fichier décrivant l'ensemble des constantes utilisées dans le jeu.
const unsigned KSizeLine
Nombre de lignes de l'écran (de l'espace).