Ecran-DARTS  1.1
BTS SNIR LaSalle Avignon 2021
partie.cpp
Aller à la documentation de ce fichier.
1 #include "partie.h"
2 #include <QDebug>
3 
14 Partie::Partie(QObject *parent) : QObject(parent), nbJoueurs(NB_JOUEURS_MAX), scores(nbJoueurs, 0), voleeJoueur(NB_FLECHETTES, FLECHETTE_NON_JOUEE), doubleOut(false)
15 {
16  qDebug() << Q_FUNC_INFO;
17 }
18 
25 {
26  qDebug() << Q_FUNC_INFO;
27 }
28 
36 void Partie::demarrer(QString typePartie, int nbJoueurs)
37 {
38  this->nbJoueurs = nbJoueurs;
39  this->typePartie = typePartie;
40 
41  qDebug() << Q_FUNC_INFO << typePartie << nbJoueurs << scores.size();
42 
43  effacerScores();
44  effacerVolee();
45 
46  doubleOut = false;
47  scoreInitial = 501;
48  if(typePartie == "501")
49  {
50  scoreInitial = 501;
51  doubleOut = false;
52  }
53  else if(typePartie == "301")
54  {
55  scoreInitial = 301;
56  doubleOut = false;
57  }
58  else if(typePartie == "501_DOUBLE_OUT")
59  {
60  scoreInitial = 501;
61  doubleOut = true;
62  }
63  else if(typePartie == "301_DOUBLE_OUT")
64  {
65  scoreInitial = 301;
66  doubleOut = true;
67  }
68 
69  for(int i=0; i < nbJoueurs; ++i)
70  {
71  scores[i] = scoreInitial;
72  }
73 
74  qDebug() << Q_FUNC_INFO << typePartie << nbJoueurs;
75 }
76 
83 {
84  qDebug() << Q_FUNC_INFO << "nbJoueurs" << nbJoueurs;
85  return nbJoueurs;
86 }
87 
93 QString Partie::getTypePartie() const
94 {
95  qDebug() << Q_FUNC_INFO << "typePartie" << typePartie;
96  return typePartie;
97 }
98 
105 {
106  qDebug() << Q_FUNC_INFO << scoreInitial;
107  return scoreInitial;
108 }
109 
116 int Partie::getScore(int numeroJoueur) const
117 {
118  qDebug() << Q_FUNC_INFO << scores[numeroJoueur];
119  return scores[numeroJoueur];
120 }
121 
129 void Partie::diminuerScore(int numeroJoueur, int nbPoints)
130 {
131  scores[numeroJoueur] -= nbPoints;
132  qDebug() << Q_FUNC_INFO << "numeroJoueur" << numeroJoueur << "nbPoints" << nbPoints << "scores[numeroJoueur]" << scores[numeroJoueur];
133 }
134 
142 void Partie::augmenterScore(int numeroJoueur, int nbPoints)
143 {
144  scores[numeroJoueur] += nbPoints;
145  qDebug() << Q_FUNC_INFO << "numeroJoueur" << numeroJoueur << "nbPoints" << nbPoints << "scores[numeroJoueur]" << scores[numeroJoueur];
146 }
147 
154 {
155  int scoreVolee = 0;
156  int nbVide = 0;
157 
158  for(int i = 0; i < voleeJoueur.size(); i++)
159  {
160  if(voleeJoueur[i] != -1)
161  {
162  scoreVolee = scoreVolee + scores[i];
163  }
164  else
165  {
166  nbVide++;
167  }
168  }
169 
170  if(nbVide == 3)
171  return -1;
172 
173  qDebug() << Q_FUNC_INFO << "scoreVolee" << scoreVolee;
174 
175  return scoreVolee;
176 }
177 
187 bool Partie::setVolee(int numeroJoueur, int idTouche, int valeur, int multiplicateur)
188 {
189  // 1. on calcule le nombre de points de la fléchette
190  int touche = valeur * multiplicateur;
191  qDebug() << Q_FUNC_INFO << "numeroJoueur" << numeroJoueur << "idTouche" << idTouche << "valeur" << valeur << "multiplicateur" << multiplicateur << "touche" << touche;
192 
193  // 2. on vérifie si la volée précédente est terminee
194  if(idTouche == 0)
195  //if(estVoleeTerminee())
196  effacerVolee();
197 
198  // 3. on stocke la fléchette jouée
199  voleeJoueur[idTouche] = touche;
200 
201  qDebug() << Q_FUNC_INFO << "voleeJoueur[idTouche]" << voleeJoueur[idTouche];
202 
203  // 4. on met à jour le score si c'est possible on retourne true
204  if(scores[numeroJoueur] >= voleeJoueur[idTouche])
205  {
206  diminuerScore(numeroJoueur, touche);
207  qDebug() << Q_FUNC_INFO << "numeroJoueur" << numeroJoueur << "idTouche" << idTouche << "touche" << touche << "scores[numeroJoueur]" << scores[numeroJoueur];
208  return true;
209 
210  // 5. Est-ce une partie DOUBLE OUT ?
211  if(estDoubleOut() && multiplicateur == 2)
212  {
213  diminuerScore(numeroJoueur, touche);
214  qDebug() << Q_FUNC_INFO << "numeroJoueur" << numeroJoueur << "idTouche" << idTouche << "touche" << touche << "scores[numeroJoueur]" << scores[numeroJoueur];
215  return true;
216  }
217  else
218  {
219  for(int i = (idTouche - 1); i >= 0; --i)
220  {
221  augmenterScore(numeroJoueur, touche);
222  qDebug() << Q_FUNC_INFO << "numeroJoueur" << numeroJoueur << "idTouche" << idTouche << "touche" << touche << "scores[numeroJoueur]" << scores[numeroJoueur];
223  emit joueurSuivant();
224  }
225  return true;
226  }
227  }
228 
229  // 6. sinon on annule les fléchettes précédentes et on retourne false
230  for(int i = (idTouche - 1); i >= 0; --i)
231  {
232  augmenterScore(numeroJoueur, voleeJoueur[i]);
233  emit joueurSuivant();
234  }
235 
236  qDebug() << Q_FUNC_INFO << "numeroJoueur" << numeroJoueur << "idTouche" << idTouche << "touche" << touche << "scores[numeroJoueur]" << scores[numeroJoueur];
237  return false;
238 }
239 
246 {
247  for(int i = 0; i < NB_FLECHETTES; i++)
248  {
250  {
251  qDebug() << Q_FUNC_INFO << "false";
252  return false;
253  }
254  }
255 
256  qDebug() << Q_FUNC_INFO << "true";
257  return true;
258 }
259 
265 bool Partie::estPartieTerminee(int numeroJoueur, int multiplicateur)
266 {
270  if(scores[numeroJoueur] == 0 && !estDoubleOut())
271  {
272  qDebug() << Q_FUNC_INFO << "numeroJoueur" << numeroJoueur << "true";
273  return true;
274  }
275 
276  if(scores[numeroJoueur] == 0 && estDoubleOut() && multiplicateur == 2)
277  {
278  qDebug() << Q_FUNC_INFO << "numeroJoueur" << numeroJoueur << "true";
279  return true;
280  }
281 
282  qDebug() << Q_FUNC_INFO << "numeroJoueur" << numeroJoueur << "false";
283  return false;
284 }
285 
292 {
293  qDebug() << Q_FUNC_INFO << doubleOut;
294  return doubleOut;
295 }
296 
303 {
304  qDebug() << Q_FUNC_INFO;
305  for(int i=0; i < NB_JOUEURS_MAX; ++i)
306  {
307  scores[i] = 0;
308  }
309 }
310 
317 {
318  qDebug() << Q_FUNC_INFO;
319  for(int i=0; i < NB_FLECHETTES; ++i)
320  {
322  }
323 }
Partie::estVoleeTerminee
bool estVoleeTerminee()
Méthode qui vérifie ci la volée est terminer.
Definition: partie.cpp:245
Partie::augmenterScore
void augmenterScore(int numeroJoueur, int nbPoints)
Méthode qui augemante le score.
Definition: partie.cpp:142
Partie::getScoreVolee
int getScoreVolee() const
Méthode qui retourne le score de la volée.
Definition: partie.cpp:153
Partie::scoreInitial
int scoreInitial
le score initial au début d'une partie
Definition: partie.h:36
partie.h
Partie::typePartie
QString typePartie
le type de partie (avec ou sans double out)
Definition: partie.h:39
FLECHETTE_NON_JOUEE
#define FLECHETTE_NON_JOUEE
La valeur pour les fléchette non jouer.
Definition: partie.h:23
Partie::setVolee
bool setVolee(int numeroJoueur, int idTouche, int valeur, int multiplicateur)
Méthode qui met à jour la volée.
Definition: partie.cpp:187
Partie::effacerVolee
void effacerVolee()
Méthode qui efface la volée.
Definition: partie.cpp:316
Partie::Partie
Partie(QObject *parent=nullptr)
Constructeur de la classe Partie.
Definition: partie.cpp:14
Partie::scores
QVector< int > scores
les scores des différents joueurs
Definition: partie.h:37
Partie::getNbJoueurs
int getNbJoueurs() const
Méthode qui retourne le nombres de joueurs.
Definition: partie.cpp:82
Partie::estDoubleOut
bool estDoubleOut()
Méthode qui vérifie ci c'est une partie double out.
Definition: partie.cpp:291
Partie::joueurSuivant
void joueurSuivant()
Signal qui est envoyer quand le score de la fléchette est supérieur à la volée et qui permet de chang...
NB_FLECHETTES
#define NB_FLECHETTES
Le nombres de flechettes.
Definition: partie.h:17
Partie::demarrer
void demarrer(QString typePartie, int nbJoueurs)
Méthode qui Demarre est gere les type de partie.
Definition: partie.cpp:36
NB_JOUEURS_MAX
#define NB_JOUEURS_MAX
Le nombres de joueurs max.
Definition: ihmDarts.h:112
Partie::diminuerScore
void diminuerScore(int numeroJoueur, int nbPoints)
Méthode qui diminue le score.
Definition: partie.cpp:129
Partie::~Partie
~Partie()
Destructeur de la classe Partie.
Definition: partie.cpp:24
Partie::voleeJoueur
QVector< int > voleeJoueur
la valeur des différentes fléchettes d'une volée de 3 fléchettes
Definition: partie.h:38
Partie::nbJoueurs
int nbJoueurs
nombre de joueurs dans la partie
Definition: partie.h:35
Partie::getTypePartie
QString getTypePartie() const
Méthode qui retourne le type de partie.
Definition: partie.cpp:93
Partie::getScoreInitial
int getScoreInitial() const
Méthode qui retourne le score initial.
Definition: partie.cpp:104
QObject
Partie::doubleOut
bool doubleOut
Définir si la partie est une partie double out.
Definition: partie.h:40
Partie::effacerScores
void effacerScores()
Méthode qui efface le score.
Definition: partie.cpp:302
Partie::estPartieTerminee
bool estPartieTerminee(int numeroJoueur, int multiplicateur)
Méthode qui vérifie partie est terminer.
Definition: partie.cpp:265
Partie::getScore
int getScore(int numeroJoueur) const
Méthode qui retourne le score.
Definition: partie.cpp:116