Skip to content

Commit c516344

Browse files
author
GEILLER Valentin
committed
Ajout des classes d'affichage, jeu, et mise à jour des classes terrains et gestionnairesTeerrain. Ajout des testes unitaires
1 parent 7f34afe commit c516344

18 files changed

+3722
-47
lines changed

Diff for: Terrains.json

+47-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[
22
{
3-
"NbColonnes": 11,
4-
"NbLignes": 20,
3+
"NbColonnes": 20,
4+
"NbLignes": 11,
55
"Terrain": [
66
[
77
"X",
@@ -248,8 +248,8 @@
248248
]
249249
},
250250
{
251-
"NbColonnes": 11,
252-
"NbLignes": 20,
251+
"NbColonnes": 20,
252+
"NbLignes": 11,
253253
"Terrain": [
254254
[
255255
"X",
@@ -496,8 +496,8 @@
496496
]
497497
},
498498
{
499-
"NbColonnes": 11,
500-
"NbLignes": 20,
499+
"NbColonnes": 20,
500+
"NbLignes": 11,
501501
"Terrain": [
502502
[
503503
"X",
@@ -742,5 +742,46 @@
742742
"X"
743743
]
744744
]
745+
},
746+
{
747+
"NbColonnes": 5,
748+
"NbLignes": 5,
749+
"Terrain": [
750+
[
751+
"X",
752+
"X",
753+
"@",
754+
"X",
755+
"X"
756+
],
757+
[
758+
"X",
759+
" ",
760+
" ",
761+
" ",
762+
"X"
763+
],
764+
[
765+
"=",
766+
" ",
767+
" ",
768+
" ",
769+
"X"
770+
],
771+
[
772+
"X",
773+
" ",
774+
" ",
775+
" ",
776+
"X"
777+
],
778+
[
779+
"X",
780+
"X",
781+
"X",
782+
"X",
783+
"X"
784+
]
785+
]
745786
}
746787
]

Diff for: afficheur.h

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#ifndef AFFICHEUR_H
2+
#define AFFICHEUR_H
3+
4+
#include "terrain.h"
5+
6+
class afficheur {
7+
public:
8+
virtual void afficheTerrain(const terrain& t) const = 0;
9+
virtual void afficheResultat(bool result) const = 0;
10+
virtual ~afficheur() = default;
11+
};
12+
13+
#endif // AFFICHEUR_H

Diff for: afficheurBGI.cpp

+142
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
#include "afficheurBGI.h"
2+
#include "type.h"
3+
using namespace TYPE;
4+
5+
void afficheurBGI::afficheTerrain(const terrain& t) const {
6+
int decalage = 100;
7+
8+
auto tmp = t.getObjets();
9+
for(int i = 0; i < tmp.size(); ++i) {
10+
std::string s = std::to_string(i);
11+
afficheTexte(
12+
decalage/2,
13+
(i+1)*terrain::TAILLECASE+decalage,
14+
s.c_str()
15+
);
16+
17+
for(int j = 0; j < tmp[i].size(); ++j) {
18+
19+
/*
20+
std::string s = std::to_string(k++);
21+
if(j == 0) {
22+
afficheTexte(
23+
(i+1)*terrain::TAILLECASE+decalage,
24+
decalage/2,
25+
s.c_str()
26+
);
27+
}
28+
*/
29+
30+
int type = tmp[i][j]->getType();
31+
int x1 = tmp[i][j]->getP1().x() + decalage,
32+
y1 = tmp[i][j]->getP1().y() + decalage,
33+
x2 = tmp[i][j]->getP2().x() + decalage,
34+
y2 = tmp[i][j]->getP2().y() + decalage;
35+
switch(type)
36+
{
37+
case OBJET::MUR:
38+
afficheMur(y1,x1,y2,x2);
39+
break;
40+
case OBJET::VIDE:
41+
afficheVide(y1,x1,y2,x2);
42+
break;
43+
case OBJET::LASER:
44+
afficheLaser(y1,x1,y2,x2);
45+
break;
46+
case OBJET::CIBLE:
47+
afficheCible(y1,x1,y2,x2);
48+
break;
49+
case OBJET::MIROIR_SLASH:
50+
afficheMiroirSlash(y1,x1,y2,x2);
51+
break;
52+
case OBJET::MIROIR_BACKSLASH:
53+
afficheMiroirBackSlash(y1,x1,y2,x2);
54+
break;
55+
case OBJET::RAYON:
56+
afficheRayon(y1,x1,y2,x2);
57+
break;
58+
}
59+
}
60+
}
61+
}
62+
63+
void afficheurBGI::afficheResultat(bool result) const {
64+
result == true ? afficheTexte(500,500,"Vous avez gagné ! :D") : afficheTexte(500,500,"Vous avez perdu ! D:");
65+
getch();
66+
}
67+
68+
void afficheurBGI::afficheContour(int x1, int y1, int x2, int y2) const {
69+
setcolor(WHITE);
70+
rectangle(x1,y1,x2,y2);
71+
}
72+
73+
void afficheurBGI::afficheVide(int x1, int y1, int x2, int y2) const {
74+
setcolor(BLACK);
75+
bar(x1,y1,x2,y2);
76+
77+
// Pour bien voir les delimitations du terrain, pas obligatoire mais moche apres
78+
afficheContour(x1,y1,x2,y2);
79+
}
80+
81+
void afficheurBGI::afficheMur(int x1, int y1, int x2, int y2) const {
82+
setcolor(DARKGRAY);
83+
bar(x1,y1,x2,y2);
84+
85+
// Pour bien voir les delimitations du terrain, pas obligatoire mais moche apres
86+
afficheContour(x1,y1,x2,y2);
87+
}
88+
89+
void afficheurBGI::afficheMiroirSlash(int x1, int y1, int x2, int y2) const {
90+
setcolor(MAGENTA);
91+
rectangle(x1,y1,x2,y2);
92+
line(x2,y1,x1, y2);
93+
94+
// Pour bien voir les delimitations du terrain, pas obligatoire mais moche apres
95+
afficheContour(x1,y1,x2,y2);
96+
}
97+
98+
void afficheurBGI::afficheMiroirBackSlash(int x1, int y1, int x2, int y2) const {
99+
setcolor(GREEN);
100+
rectangle(x1,y1,x2,y2);
101+
line(x1,y1,x2,y2);
102+
103+
// Pour bien voir les delimitations du terrain, pas obligatoire mais moche apres
104+
afficheContour(x1,y1,x2,y2);
105+
}
106+
107+
void afficheurBGI::afficheLaser(int x1, int y1, int x2, int y2) const {
108+
setcolor(YELLOW);
109+
rectangle(x1,y1,x2,y2);
110+
line(x1,y1,x2,y2);
111+
rectangle(x1,y1,x2,y2);
112+
line(x2,y1,x1, y2);
113+
114+
// Pour bien voir les delimitations du terrain, pas obligatoire mais moche apres
115+
afficheContour(x1,y1,x2,y2);
116+
}
117+
118+
void afficheurBGI::afficheCible(int x1, int y1, int x2, int y2) const {
119+
setcolor(WHITE);
120+
rectangle(x1,y1,x2,y2);
121+
setcolor(RED);
122+
circle(((x1+x2)/2)+1,((y1+y2)/2)+1,terrain::TAILLECASE/2);
123+
setcolor(WHITE);
124+
circle(((x1+x2)/2)+1,((y1+y2)/2)+1,terrain::TAILLECASE/4);
125+
126+
// Pour bien voir les delimitations du terrain, pas obligatoire mais moche apres
127+
afficheContour(x1,y1,x2,y2);
128+
}
129+
130+
void afficheurBGI::afficheRayon(int x1, int y1, int x2, int y2) const {
131+
setcolor(RED);
132+
circle((x1+x2)/2,(y1+y2)/2,8);
133+
134+
// Pour bien voir les delimitations du terrain, pas obligatoire mais moche apres
135+
afficheContour(x1,y1,x2,y2);
136+
}
137+
138+
void afficheurBGI::afficheTexte(int x, int y, const char* numero) const {
139+
settextjustify(RIGHT_TEXT,CENTER_TEXT);
140+
settextstyle(TRIPLEX_FONT,HORIZ_DIR,terrain::TAILLECASE/9);
141+
outtextxy(x, y, numero);
142+
}

Diff for: afficheurBGI.h

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#ifndef AFFICHEURBGI_H
2+
#define AFFICHEURBGI_H
3+
4+
#include "graphics.h"
5+
#include "afficheur.h"
6+
7+
class afficheurBGI : public afficheur {
8+
public:
9+
virtual void afficheTerrain(const terrain& t) const override;
10+
virtual void afficheResultat(bool result) const override;
11+
12+
void afficheContour(int x1, int y1, int x2, int y2) const;
13+
void afficheVide(int x1, int y1, int x2, int y2) const;
14+
void afficheMur(int x1, int y1, int x2, int y2) const;
15+
void afficheMiroirSlash(int x1, int y1, int x2, int y2) const;
16+
void afficheMiroirBackSlash(int x1, int y1, int x2, int y2) const;
17+
void afficheLaser(int x1, int y1, int x2, int y2) const;
18+
void afficheCible(int x1, int y1, int x2, int y2) const;
19+
void afficheRayon(int x1, int y1, int x2, int y2) const;
20+
void afficheTexte(int x, int y, const char* numero) const;
21+
22+
virtual ~afficheurBGI() = default;
23+
};
24+
25+
#endif // !AFFICHEURBGI_H

Diff for: afficheurTxt.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#include "afficheurTxt.h"
2+
3+
void afficheurTxt::afficheTerrain(const terrain& t) const {
4+
t.affiche(std::cout);
5+
}
6+
7+
void afficheurTxt::afficheResultat(bool result) const {
8+
result == true ? std::cout << "Vous avez gagne ! :D\n" : std::cout << "Vous avez perdu ! D:\n";
9+
system("pause");
10+
}

Diff for: afficheurTxt.h

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#ifndef AFFICHEURTXT_H
2+
#define AFFICHEURTXT_H
3+
4+
#include <iostream>
5+
#include "afficheur.h"
6+
7+
class afficheurTxt : public afficheur {
8+
public:
9+
virtual void afficheTerrain(const terrain& t) const override;
10+
virtual void afficheResultat(bool result) const override;
11+
virtual ~afficheurTxt() = default;
12+
};
13+
14+
#endif // !AFFICHEURTXT_H

0 commit comments

Comments
 (0)