Эх сурвалжийг харах

Merge branch 'differents_jeux' into 'master'

Differents jeux

See merge request Sangfroid/ChronoCheckMate!1
François D 6 жил өмнө
parent
commit
64f2e1ed70
7 өөрчлөгдсөн 125 нэмэгдсэн , 30 устгасан
  1. 4 2
      ChronoCheckMate.pro
  2. 12 4
      Chronometre.cpp
  3. 7 1
      Chronometre.h
  4. 51 0
      Dialog.cpp
  5. 30 0
      Dialog.h
  6. 19 23
      MaFenetre.cpp
  7. 2 0
      MaFenetre.h

+ 4 - 2
ChronoCheckMate.pro

@@ -19,5 +19,7 @@ DEFINES += QT_DEPRECATED_WARNINGS
 #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
 
 # Input
-HEADERS += Chronometre.h MaFenetre.h
-SOURCES += Chronometre.cpp MaFenetre.cpp main.cpp
+HEADERS += Chronometre.h MaFenetre.h \
+    Dialog.h
+SOURCES += Chronometre.cpp MaFenetre.cpp main.cpp \
+    Dialog.cpp

+ 12 - 4
Chronometre.cpp

@@ -30,9 +30,10 @@
 #include <QFont>
 #include <QTime>
 
-Chronometre::Chronometre (const QString & nom , QWidget * parent = 0) :
+Chronometre::Chronometre (const QString & nom , int tempsDepart, QWidget * parent = nullptr) :
     QGroupBox (nom , parent),
-    ms(0)
+    ms(1000*60*tempsDepart),
+    msTempsDepart(1000*60*tempsDepart)
 {
     setFlat(false);
 
@@ -60,8 +61,15 @@ void Chronometre::modifierNomJoueur(QString joueur) {
     setTitle(joueur);
 }
 
+void Chronometre::definirTemps(int tempsDepart) {
+    msTempsDepart = tempsDepart*60*1000;
+}
+
 void Chronometre::refresh () {
-    ms += 10;
+    ms -= 10;
+    if (ms <= 0) {
+        emit fin();
+    }
 	affichage ();
 }
 
@@ -83,7 +91,7 @@ void Chronometre::reinit () {
 	if (timer->isActive()) {
 		timer->stop();
 	}
-    ms  = 0;
+    ms  = msTempsDepart;
 	affichage();
 }
 

+ 7 - 1
Chronometre.h

@@ -36,19 +36,25 @@ class Chronometre : public QGroupBox {
 	Q_OBJECT
 	
 	public:
-	Chronometre (const QString & nom , QWidget * parent);
+    Chronometre (const QString & nom , int tempsDepart, QWidget * parent);
 	void start ();
 	void stop ();
 	void affichage ();
 	void reinit ();
 	void basculer ();
     void modifierNomJoueur (QString joueur);
+    void definirTemps (int tempsDepart);
+
+    signals:
+    void fin();
+
 
     private slots:
     void refresh ();
 	
 	private:
     int ms;
+    int msTempsDepart;
 	QTimer *timer;
     QTime  *temps;
     QHBoxLayout *ecranLayout;

+ 51 - 0
Dialog.cpp

@@ -0,0 +1,51 @@
+#include "Dialog.h"
+#include <QBoxLayout>
+#include <QLineEdit>
+#include <QSpinBox>
+#include <QDialogButtonBox>
+#include <QLabel>
+
+Dialog::Dialog(QString nom1, QString nom2, int tempsDepart, QWidget *parent) :
+    QDialog(parent)
+{
+    QHBoxLayout *layoutLineEdit = new QHBoxLayout;
+    QHBoxLayout *layoutTemps    = new QHBoxLayout;
+    QVBoxLayout *layoutDialog = new QVBoxLayout;
+    QDialogButtonBox *boutonJouer = new QDialogButtonBox (QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
+    QLabel *labelTempsDepart= new QLabel("Temps départ (minutes)");
+    spinTempsDepart     = new QSpinBox;
+    spinTempsDepart->setMinimum(0);
+    spinTempsDepart->setMaximum(300);
+    spinTempsDepart->setValue(tempsDepart);
+    joueur1LineEdit = new QLineEdit(nom1 , this);
+    joueur2LineEdit = new QLineEdit(nom2 , this);
+    joueur1LineEdit->selectAll();
+
+    layoutLineEdit->addWidget(joueur1LineEdit);
+    layoutLineEdit->addWidget(joueur2LineEdit);
+    layoutTemps->addWidget(labelTempsDepart);
+    layoutTemps->addWidget(spinTempsDepart);
+    layoutDialog->addLayout(layoutTemps);
+    layoutDialog->addLayout(layoutLineEdit);
+    layoutDialog->addWidget(boutonJouer);
+    setLayout(layoutDialog);
+
+    QObject::connect(boutonJouer , SIGNAL(accepted()) , this, SLOT(accept()));
+    QObject::connect(boutonJouer , SIGNAL(rejected()) , this, SLOT(close()));
+}
+
+Dialog::~Dialog() {
+
+}
+
+QString Dialog::joueur1 () const {
+    return joueur1LineEdit->text();
+}
+
+QString Dialog::joueur2 () const {
+    return joueur2LineEdit->text();
+}
+
+int Dialog::tempsDepart () const {
+    return spinTempsDepart->value();
+}

+ 30 - 0
Dialog.h

@@ -0,0 +1,30 @@
+#ifndef DIALOG_H
+#define DIALOG_H
+
+#include <QDialog>
+class QLineEdit;
+class QSpinBox;
+class QString;
+
+class Dialog : public QDialog
+{
+    Q_OBJECT
+public:
+    explicit Dialog(QString nom1, QString nom2, int tempsDepart, QWidget *parent = nullptr);
+    ~Dialog();
+    QString joueur1 () const;
+    QString joueur2 () const;
+    int tempsDepart () const;
+
+signals:
+
+public slots:
+
+private:
+    QLineEdit* joueur1LineEdit;
+    QLineEdit* joueur2LineEdit;
+    QSpinBox*  spinTempsDepart;
+
+};
+
+#endif // DIALOG_H

+ 19 - 23
MaFenetre.cpp

@@ -22,6 +22,7 @@
  
 #include "MaFenetre.h"
 #include "Chronometre.h"
+#include "Dialog.h"
 #include <QMenuBar>
 #include <QHBoxLayout>
 #include <QVBoxLayout>
@@ -32,17 +33,19 @@
 #include <QDialog>
 #include <QLineEdit>
 #include <QDialogButtonBox>
+#include <QMessageBox>
 
 MaFenetre::MaFenetre() :
     QMainWindow (),
     marche(false),
     nomJoueur1 ("Joueur 1"),
-    nomJoueur2 ("Joueur 2")
+    nomJoueur2 ("Joueur 2"),
+    tempsDepart(5)
 {
     QWidget *centralWidget = new QWidget;
 
-    chrono1 = new Chronometre(nomJoueur1 , this);
-    chrono2 = new Chronometre(nomJoueur2 , this);
+    chrono1 = new Chronometre(nomJoueur1 , tempsDepart, this);
+    chrono2 = new Chronometre(nomJoueur2 , tempsDepart, this);
     boutonInverser = new QPushButton ("<->");
     boutonInverser->setMinimumWidth(50);
     boutonInverser->setMaximumWidth(50);
@@ -98,6 +101,9 @@ MaFenetre::MaFenetre() :
     QObject::connect (actionNouveau, SIGNAL(triggered()) , this , SLOT(init()));
     QObject::connect (actionChangerNom , SIGNAL(triggered()), this, SLOT(definirNomJoueurs()));
     QObject::connect (actionQuitter , SIGNAL(triggered()) , qApp , SLOT(quit()));
+    QObject::connect (chrono1, SIGNAL(fin()), this, SLOT(arreter()));
+    QObject::connect (chrono2, SIGNAL(fin()), this, SLOT(arreter()));
+
 }
 
 ///////////////// Méthodes ////////////////////
@@ -130,7 +136,11 @@ void MaFenetre::demarrer () {
 void MaFenetre::modifierNomJoueurs() {
     chrono1->modifierNomJoueur(nomJoueur1);
     chrono2->modifierNomJoueur(nomJoueur2);
+}
 
+void MaFenetre::modifierTemps() {
+    chrono1->definirTemps(tempsDepart);
+    chrono2->definirTemps(tempsDepart);
 }
 
 void MaFenetre::switcher () {
@@ -155,26 +165,12 @@ void MaFenetre::init () {
 }
 
 void MaFenetre::definirNomJoueurs() {
-    QDialog *dialog = new QDialog (this);
-    QHBoxLayout *layoutLineEdit = new QHBoxLayout;
-    QVBoxLayout *layoutDialog = new QVBoxLayout;
-    QDialogButtonBox *boutonJouer = new QDialogButtonBox (QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
-    QLineEdit *joueur1LineEdit = new QLineEdit(nomJoueur1 , this);
-    QLineEdit *joueur2LineEdit = new QLineEdit(nomJoueur2 , this);
-    joueur1LineEdit->selectAll();
-
-    layoutLineEdit->addWidget(joueur1LineEdit);
-    layoutLineEdit->addWidget(joueur2LineEdit);
-    layoutDialog->addLayout(layoutLineEdit);
-    layoutDialog->addWidget(boutonJouer);
-    dialog->setLayout(layoutDialog);
-
-    QObject::connect(boutonJouer , SIGNAL(accepted()) , dialog, SLOT(accept()));
-    QObject::connect(boutonJouer , SIGNAL(rejected()) , dialog, SLOT(close()));
-
-    if (dialog->exec()) {
-        nomJoueur1 = joueur1LineEdit->text();
-        nomJoueur2 = joueur2LineEdit->text();
+    Dialog dialog(nomJoueur1, nomJoueur2, tempsDepart, this);
+    if (dialog.exec()) {
+        nomJoueur1 = dialog.joueur1();
+        nomJoueur2 = dialog.joueur2();
+        tempsDepart = dialog.tempsDepart();
+        modifierTemps();
         modifierNomJoueurs();
     }
 }

+ 2 - 0
MaFenetre.h

@@ -38,6 +38,7 @@ class MaFenetre : public QMainWindow { // On hérite de QMainWindow (IMPORTANT)
 	MaFenetre();
     void etatBoutons (bool etatBoutonStart , bool etatBoutonStop);
     void modifierNomJoueurs ();
+    void modifierTemps();
 
 	private slots:
 	void demarrer ();
@@ -53,6 +54,7 @@ class MaFenetre : public QMainWindow { // On hérite de QMainWindow (IMPORTANT)
 	bool marche;
     QString nomJoueur1;
     QString nomJoueur2;
+    int     tempsDepart;
 	Chronometre *chrono1;
 	Chronometre *chrono2;
     QLineEdit   *joueur1LineEdit;