diff --git a/motus/brain.cpp b/motus/brain.cpp index b1610c12e9153d1dbb734d90ac171c6e6ad375e0..da614aedfb04f4443dac79ec45ec4c0f68aaca56 100644 --- a/motus/brain.cpp +++ b/motus/brain.cpp @@ -4,7 +4,12 @@ #include <iostream> #include <filesystem> #include "grillemanager.h" +<<<<<<< HEAD #include "fullligneexception.h" +======= +#include <QString> + +>>>>>>> e6f8b0eb13207f90ae4ed37356359f928e941f2a using namespace std; namespace fs = std::filesystem; @@ -91,8 +96,8 @@ void Brain::setNombreEssais(int nbEssais) {mNbEssaisMax = nbEssais;} void Brain::setTailleMots(int tailleMot) {mTailleMot = tailleMot;} string Brain::getMot() {return mot;} + void Brain::initGame() { - // Appelé lorsqu'on appuie sur le bouton Start Game try { trouveMot(); cout << "Réponse : ["; @@ -104,15 +109,19 @@ void Brain::initGame() { lignes.push_back(new Ligne(getMot())); lignes[i]->initLigne(); } - } - catch (NoWordException e) { + + // Convertir std::string (getMot()) en QString + QString motQString = QString::fromStdString(getMot()); // Conversion de std::string en QString + GrilleManager grille(motQString); // Passer le QString à GrilleManager + grille.createGrid(mNbEssaisMax, mTailleMot); // Créer la grille + } catch (NoWordException e) { cout << e.what() << endl; } - - GrilleManager grille; - grille.createGrid(mNbEssaisMax, mTailleMot); } + + + void Brain::validateWord() { // Appelé lorsqu'on appuie sur le bouton validate du clavier cout << "Validation de la ligne !" << endl; diff --git a/motus/grillemanager.cpp b/motus/grillemanager.cpp index 094d663c1fcda3d7ade0f37d700752ddb18102c8..2150363d60fe233c19b9ef03d3bc5d2168029ad1 100644 --- a/motus/grillemanager.cpp +++ b/motus/grillemanager.cpp @@ -1,22 +1,30 @@ #include "grillemanager.h" -GrilleManager::GrilleManager(QObject *parent) : QObject(parent) { - // Initialisation avec une grille vide - m_cases.clear(); +GrilleManager::GrilleManager(const QString &mot, QObject *parent) + : QObject(parent), m_mot(mot) { + // Initialisation de la grille (si tu veux le faire immédiatement dans le constructeur) + createGrid(6, m_mot.length()); // Exemple : 6 essais, longueur du mot } void GrilleManager::createGrid(int rows, int columns) { m_cases.clear(); // Vide la grille avant de la remplir - int totalCases = rows * columns; - for (int i = 0; i < totalCases; ++i) { - auto *vraieCase = new VraieCase(this); - vraieCase->setLetter('_'); // Exemple : lettres de A à Z - vraieCase->setEtat(0); // Exemple : état cyclique (0,1,2) + // Remplir la grille avec des cases + for (int i = 0; i < rows * columns; ++i) { + VraieCase *vraieCase = new VraieCase(this); + + // Si on est à la première case, on met la première lettre du mot, sinon on met '_' + if (i < m_mot.length()) { + vraieCase->setLetter(m_mot[i]); // Conversion automatique depuis QString + } else { + vraieCase->setLetter(QString("_")); // Conversion du char '_' en QString + } + + vraieCase->setEtat(0); // Tu peux définir l'état comme tu veux m_cases.append(vraieCase); } - emit casesChanged(); + emit casesChanged(); // Émettre le signal pour indiquer que la grille a changé } QQmlListProperty<VraieCase> GrilleManager::getCases() { diff --git a/motus/grillemanager.h b/motus/grillemanager.h index 15caaa78aad7e79fc60c88d8f196c8e8dc452c02..970e528665c639289d7fc2ec284f9a2a02cf506c 100644 --- a/motus/grillemanager.h +++ b/motus/grillemanager.h @@ -10,18 +10,16 @@ class GrilleManager : public QObject { Q_PROPERTY(QQmlListProperty<VraieCase> cases READ getCases NOTIFY casesChanged) public: - explicit GrilleManager(QObject *parent = nullptr); - - // Fonction pour créer une grille de taille variable - Q_INVOKABLE void createGrid(int rows, int columns); - - QQmlListProperty<VraieCase> getCases(); + explicit GrilleManager(const QString &mot, QObject *parent = nullptr); // Le mot en argument + void createGrid(int rows, int columns); // Créer la grille + QQmlListProperty<VraieCase> getCases(); // Obtenir les cases signals: void casesChanged(); private: - QList<VraieCase*> m_cases; + QString m_mot; + QList<VraieCase *> m_cases; // Liste des cases de la grille }; #endif // GRILLEMANAGER_H diff --git a/motus/jeu.cpp b/motus/jeu.cpp index 087ccc6f2994376441f2bb8cfe54fc9ad4972065..3376b9b3da72bab81d7aaf8b58eb4aa659325f8f 100644 --- a/motus/jeu.cpp +++ b/motus/jeu.cpp @@ -1,24 +1,23 @@ #include "jeu.h" #include <iostream> -Jeu::Jeu(QObject *parent) : QObject(parent), brain("./") { - mot = QString::fromStdString(brain.getMot()); // ✅ Conversion std::string → QString +Jeu::Jeu(QObject *parent) : QObject(parent), brain("./"), grilleManager("", this) { +} - std::cout << "Mot choisi : " << mot.toStdString() << std::endl; +void Jeu::setMot(const QString& mot) { + this->mot = mot; + grilleManager.createGrid(mot.length(), 1); // Utilise la longueur du mot pour la grille + emit motChanged(); } -QString Jeu::getMotAffiche() { - if (mot.isEmpty()) return ""; - QString affichage = QString(mot.at(0)); - for (int i = 1; i < mot.length(); ++i) { - affichage += " _"; - } - return affichage; +QString Jeu::getMotAffiche() { + return mot; } + void Jeu::onClavierClick(QString lettre) { brain.entreLettre(lettre.toStdString()[0]); } @@ -31,8 +30,8 @@ void Jeu::initGame() { void Jeu::startGame() { brain.setFichierDico("words_alpha.txt"); - brain.setNombreEssais(6); // ou ce que tu veux - brain.setTailleMots(5); // idem + brain.setNombreEssais(6); + brain.setTailleMots(5); brain.initGame(); diff --git a/motus/jeu.h b/motus/jeu.h index c654e817be3193ab9b0c901e558827f4f3698414..da98313e8416d5a0bf64c9534abcec20585d92be 100644 --- a/motus/jeu.h +++ b/motus/jeu.h @@ -16,9 +16,9 @@ public: Q_INVOKABLE void onClavierClick(QString lettre); Q_INVOKABLE void initGame(); Q_INVOKABLE void startGame(); // pour init depuis QML + Q_INVOKABLE void setMot(const QString& mot); // Ajouter cette méthode pour définir le mot GrilleManager* getGrilleManager() { return &grilleManager; } - signals: void motChanged(); diff --git a/motus/ligne.cpp b/motus/ligne.cpp index 4f663f195e5c7e387f51da1b71394d0b2726c363..f7e0050ad75d9f156736928bd736d71e92fa4545 100644 --- a/motus/ligne.cpp +++ b/motus/ligne.cpp @@ -1,15 +1,18 @@ #include "ligne.h" #include "fullligneexception.h" #include "emptyligneexception.h" +<<<<<<< HEAD #include "iostream" #include <cctype> using namespace std; +======= +#include <QString> +>>>>>>> e6f8b0eb13207f90ae4ed37356359f928e941f2a Ligne::Ligne(string bonmot) : bonmot(bonmot), positionCurseur(0) {} - void Ligne::initLigne() { - for (int i=0;i<bonmot.length();i++) { + for (int i = 0; i < bonmot.length(); i++) { contenu.push_back(new VraieCase()); } } @@ -50,7 +53,7 @@ void Ligne::entreLettre(char lettre) { if (positionCurseur == bonmot.length()) { throw FullLigneException(); } - contenu[positionCurseur]->setLetter(lettre); + contenu[positionCurseur]->setLetter(QChar(lettre)); // Conversion ici positionCurseur++; } @@ -59,6 +62,6 @@ void Ligne::supprLettre() { throw EmptyLigneException(); } cout << "Suppression d'une lettre" << endl; - contenu[positionCurseur - 1]->setLetter(' '); + contenu[positionCurseur - 1]->setLetter(QChar(' ')); positionCurseur--; } diff --git a/motus/ligne.h b/motus/ligne.h index d1857af959db83aaf6d888b912f594e3c36e2489..e7600f4f1e253d6feb8af5aa92b57adbf9bb9ba4 100644 --- a/motus/ligne.h +++ b/motus/ligne.h @@ -29,7 +29,7 @@ private: int taille; vector<VraieCase*> contenu; - static bool dansMot(char lettre, string mot); +static bool dansMot(QChar lettre, std::string mot); }; #endif // LIGNE_H diff --git a/motus/main.cpp b/motus/main.cpp index 6fef187ccce7f913c9453b9b29bc3132a2ce8aee..98e34cd2ed777f0acea0d2b6ff974b305ec12b39 100644 --- a/motus/main.cpp +++ b/motus/main.cpp @@ -9,13 +9,14 @@ int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; - qmlRegisterType<VraieCase>("motus", 1, 0, "VraieCase"); qmlRegisterType<GrilleManager>("motus", 1, 0, "GrilleManager"); + // Créer l'objet Jeu sans mot Jeu jeu; engine.rootContext()->setContextProperty("jeu", &jeu); + // Charger l'interface utilisateur (QML) engine.loadFromModule("motus", "Main"); return app.exec(); diff --git a/motus/vraiecase.cpp b/motus/vraiecase.cpp index c2efba705d1e30f507ebc0c5f0f6c47478377976..39e89d78d8680e2606a5ac940e0385fa4966d4d9 100644 --- a/motus/vraiecase.cpp +++ b/motus/vraiecase.cpp @@ -1,19 +1,25 @@ #include "vraiecase.h" -VraieCase::VraieCase(QObject *parent) : lettre(' '), etat(0) {} +VraieCase::VraieCase(QObject *parent) : QObject(parent), lettre(""), etat(0) {} -char VraieCase::getLetter() const { return lettre; } -void VraieCase::setLetter(char letter) { +QString VraieCase::getLetter() const { + return lettre; +} + +void VraieCase::setLetter(const QString &letter) { if (lettre != letter) { lettre = letter; emit letterChanged(); } } -int VraieCase::getEtat() const { return etat; } -void VraieCase::setEtat(int etat) { - if (this->etat != etat) { - this->etat = etat; +int VraieCase::getEtat() const { + return etat; +} + +void VraieCase::setEtat(int e) { + if (etat != e) { + etat = e; emit etatChanged(); } } diff --git a/motus/vraiecase.h b/motus/vraiecase.h index 46bd1928eb797a945b5cb7d2ef854dcc27806d39..b8346da7ec9c022f155d45fe7c455a34f0d55a29 100644 --- a/motus/vraiecase.h +++ b/motus/vraiecase.h @@ -2,17 +2,18 @@ #define VRAIECASE_H #include <QObject> +#include <QString> class VraieCase : public QObject { Q_OBJECT - Q_PROPERTY(char letter READ getLetter WRITE setLetter NOTIFY letterChanged) + Q_PROPERTY(QString letter READ getLetter WRITE setLetter NOTIFY letterChanged) Q_PROPERTY(int etat READ getEtat WRITE setEtat NOTIFY etatChanged) public: explicit VraieCase(QObject *parent = nullptr); - char getLetter() const; - void setLetter(char letter); + QString getLetter() const; + void setLetter(const QString &letter); // Mise à jour du type int getEtat() const; void setEtat(int etat); @@ -22,7 +23,7 @@ signals: void etatChanged(); private: - char lettre; + QString lettre; int etat; };