-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPartie.cpp
More file actions
executable file
·168 lines (118 loc) · 4.79 KB
/
Partie.cpp
File metadata and controls
executable file
·168 lines (118 loc) · 4.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#include "Partie.h"
Partie::Partie(Plateau* plat, ZoneAffichageTexte* zoneT, ZoneCarte* zoneC, ZoneChecklist* zoneCheck, DonneesJeu* d): donnees(d), deClique_(false),p(plat), zoneText(zoneT), zoneCarte(zoneC),zoneChecklist(zoneCheck) {
armeCrime="";
persoCrime="";
action="";
manFen.observerChoix(this);
if (!font.loadFromFile("arial.ttf")){ exit (EXIT_FAILURE);}
cerr<<"Partie::Creation Partie"<<endl;
}
Partie::~Partie()
{
//dtor
cerr<<"Partie::Destruction"<< endl;
}
/**
* Fonction preparer
*/
void Partie::preparer()
{
donnees->preparerPartie(p);
}
/**
* Fonction updatant la partieselon la poistion du clique
* @param un event
*/
void Partie::update(sf::Event event)
{
int x = event.mouseButton.x;
int y = event.mouseButton.y; //on recupere la position
zoneChecklist->update(donnees->getJoueurCourant(), event);
if(p->positionValide(x,y)){
Joueur &j=*donnees->getJoueurCourant();
cerr<<"Le tour du joueur : "<< donnees->getJoueurCourant()<< " dont le nom est " <<j.getNom()<<endl;
//Si le joueur clique sur le centre on lance le de et cherche les chemins
if(y >=220 && y<=360 && x>=220 && x<=320 && !deClique_ ){
Case* posCourante = j.getPosition(); //la position du joueur avant le debut du tour
posCourante->setEstVide(true); // avant de chercher on vide la case
posCourante->trouverChemin(donnees->lancerDe(),chemin,p); //on cherche les positions possibles
deClique_=true;
}
if(deClique_ && !(y >=220 && y<=360 && x>=220 && x<=320 ) ){
Case* nCase= p->trouverCase(x,y); //On trouve la case
//Verifier que la case cliquer est bien dans le tableau des chemins
if(std::find(chemin.begin(), chemin.end(), nCase) == chemin.end()){
//chemin ne contient pas la case elle n'est donc pas valide
cerr<< "Partie::case en dehors du champ du dé" <<endl;
}else if(j.getDernierePiece()==nCase){
cerr<< "Partie:: La case à été visitée au tour précédent" <<endl;
}else{
//on peut deplacer le joueur
j.getPosition()->setEstVide(true); //ancienne case vide
j.setPosition(nCase); // deplacer dasn nouvelle case
nCase->setEstVide(false); //nouvelle case pleine
std::string lieu;
lieu=nCase->action();
std::string cheminres;
std::string nomres;
//On est dans la nouvelle case
if(lieu !=""){
manFen.ouvrirFenetreInfo(); //ouvre une fenetre d'info
manFen.ouvrirFenetreChoix();//ouvre la fenetre permettant au joueur de faire un choix
if(action=="a"){
donnees->accuser(armeCrime,persoCrime,lieu);
}else{
cheminres=donnees->soupconner(armeCrime,persoCrime,lieu);
}
manFen.ouvrirFenetreContrer(cheminres);
//Changer le tableau des cartes vu
}
//On change les elements de la classe pour que le jeu continue
deClique_ = false;
//on set le dernier lieu visité
j.setDernierePiece(nCase);
//On vide le tableau des chemins poissibles
chemin.clear();
donnees->changerJoueur();
}
}
}
}
/**
* Fonction d'affichage de la partie selon la poistion du clique
* @param une xindow
*/
void Partie::afficher(sf::RenderWindow &window){
//affichage du chemin bleu
for(unsigned int j=0; j < chemin.size(); j++)
{
chemin.at(j)->colorier(window);
}
//affichage du joueur
for(int i=0; i < donnees->getNbJoueur(); i++)
{
donnees->getJoueurAt(i)->update(window);
}
//afficher les cartes du joueur en cours
zoneChecklist->afficherChecklist(donnees->getJoueurCourant(), window);
zoneCarte->afficherCarte(*donnees->getJoueurCourant(), window);
//zoneText->afficher(window);
sf::Texture texture;
sf::Sprite sp;
if (!texture.loadFromFile("Images/lancerDe.png")){ }
texture.setSmooth(true);
sp.setTexture(texture);
sp.setPosition(900,50);
window.draw(sp);
}
/**
* Fonction notify
* @param choix1 le nom de la carte choisi en premier
* @param choix2 le nom de la carte choisi en second
* @param act a ou s selon si accuse ou soupconne
*/
void Partie::estNotifie(std::string choix1, std::string choix2, std::string act){
action =act;
persoCrime = choix1;
armeCrime = choix2;
}