diff --git a/motus/brain.cpp b/motus/brain.cpp index d0513cf4a150f761daefe314541059a92f738f31..fbf1454613953f751f82e0317bd8ab36eb3836e6 100644 --- a/motus/brain.cpp +++ b/motus/brain.cpp @@ -4,6 +4,8 @@ #include <iostream> #include <filesystem> #include "grillemanager.h" +#include <QString> + using namespace std; namespace fs = std::filesystem; @@ -74,23 +76,27 @@ 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(); - for (int i=0;i<mNbEssaisMax;i++) { + for (int i = 0; i < mNbEssaisMax; i++) { 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 Ligne* laligne = lignes[nbEssais]; diff --git a/motus/grillemanager.cpp b/motus/grillemanager.cpp index a60e35f8e10f7fd9e27caf9270b2ebbbedbf3284..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(QChar('A' + (i % 26))); - vraieCase->setEtat(i % 3); // 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 1f788ce662c5ec42727cba6a75f155295ff3dda9..3fb7f0e8daddc1f3aa310c65698173211a3b7e8e 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) { std::cout << lettre.toStdString() << " est appuyée"<< std::endl; brain.entreLettre(lettre.toStdString()[0]); @@ -32,8 +31,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/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();