Projet Darts  0.2
BTS SNIR LaSalle Avignon 2020
ihm.cpp
Aller à la documentation de ce fichier.
1 #include "ihm.h"
2 #include "ui_ihm.h"
3 
4 #include <QTime>
5 #include <QAction>
6 #include <QFileInfo>
7 #include <QPainter>
8 
26 Ihm::Ihm(QWidget *parent) :
27  QWidget(parent),
28  ui(new Ui::Ihm),
29  musique(qApp->applicationDirPath() + CHEMIN_FICHIER_MUSIQUE + "music.wav",this),
30  musiquePause(qApp->applicationDirPath() + CHEMIN_FICHIER_MUSIQUE + "pause.wav",this),
31  compteurDureePartie(0),
32  messageStatut("Volée ➤")
33 {
34  ui->setupUi(this);
35  qDebug() << Q_FUNC_INFO;
36 
37  darts = new Darts(this);
38  communication = new Communication(darts, this);
39 
40  // Initialiser l'horloge
42 
43  // Raccourcis Quitter/ChangerPage (mode debug)
45 
46  // Démarrer la communication bluetooth
48 
49  // Initialiser les connexions signal/slot
51 
52  //configuration affichage des regles
54 
55  //Afficher la page d'attente
57 }
58 
65 {
66  delete ui;
67  qDebug() << Q_FUNC_INFO;
68 }
69 
76 {
77  connect(communication, SIGNAL(appareilConnecter()) , this, SLOT(afficherAttenteConfiguration()));
78  connect(communication, SIGNAL(afficherAttenteConnexion()), this, SLOT(afficherAttenteConnexion()));
79  connect(darts, SIGNAL(afficherNouvellePartie()), this, SLOT(afficherPartie()));
80  connect(communication, SIGNAL(resetPartie()), this, SLOT(afficherNouvellePartie()));
81  connect(darts, SIGNAL(finPartie(QString, int, bool)), this, SLOT(finirPartie(QString, int, bool)));
82  connect(darts, SIGNAL(changementJoueurActif()), this, SLOT(mettreAJourJoueur()));
83  connect(darts, SIGNAL(nouvelImpact(int, int, int)), this, SLOT(afficherImpact(int,int)));
84  connect(darts, SIGNAL(miseAJourPoint()), this, SLOT(mettreAJourScore()));
85  connect(darts, SIGNAL(miseAJourPointTournois()), this, SLOT(mettreAJourScoreTournois()));
86  connect(darts, SIGNAL(nouvelleManche()), this, SLOT(mettreAJourManche()));
87  connect(darts, SIGNAL(voleeAnnulee()), this, SLOT(afficherVoleeAnnulee()));
88  connect(darts, SIGNAL(miseAJourMoyenneVolee()), this, SLOT(mettreAJourMoyenneVolee()));
89  connect(darts, SIGNAL(miseAJourMoyenneVoleeTournois()), this, SLOT(mettreAJourMoyenneVoleeTournois()));
90  connect(darts->getSolution(), SIGNAL(solutionTrouver(QString)), this, SLOT(mettreAJoursolution(QString)));
91  connect(darts, SIGNAL(actualiserCible()), this, SLOT(mettreAJourCible()));
92  connect(communication, SIGNAL(pause()), this, SLOT(mettrePausePartie()));
93  connect(communication, SIGNAL(play()), this, SLOT(relancerpartie()));
94  connect(communication, SIGNAL(erreurBluetooth(QString)), this, SLOT(mettreAJourMessageStatut(QString)));
95  connect(darts, SIGNAL(jouerSon(QString)), this, SLOT(jouerSon(QString)));
96  connect(communication, SIGNAL(jouerSon(QString)), this, SLOT(jouerSon(QString)));
97  connect(communication, SIGNAL(afficherRegle(QString)), this, SLOT(lancerRegle(QString)));
98  connect(communication, SIGNAL(stopperRegle()), this, SLOT(StopperLectureRegle()));
99  connect(darts, SIGNAL(afficherTournois(QString, QString)), this, SLOT(initialiserAffichageTournois(QString, QString)));
100  connect(darts, SIGNAL(debuterTournois()), this, SLOT(lancerTournois()));
101  connect(darts, SIGNAL(changementJoueurActifTournoi()), this, SLOT(mettreAJourJoueurTournoi()));
102  connect(darts, SIGNAL(finTournois(QString,QString,QList<Joueur>)), this, SLOT(afficherFinTournois(QString,QString,QList<Joueur>)));
103  connect(darts, SIGNAL(afficherInfoTournois()), this, SLOT(afficherInformationTournois()));
104 
105 }
106 
113 {
114  QAction *quitter = new QAction(this);
115  quitter->setShortcut(QKeySequence(QKeySequence(Qt::Key_Up))); //fleche du haut pour quitter l'application
116  addAction(quitter);
117  connect(quitter, SIGNAL(triggered()), this, SLOT(fermerApplication())); // Pour fermer l'application
118 
119 #ifndef QT_NO_DEBUG_OUTPUT
120  QAction *actionAllerDroite = new QAction(this);
121  actionAllerDroite->setShortcut(QKeySequence(Qt::Key_Right));
122  addAction(actionAllerDroite);
123  connect(actionAllerDroite, SIGNAL(triggered()), this, SLOT(allerPageSuivante()));// Pour passer à l'écran suivant
124  QAction *actionAllerGauche = new QAction(this);
125  actionAllerGauche->setShortcut(QKeySequence(Qt::Key_Left));
126  addAction(actionAllerGauche);
127  connect(actionAllerGauche, SIGNAL(triggered()), this, SLOT(allerPagePrecedente()));// Pour revenir à l'écran précédent
128 #endif
129 }
130 
137 {
138  QString affichageHeure;
139  QTime heure = QTime::currentTime();
140  affichageHeure = "<font color=\"#6D2B6B\">" + heure.toString("hh : mm ") + "</font>";
141  ui->labelHeureAttente->setText(affichageHeure);
142  ui->labelHeureStatistique->setText(affichageHeure);
143  ui->labelHeureTournois->setText(heure.toString("hh : mm "));
144 }
145 
152 {
153  QString score;
154  int premierJoueurAfficher = 0;
155  int dernierJoueurAfficher = darts->getListJoueur().size();
156 
157  if(darts->getListJoueur().size() > 7)
158  {
159  premierJoueurAfficher = darts->getJoueurActif();
160  dernierJoueurAfficher = darts->getJoueurActif() + 6;
161 
162  while(dernierJoueurAfficher > darts->getListJoueur().size() || premierJoueurAfficher < 0)
163  {
164  if(premierJoueurAfficher < 0)
165  {
166  premierJoueurAfficher++;
167  dernierJoueurAfficher++;
168  }
169 
170  if(dernierJoueurAfficher > darts->getListJoueur().size())
171  {
172  premierJoueurAfficher--;
173  dernierJoueurAfficher--;
174  }
175  }
176  }
177  for(int i = premierJoueurAfficher; i < dernierJoueurAfficher; i++)
178  {
179  score += darts->getListJoueur()[i].getNom() + " : " + QString::number(darts->getListJoueur()[i].getScore()) + "\n"; // " " +
180  }
181  ui->scoreActuel->setText(score);
182 }
183 
190 {
191  ui->manche->setText(QString::number(darts->getManche()));
192  ui->tournoisManche->setText("Manche " + QString::number(darts->getManche()));
193 }
194 
202 void Ihm::afficherImpact(int typePoint, int point)
203 {
204  if(QFileInfo(qApp->applicationDirPath() + "/impact/IMPACT_" + QString::number(typePoint) + "_" + QString::number(point) + ".png").exists()) //test si l'image existe
205  {
206  QImage impact(qApp->applicationDirPath() + "/impact/IMPACT_" + QString::number(typePoint) + "_" + QString::number(point) + ".png");
207 
208  QPixmap cibleImpacte = ui->labelVisualisationimpact->pixmap()->copy(); // on récupère l'image précédente;
209 
210  QPainter p(&cibleImpacte);
211 
212  p.drawImage(QPoint(0, 0), impact);
213 
214  p.end();
215 
216  ui->labelVisualisationimpact->setPixmap(cibleImpacte);
217  ui->ImpactCibleTournois->setPixmap(cibleImpacte);
218  }
219 
220  mettreAJourMessageStatut(typePoint, point);
221 }
222 
230 void Ihm::mettreAJourMessageStatut(int typePoint, int point)
231 {
232 
233  switch(typePoint){
234  case TRIPLE_POINT:
235  messageStatut += " T" + QString::number(point);
236  break;
237  case DOUBLE_POINT:
238  messageStatut += " D" + QString::number(point);
239  break;
240  case ZERO_POINT:
241  messageStatut += " " + QString::number(ZERO_POINT);
242  break;
243  default:
244  messageStatut += " " + QString::number(point);
245  break;
246  }
247  ui->labelStatut->setStyleSheet("color: rgb(109, 43,107); border-color: rgb(109, 43,107);");
248  ui->labelStatut->setText(messageStatut + " ⟼ " +QString::number(darts->getPointVolees()) + " Point(s)");
249  ui->statutImpactTournois->setText(messageStatut + " ⟼ " +QString::number(darts->getPointVolees()) + " Point(s)");
250 }
251 
252 
259 {
260  QString nomjoueur;
261 
262  int premierJoueurAfficher = 0;
263  int dernierJoueurAfficher = darts->getListJoueur().size();
264 
265  if(darts->getListJoueur().size() > 7)
266  {
267  premierJoueurAfficher = darts->getJoueurActif();
268  dernierJoueurAfficher = darts->getJoueurActif() + 6;
269 
270  while(dernierJoueurAfficher > darts->getListJoueur().size() || premierJoueurAfficher < 0)
271  {
272  if(premierJoueurAfficher < 0)
273  {
274  premierJoueurAfficher++;
275  dernierJoueurAfficher++;
276  }
277 
278  if(dernierJoueurAfficher > darts->getListJoueur().size())
279  {
280  premierJoueurAfficher--;
281  dernierJoueurAfficher--;
282  }
283  }
284  }
285 
286  for(int i = premierJoueurAfficher; i < dernierJoueurAfficher; i++)
287  {
288  if(i == darts->getJoueurActif()) // test si le joueur est le joueur qui doit jouer
289  {
290  nomjoueur += " ⟼ " + darts->getListJoueur()[i].getNom() + "\n"; //joueur joue
291  }
292  else
293  {
294  nomjoueur += " " + darts->getListJoueur()[i].getNom() + "\n"; //joueur en attente de son tour //
295  }
296  }
297  ui->nomJoueur->setText(nomjoueur);
298 }
299 
306 {
307  QString moyenneVoleeJoueur;
308  QString moyenneVoleesJoueur;
309 
310  int premierJoueurAfficher = 0;
311  int dernierJoueurAfficher = darts->getListJoueur().size();
312 
313  if(darts->getListJoueur().size() > 7)
314  {
315  for(int i = premierJoueurAfficher; i < 7; i++)
316  {
317  moyenneVoleeJoueur += darts->getListJoueur()[i].getNom() + " : " + QString::number(darts->getListJoueur()[i].getMoyenneVolee()) +" \n"; //" " +
318  }
319 
320  for(int i = 7; i < dernierJoueurAfficher; i++)
321  {
322  moyenneVoleesJoueur += darts->getListJoueur()[i].getNom() + " : " + QString::number(darts->getListJoueur()[i].getMoyenneVolee()) +" \n"; //" " +
323  }
324 
325  ui->moyenneVolee->setText(moyenneVoleeJoueur);
326  ui->lineSeparateurMoyenne->setVisible(true);
327  ui->moyenneVolee2->setText(moyenneVoleesJoueur);
328  }
329  else
330  {
331  for(int i = premierJoueurAfficher; i < dernierJoueurAfficher; i++)
332  {
333  moyenneVoleeJoueur += darts->getListJoueur()[i].getNom() + " : " + QString::number(darts->getListJoueur()[i].getMoyenneVolee()) +" \n"; //" " +
334  }
335  ui->moyenneVolee->setText(moyenneVoleeJoueur);
336  }
337  ui->labelMoyenneVolees->setVisible(true);
338  ui->lineScoreActuel->setVisible(true);
339  ui->labelMoyenneVoleesStatistique->setVisible(true);
340  ui->moyenneVolees->setText(moyenneVoleeJoueur + moyenneVoleesJoueur);
341 }
342 
349 {
350  musique.stop();
351 
352  ui->typeJeu->setText(darts->getModeDeJeu());
353 
356  connect(timerHorloge, SIGNAL(timeout()),this,SLOT(afficherDureePartie())); // Pour le comptage et l'affichage de la durée d'une séance
357 
359 
361 }
362 
369 {
370  ui->labelStatut->setText("Volée annulée !");
371  ui->statutImpactTournois->setText("Volée annulée !");
372 }
373 
381 void Ihm::finirPartie(QString gagnant, int voleeMaxJoueur, bool tournois)
382 {
383  player->stop();
384  musique.play();
385 
386  if(tournois == true)
387  {
388  ui->labelMoyenneVoleesStatistique->setVisible(true);
389  ui->moyenneVolees->setText(darts->getListJoueur()[darts->getPremierJoueur()].getNom() + " ➠ " + QString::number(darts->getListJoueur()[darts->getPremierJoueur()].getMoyenneVolee()) + "\n" + darts->getListJoueur()[darts->getDernierJoueur()].getNom() + " ➠ " +QString::number(darts->getListJoueur()[darts->getDernierJoueur()].getMoyenneVolee()));
390  ui->moyenneVolees->setVisible(true);
391  }
392 
393  disconnect(timerHorloge, SIGNAL(timeout()), this, SLOT(afficherDureePartie())); // Pour le comptage et l'affichage de la durée d'une séance
394  ui->winnerPartie->setText(gagnant);
395  ui->voleeMax->setText(QString::number(voleeMaxJoueur) + " points");
396  ui->nbVolees->setText(QString::number(darts->getNbVolees()));
397  //communication->miseAJourEtatPartieFin();
399 }
400 
407 {
408  player->stop();
410  ui->manche->setText("1");
411  ui->nomJoueur->setText("");
412  ui->scoreActuel->setText("");
413  ui->typeJeu->setText("");
414  ui->winnerPartie->setText("Winner ....");
415  ui->labelStatut->setText("");
416  ui->moyenneVolee->setText("");
417  ui->moyenneVolee2->setText("");
418  ui->nbVolees->setText("");
419  ui->voleeMax->setText("");
420  ui->moyenneVolees->setText("");
421  ui->labelMoyenneVolees->setVisible(false);
422  ui->lineScoreActuel->setVisible(false);
423  ui->lineSeparateurMoyenne->setVisible(false);
424  ui->labelMoyenneVoleesStatistique->setVisible(false);
425  ui->ecranPartie->setStyleSheet("QWidget#ecranPartie{background-image:url(:/ressources/background.jpg);}");
427  ui->labelINfoMatch->setVisible(false);
428 
429  //ecran Tournois
430  ui->tournoisNom->setText("----------");
431  ui->modeDeJeuTournois->setText("");
432  ui->nomJoueurTournois1->setText("");
433  ui->nomJoueurTournois2->setText("");
434  ui->scoreJoueurTournois1->setText("\n⇓\n");
435  ui->scoreJoueurTournois2->setText("\n⇓\n");
436  ui->moyenneJoueurTournois1->setText("\n⇓\n" );
437  ui->moyenneJoueurTournois2->setText("\n⇓\n" );
438  ui->tournoisManche->setText("Manche 1");
439  ui->statutImpactTournois->setText("");
440 
441 
442  // configurer la musique
443  musique.setLoops(QSound::Infinite);
444  musiquePause.setLoops(QSound::Infinite);
445  musiquePause.stop();
446  // jouer la musique
447  musique.play();
448 }
449 
456 {
457  int ecranCourant = Page(ui->ecranDarts->currentIndex());
458  int ecranSuivant = (ecranCourant+1)%int(Ihm::NbPages);
459  ui->ecranDarts->setCurrentIndex(ecranSuivant);
460 }
461 
469 {
470  ui->ecranDarts->setCurrentIndex(page);
471 }
472 
479 {
480  int ecranCourant = ui->ecranDarts->currentIndex();
481  int ecranPrecedent = (ecranCourant-1)%int(Ihm::NbPages);
482  if(ecranPrecedent == -1)
483  ecranPrecedent = NbPages-1;
484  ui->ecranDarts->setCurrentIndex(ecranPrecedent);
485 }
486 
493 {
494  this->close();
495 }
496 
503 {
504  ui->labelStatutAttente->setText("⇒ Attente configuration de la partie ⇐");
505 }
506 
513 {
514  ui->labelStatutAttente->setText("⇒ En attente de connexion ⇐");
515 }
516 
523 {
524  ui->labelStatutAttente->setText("⇒ Prêt à lancer le tournoi ⇐");
525 }
526 
534 {
535  QTime duree(0, 0);
537  QTime dureeSeance = duree.addSecs(compteurDureePartie);
538  if(compteurDureePartie >= 3600)
539  {
540  ui->ecranPartie->setStyleSheet("QWidget#ecranPartie{background-image:url(:/ressources/backgroundHeure.jpg);}");
541  ui->labelTempsPartie->setText(dureeSeance.toString("hh : mm : ss"));
542  ui->tempsPartie->setText(dureeSeance.toString("hh : mm : ss"));
543  ui->tournoisChrono->setText(dureeSeance.toString("hh : mm : ss"));
544  }
545  else
546  {
547  ui->labelTempsPartie->setText(dureeSeance.toString("mm : ss"));
548  ui->tempsPartie->setText(dureeSeance.toString("mm : ss"));
549  ui->tournoisChrono->setText(dureeSeance.toString("mm : ss"));
550  }
551 }
552 
559 void Ihm::mettreAJoursolution(QString solution)
560 {
561  ui->labelStatut->setStyleSheet("color: rgb(179, 0,5); border-color: rgb(179, 0,5);");
562  ui->labelStatut->setText(solution);
563  ui->statutImpactTournois->setText(solution);
564 }
565 
572 {
573  disconnect(timerHorloge, SIGNAL(timeout()),this,SLOT(afficherDureePartie())); // mettre en pause le chronometrage de la partie
574  sauvegardeImpactEncours = ui->labelVisualisationimpact->pixmap()->copy();
575  QImage pause(":pause.png");
576  QPixmap cibleImpacte = ui->labelVisualisationimpact->pixmap()->copy(); // on récupère l'image précédente;
577  QPainter p(&cibleImpacte);
578  p.drawImage(QPoint(0, 0), pause);
579  p.end();
580  ui->labelVisualisationimpact->setPixmap(cibleImpacte);
581  ui->ImpactCibleTournois->setPixmap(cibleImpacte);
582  ui->labelTempsPartie->setStyleSheet("color: rgb(179, 0,5);");
583 
584  musiquePause.play();
585 }
586 
593 {
594  ui->labelVisualisationimpact->setPixmap(sauvegardeImpactEncours);
595  ui->ImpactCibleTournois->setPixmap(sauvegardeImpactEncours);
596  ui->labelTempsPartie->setStyleSheet("color: rgb(109, 43,107);");
597  connect(timerHorloge, SIGNAL(timeout()),this,SLOT(afficherDureePartie())); // relancer le chronometrage de la partie
598  qDebug() << Q_FUNC_INFO << endl;
599  musiquePause.stop();
600 }
601 
608 {
609  timerHorloge = new QTimer(this); // Instancie dynamiquement le temporisateur du rafraichissement de l'heure
610  connect(timerHorloge, SIGNAL(timeout()),this,SLOT(actualiserHeure())); // Pour le déclenchement périodique de l'affichage de l'heure
611  timerHorloge->start(PERIODE_HORLOGE); // Toutes les secondes (1000 ms)
612 }
613 
620 {
621  ui->labelVisualisationimpact->setPixmap(QPixmap(":/ressources/cible.png"));
622  ui->ImpactCibleTournois->setPixmap(QPixmap(":/ressources/cible.png"));
623  sauvegardeImpactEncours = ui->labelVisualisationimpact->pixmap()->copy();
624  messageStatut = "Volée ➤";
625 }
626 
633 void Ihm::mettreAJourMessageStatut(QString statut)
634 {
635  ui->labelStatutAttente->setText(statut);
636 }
637 
638 
645 void Ihm::jouerSon(QString son)
646 {
647  QSound::play(qApp->applicationDirPath() + CHEMIN_FICHIER_MUSIQUE + son);
648  if(!QFileInfo(qApp->applicationDirPath() + CHEMIN_FICHIER_MUSIQUE + son).exists())
649  {
650  qDebug() << Q_FUNC_INFO << "Pour avoir les sons, ajouter le pack disponible à cette adresse dans le build de votre application:"<<endl;
651  qDebug() << Q_FUNC_INFO << "https://drive.google.com/file/d/1vH0tLe8lsu2VQLISDL94nJBA2arfLcbG/view?usp=sharing"<<endl;
652  }
653 }
654 
661 {
662  player = new QMediaPlayer;
663 
664  videoWidget = new QVideoWidget(this);
665  ui->verticalLayoutRegle->addWidget(videoWidget);
666  player->setVideoOutput(videoWidget);
667 
668  connect(player, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(stateChanged(QMediaPlayer::State)));
669  connect(player, SIGNAL(error(QMediaPlayer::Error)), this, SLOT(error(QMediaPlayer::Error)));
670 }
671 
678 void Ihm::lancerRegle(QString regle)
679 {
682 
683  player->setMedia(QUrl::fromLocalFile(QCoreApplication::applicationDirPath() + QString("/" + regle + ".mp4")));
684 
685  musiquePause.stop();
686  musique.stop();
688  player->play();
689 }
690 
697 {
698  if(sauverEtatPartie == 0)
699  {
701  musique.play();
703  }
704  else if(sauverEtatPartie == 1)
705  {
708  relancerpartie();
709  }
710  else if(sauverEtatPartie == 2)
711  {
713  musique.play();
715  }
716  else if(sauverEtatPartie == 3)
717  {
719  musiquePause.play();
721  }
722 }
723 
730 void Ihm::stateChanged(QMediaPlayer::State state)
731 {
732  qDebug() << Q_FUNC_INFO << state;
733  if(state == QMediaPlayer::StoppedState)
734  {
736  }
737 }
738 
745 {
746  player->stop();
747 }
748 
755 void Ihm::error(QMediaPlayer::Error error)
756 {
757  qDebug() << Q_FUNC_INFO << player->errorString() << error;
759 }
760 
766 void Ihm::initialiserAffichageTournois(QString modeJeu, QString nomTournois)
767 {
768  ui->tournoisNom->setText("Tournoi " + nomTournois);
769  ui->modeDeJeuTournois->setText(modeJeu);
770 
771  ui->nomJoueurTournois1->setText(darts->getListJoueur()[darts->getPremierJoueur()].getNom());
772  ui->nomJoueurTournois2->setText(darts->getListJoueur()[darts->getDernierJoueur()].getNom());
773 
774  ui->scoreJoueurTournois1->setText(darts->getListJoueur()[darts->getPremierJoueur()].getNom() + "\n⇓\n" + QString::number(darts->getListJoueur()[darts->getPremierJoueur()].getScore()));
775  ui->scoreJoueurTournois2->setText(darts->getListJoueur()[darts->getDernierJoueur()].getNom() + "\n⇓\n" + QString::number(darts->getListJoueur()[darts->getDernierJoueur()].getScore()));
776 
777  ui->moyenneJoueurTournois1->setText(darts->getListJoueur()[darts->getPremierJoueur()].getNom() + "\n⇓\n0" );
778  ui->moyenneJoueurTournois2->setText(darts->getListJoueur()[darts->getDernierJoueur()].getNom() + "\n⇓\n0" );
779 
780  ui->tournoisManche->setText("Manche " + QString::number(darts->getManche()));
781 
783 }
784 
791 {
792  musique.stop();
793 
795  connect(timerHorloge, SIGNAL(timeout()),this,SLOT(afficherDureePartie())); // Pour le comptage et l'affichage de la durée d'une séance
796 
798 }
799 
806 {
807  ui->scoreJoueurTournois1->setText(darts->getListJoueur()[darts->getPremierJoueur()].getNom() + "\n⇓\n" + QString::number(darts->getListJoueur()[darts->getPremierJoueur()].getScore()));
808  ui->scoreJoueurTournois2->setText(darts->getListJoueur()[darts->getDernierJoueur()].getNom() + "\n⇓\n" + QString::number(darts->getListJoueur()[darts->getDernierJoueur()].getScore()));
809 }
810 
817 {
818  ui->moyenneJoueurTournois1->setText(darts->getListJoueur()[darts->getPremierJoueur()].getNom() + "\n⇓\n" + QString::number(darts->getListJoueur()[darts->getPremierJoueur()].getMoyenneVolee()));
819  ui->moyenneJoueurTournois2->setText(darts->getListJoueur()[darts->getDernierJoueur()].getNom() + "\n⇓\n" +QString::number(darts->getListJoueur()[darts->getDernierJoueur()].getMoyenneVolee()));
820 }
821 
828 {
830  {
831  ui->nomJoueurTournois1->setText("↣ " + darts->getListJoueur()[darts->getPremierJoueur()].getNom() + " ↢");
832  ui->nomJoueurTournois2->setText(darts->getListJoueur()[darts->getDernierJoueur()].getNom());
833  }
834  else
835  {
836  ui->nomJoueurTournois1->setText(darts->getListJoueur()[darts->getPremierJoueur()].getNom());
837  ui->nomJoueurTournois2->setText("↣ " + darts->getListJoueur()[darts->getDernierJoueur()].getNom() + " ↢");
838  }
839 }
840 
846 void Ihm::afficherFinTournois(QString nomGagnant,QString nomTournois,QList<Joueur> joueurs)
847 {
848  QString joueurTournois = "";
849 
850  for(int i = 0 ; i < joueurs.size(); i++)
851  {
852 
853  if(i == 0)
854  {
855  joueurTournois = " 1er ➠ " + joueurs[i].getNom() + "\n";
856  }
857  else
858  {
859  joueurTournois = joueurTournois +" "+ QString::number(i + 1) + "ème ➠ " + joueurs[i].getNom() + "\n";
860  }
861  }
862 
863  ui->winnerTournois->setText("↢ " + nomGagnant + " grand(e) gagnant(e) du tournoi " + nomTournois +" ↣");
864  ui->recapPlaceTournois->setText(joueurTournois);
866 }
867 
874 {
875  ui->labelINfoMatch->setVisible(true);
876 }
void mettreAJourMessageStatut(int typePoint, int point)
Méthode qui met à jour le message de statut de la volée en cours.
Definition: ihm.cpp:230
void miseAJourEtatPartieAttente()
Méthode appelé pour mettre à jour l&#39;état de la partie à Attente.
QList< Joueur > getListJoueur() const
Retourne une liste des joueurs.
Definition: darts.cpp:66
void stateChanged(QMediaPlayer::State state)
Méthode appelée quand l&#39;état de la vidéo change.
Definition: ihm.cpp:730
Communication * communication
objet communication
Definition: ihm.h:54
void mettreAJourCible()
Méthode qui reinitialise l&#39;affichage de la cible.
Definition: ihm.cpp:619
void afficherFinTournois(QString nomGagnant, QString nomTournois, QList< Joueur > joueurs)
Méthode qui gère l&#39;affichage quand le tournoi est terminé
Definition: ihm.cpp:846
void jouerSon(QString son)
Méthode qui permet de jouer un son.
Definition: ihm.cpp:645
QPixmap sauvegardeImpactEncours
sauvegarde le QPixmap de l&#39;état de la cible
Definition: ihm.h:60
void lancerRegle(QString regle)
Méthode qui lance la vidéo explicative des regles suivant le type de jeu.
Definition: ihm.cpp:678
void allerPageSuivante()
Méthode qui permet de changer de QStackedWidget avec la suivante.
Definition: ihm.cpp:455
Definition: ihm.h:34
void mettreAJourJoueurTournoi()
Méthode qui initialise l&#39;affichage du mode et des joueurs de la partie.
Definition: ihm.cpp:827
void allerPagePrecedente()
Méthode qui permet de changer de QStackedWidget avec la Précédente.
Definition: ihm.cpp:478
QMediaPlayer * player
objet player
Definition: ihm.h:64
void afficherVoleeAnnulee()
Méthode qui affiche le message de statut "volée annulée".
Definition: ihm.cpp:368
void mettrePausePartie()
Mets en pause le chronométrage de la partiee.
Definition: ihm.cpp:571
QSound musiquePause
objet musiquePause
Definition: ihm.h:57
void mettreAJourMoyenneVolee()
Méthode qui initialise l&#39;affichage du mode et des joueurs de la partie.
Definition: ihm.cpp:305
QSound musique
objet musique
Definition: ihm.h:56
Solution * getSolution() const
retourne l&#39;objet solution
Definition: darts.cpp:143
void initialiserAffichageTournois(QString modeJeu, QString nomTournois)
Méthode qui initialise l&#39;affichage du tournois.
Definition: ihm.cpp:766
Ui::Ihm * ui
object de notre Ihm
Definition: ihm.h:52
int getPointVolees() const
Retourne la manche.
Definition: darts.cpp:55
void finirPartie(QString gagnant, int voleeMaxJoueur, bool tournois)
Méthode qui met à jour l&#39;affichage quand la partie est fini.
Definition: ihm.cpp:381
void initialiserEvenements()
Méthode qui initialise les connexion signals/slots de Qt.
Definition: ihm.cpp:75
void afficherPartie()
Méthode qui met a jour le mode de jeu et la page actif.
Definition: ihm.cpp:348
#define CHEMIN_FICHIER_MUSIQUE
Définit le chemin pour les sons.
Definition: ihm.h:32
int getManche() const
Retourne la manche.
Definition: darts.cpp:44
int sauverEtatPartie
Contient l&#39;état de la partie avant l&#39;affichage des règles.
Definition: ihm.h:59
int getPremierJoueur() const
Retourne le premier Joueur a jouer.
Definition: darts.cpp:110
~Ihm()
Destructeur de la classe Ihm.
Definition: ihm.cpp:64
void fermerApplication()
Méthode qui permet de quitter l&#39;application.
Definition: ihm.cpp:492
#define ZERO_POINT
Definition: darts.h:21
void miseAJourEtatPartiePause()
Méthode appelé pour mettre à jour l&#39;état de la partie à Pause.
void afficherPretLancerTournois()
Definition: ihm.cpp:522
void demarrer()
Méthode qui démarre le serveur.
QString messageStatut
contient le message de statut qui est affiché
Definition: ihm.h:61
Page
Définit les différentes pages de l&#39;IHM.
Definition: ihm.h:72
#define TRIPLE_POINT
Definition: darts.h:18
void afficherImpact(int typePoint, int point)
Méthode qui affiche la cible correspondante à l&#39;impact (si fichier Image Impact et disponible) et les...
Definition: ihm.cpp:202
void afficherInformationTournois()
Méthode qui gère l&#39;affichage des informations du tournoi.
Definition: ihm.cpp:873
QTimer * timerHorloge
objet timerHorloge
Definition: ihm.h:53
void afficherDureePartie()
Affiche la durée d&#39;une Seance(slot)
Definition: ihm.cpp:533
void mettreAJourManche()
Méthode qui met à jour le numero de la manche.
Definition: ihm.cpp:189
void initialiserHorloge()
initialise l&#39;horloge pour un affichage périodique
Definition: ihm.cpp:607
Darts * darts
objet darts
Definition: ihm.h:55
QVideoWidget * videoWidget
objet videoWidget
Definition: ihm.h:65
Déclaration de la classe Darts (Module Ecran-DARTS)
Definition: darts.h:33
void afficherNouvellePartie()
Méthode qui met à jour l&#39;affichage pour lancer une nouvelle partie.
Definition: ihm.cpp:406
void mettreAJoursolution(QString solution)
Affiche les solutions possibles pour finir la parties.
Definition: ihm.cpp:559
void mettreAJourMoyenneVoleeTournois()
Méthode qui met a jour la moyenne des Volee du joueur.
Definition: ihm.cpp:816
int getJoueurActif() const
Retourne le numéro du joueur actif.
Definition: darts.cpp:88
void mettreAJourJoueur()
Méthode qui initialise l&#39;affichage du mode et des joueurs de la partie.
Definition: ihm.cpp:258
void testerEtatPartie()
Méthode appelée pour remettre l&#39;état dans lequel était la partie avant l&#39;affichage des règles...
Definition: ihm.cpp:696
void StopperLectureRegle()
methode qui stop la lecture de la musique
Definition: ihm.cpp:744
QString getModeDeJeu() const
Retourne le mode de jeu.
Definition: darts.cpp:132
void relancerpartie()
relancer le chronométrage de la partie
Definition: ihm.cpp:592
Déclaration de la classe Ihm (Module Ecran-DARTS)
Definition: ihm.h:43
void allerPage(Ihm::Page page)
Méthode qui permet de changer de QStackedWidget avec la Précédente.
Definition: ihm.cpp:468
void mettreAJourScore()
Méthode qui met à jour le score dans L&#39;ihm.
Definition: ihm.cpp:151
int getEtatPartie()
Méthode qui permet de recuperer l&#39;etat de la partie.
void attribuerRaccourcisClavier()
Méthode qui initialise les raccourcis clavier.
Definition: ihm.cpp:112
Déclaration de la classe Communication via la liaison Bluetooth (Module Ecran-DARTS) ...
Definition: communication.h:41
void mettreAJourScoreTournois()
methode qui met a jour le score des joueurs des tournois
Definition: ihm.cpp:805
void miseAJourEtatPartieFin()
Slot appelé pour mettre à jour l&#39;état de la partie à Fin.
void lancerTournois()
methode qui affiche le l&#39;ecran de tournois
Definition: ihm.cpp:790
void miseAJourEtatPartieEnCours()
Slot appelé pour mettre à jour l&#39;état de la partie à EnCours.
Déclaration de la classe Ihm (Module Ecran-DARTS)
#define PERIODE_HORLOGE
Définit la périodicité de l&#39;horloge en millisecondes.
Definition: ihm.h:26
int getNbVolees() const
Retourne le nombre de volées de la partie.
Definition: darts.cpp:99
void error(QMediaPlayer::Error error)
Méthode appelée quand il y a une erreur de vidéo.
Definition: ihm.cpp:755
int getDernierJoueur() const
Retourne le dernier joueur a jouer.
Definition: darts.cpp:121
#define DOUBLE_POINT
Definition: darts.h:19
La classe QWidget est la classe de base de tous les objets graphiques d&#39;interface utilisateur...
int compteurDureePartie
compteur de secondes pour la durée d&#39;une séance
Definition: ihm.h:58
void miseAJourEtatPartieRegle()
Méthode appelé pour mettre à jour l&#39;état de la partie à regle.
void actualiserHeure()
Méthode qui met a jour l&#39;heure sur l&#39;application.
Definition: ihm.cpp:136
void afficherAttenteConnexion()
Méthode qui permet de mettre a jour le message de status "appareil deconnecté".
Definition: ihm.cpp:512
void afficherAttenteConfiguration()
Méthode qui permet de mettre a jour le message de status "nouvelle appareil connecté".
Definition: ihm.cpp:502
Ihm(QWidget *parent=nullptr)
Constructeur de la classe Ihm.
Definition: ihm.cpp:26
void initialiserAffichageRegle()
Méthode qui initialise l&#39;affichage vidéo des règles.
Definition: ihm.cpp:660