22 #define classdef typedef 31 cout <<
"\033[" << Coul <<
"m";
37 cout <<
"\033[H\033[2J";
43 cout <<
"\033[" << Y <<
';' << X <<
"H";
49 for (
Size_t i (CurrentLine); i > 0; --i)
50 Space [i] = Space [i - 1];
58 return Space [Line][Column] != Who &&
65 char Projectile,
char Who)
67 if (
IsDead (Space, Line, Middle, Who))
72 Space [Line][Middle] =
79 Size_t & Beg,
bool & ToShoot,
88 Space [CurrentLine][Beg - 1] !=
KEmpty)))
93 if (
KTorpedo == Space [CurrentLine][j])
103 if (Space.size () - 1 <= CurrentLine)
108 string ToShift (Space [CurrentLine].
109 substr (Increment > 0 ? 0 : 1,
111 Space [CurrentLine] = (Increment > 0) ?
' ' + ToShift
118 return Shoot (Space, CurrentLine + 1,
128 char Form = Space [Line][Column];
130 Space [Line][j] == Form; ++j)
132 for (
Size_t j (Column); j-- > 0 &&
133 Space [Line][j] == Form; )
153 else if (
KMissile == Space [i - 1][j])
155 Space [i - 1][j] =
KEmpty;
171 if (i != KSizeSpace - 1)
179 else if (
KTorpedo == Space [i + 1][j])
181 Space [i + 1][j] =
KEmpty;
186 if (i > 0 &&
KMissile == Space[i - 1][j])
188 Space [i - 1][j] =
KEmpty;
196 else if (
KMissile == Space [i - 1][j])
198 Space [i - 1][j] =
KEmpty;
213 for (
string Line : Space)
215 cout << Line.size ();
216 for (
unsigned Col (0); Col < Line.size (); ++Col)
233 cout << Line.size ();
244 Size_t Line = Space.size () - 1;
245 string NewLastLine = Space [Line];
259 NewLastLine = Space [Line].substr (0, Pos) +
260 Space [Line].substr (Pos + 1) +
' ';
275 NewLastLine = Space [Line].substr (0, Pos - 1) +
' ' +
276 Space [Line].substr (Pos - 1,
284 Space [Line] = NewLastLine;
311 bool InvadersShoots =
false;
318 if (!
ManageMe (Space, PosMe, ILoose) && ! ILoose)
323 if (ILoose || IWin)
break;
325 if (ILoose || IWin)
break;
327 InvadersShoots, IWin, Space);
328 if (! IWin && ! ILoose)
331 if (ILoose || IWin)
break;
335 cout <<
"J'ai gagné" << endl;
339 cout <<
"J'ai perdu" << endl;
const unsigned KRatioMeInvaders
Nombre de fois où c'est le tour du joueur pour un tour de l'envahisseur.
bool IsDead(const CVString &Space, Size_t Line, Size_t Column, char Who)
Renvoie vrai si le belligérant meurt.
void DownShift(CVString &Space, Size_t CurrentLine)
Descend l'envahisseur d'une ligne dans l'espace.
bool ManageMe(CVString &Space, Size_t &Pos, bool &Lost)
Simule le jeu du joueur. C'est ici que le joueur choisit ce qu'il fait. S'il décide de tirer...
const unsigned KBegMe
Numéro de colonne où commence le joueur.
const std::string KGreen("32")
Alias mettant en vert la couleur du texte du terminal.
void GotoXY(unsigned X, unsigned Y)
const unsigned KMySize
Nombre de caractères qui forment mon vaisseau.
void Remove(CVString &Space, Size_t Line, Size_t Column)
enlève de l'espace le belligérant qui a perdu.
const unsigned KSizeSpace
Nombre de colonnes de l'écran (de l'espace).
const std::string KInvadersForm(KInvadersSize, KInsideInvader)
Alias forme d'un envahisseur.
const char KMissile
Caractèrere formant le missile.
const std::string KReset("0")
Alias remetant la couleur du texte du terminal à sa valeur par défaut.
bool Shoot(CVString &Space, Size_t Line, Size_t Middle, char Projectile, char Who)
Simule le tir d'un belligérant. Renvoie vrai si le belligérant a gagné (faux sinon).
void ClearScreen()
Fonction effaçant le contenu de l'écran.
const char KLeft
Alias vers la touche servant à se déplacer à gauche.
const std::string KMyForm(KMySize, KInsideMe)
Alias forme d'un joueur.
const char KEmpty
Alias vers une case vide à l'écran.
const char KTorpedo
Caractèrere formant ma torpille.
const char KShoot
Alias vers la touche servant à lancer une torpille.
const char KInsideInvader
Caractèrere formant l'envahisseur.
const std::string KYellow("33")
Alias mettant en jaune la couleur du texte du terminal.
void RecomputeSpace(CVString &Space, bool &Win, bool &Lost)
recalcule l'espace (déplacement des torpilles et des missiles) à chaque fois qu'un belligérant a joué...
const std::string KEmptyLine(KSizeLine, KEmpty)
Alias vers une ligne vide de l'esapce.
void DisplaySpace(const CVString &Space)
Permet d'afficher l'espace de jeu.
const char KRight
Alias vers la touche servant à se déplacer à droite.
const unsigned KBegInvader
Numéro de colonne où commence l'envahisseur.
const char KInsideMe
Caractèrere formant mon vaisseau.
const unsigned KInvadersSize
Nombre de caractères qui forment l'envahisseur.
void Colour(const string &Coul)
std::vector< std::string > CVString
Alias vers le type de l'écran (l'espace, la matrice).
bool ManageInvader(int &Increment, Size_t &CurrentLine, Size_t &Beg, bool &ToShoot, bool &Win, CVString &Space)
Simule le jeu de l'envahisseur. C'est ici que l'envahisseur joue. En bout de ligne l'envahisseur desc...
const Size_t KInvadersMiddle
Alias déplacement du milieu d'un envahisseur.
const unsigned KSizeLine
Nombre de lignes de l'écran (de l'espace).
CVString::size_type Size_t
Alias vers le type des indices d'un CVString.
void SpaceInvaders(void)
simule le jeux