diff --git a/motus/CMakeLists.txt b/motus/CMakeLists.txt index a1e6262b5fc177c3e697b16dea393caaf42e9217..a166b2f1b3f9a1ffd8a0672b734250b735018d59 100644 --- a/motus/CMakeLists.txt +++ b/motus/CMakeLists.txt @@ -19,9 +19,9 @@ qt_add_qml_module(appmotus Main.qml SOURCES brain.h brain.cpp SOURCES ligne.h ligne.cpp - SOURCES basecase.h basecase.cpp + SOURCES SOURCES vraiecase.h vraiecase.cpp - SOURCES caseclavier.h caseclavier.cpp + SOURCES SOURCES nowordexception.h nowordexception.cpp RESOURCES Resources.qrc SOURCES fullligneexception.h fullligneexception.cpp @@ -35,6 +35,7 @@ qt_add_qml_module(appmotus RESOURCES QML_FILES GameWindow.qml SOURCES jeu.h jeu.cpp + SOURCES grillemanager.h grillemanager.cpp ) # Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1. diff --git a/motus/GameWindow.qml b/motus/GameWindow.qml index 6f5bf26fc6766486659d20454279d587aa13d6f9..65ce47a22d6177aed576d3fa59bf91efb07d9c5d 100644 --- a/motus/GameWindow.qml +++ b/motus/GameWindow.qml @@ -12,33 +12,30 @@ Item { color: "#ffffff" anchors.fill: parent - // Zone où le mot est affiché - Row { - id: motDisplay - spacing: 10 - anchors.top: parent.top - anchors.horizontalCenter: parent.horizontalCenter - anchors.topMargin: 50 - - Repeater { - model: jeu.motAffiche.split(" ") // Divise la chaîne en lettres et "_" - - Rectangle { - width: 50 - height: 50 - border.color: "#000000" - border.width: 2 - radius: 5 - color: "#eeeeee" - - Text { - anchors.centerIn: parent - text: modelData - font.pixelSize: 20 + Grid { + id: gridView + anchors.top: parent.top + anchors.left: parent.left + columns: 5 + spacing: 5 + + Repeater { + model: grilleManager.cases + Rectangle { + width: 50 + height: 50 + color: modelData.etat === 0 ? "lightgray" : + modelData.etat === 1 ? "yellow" : "green" + border.color: "black" + + Text { + anchors.centerIn: parent + text: modelData.letter + font.bold: true + } } } } - } Clavier { id: clavier diff --git a/motus/Main.qml b/motus/Main.qml index ceab2ecfadb4b5a9e036c352c33a1eace7848b5c..967f86e253296349de04ea613e3cc297b54db94d 100644 --- a/motus/Main.qml +++ b/motus/Main.qml @@ -38,7 +38,8 @@ Window { x: 360 y: 624 mouseArea.onClicked:{ - pageLoader.source = "GameWindow.qml" + pageLoader.source = "GameWindow.qml"; + jeu.initGame(); } } diff --git a/motus/basecase.cpp b/motus/basecase.cpp deleted file mode 100644 index ae75e0d75fdf161839888aa6ffae4653343fba34..0000000000000000000000000000000000000000 --- a/motus/basecase.cpp +++ /dev/null @@ -1,5 +0,0 @@ -#include "basecase.h" - -BaseCase::BaseCase() {} - -int BaseCase::isLetterIn() {} diff --git a/motus/basecase.h b/motus/basecase.h deleted file mode 100644 index 0e411cf7a1c6df4b4ff042e4c6625f8430e5bb60..0000000000000000000000000000000000000000 --- a/motus/basecase.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef BASECASE_H -#define BASECASE_H - -#include <QObject> - -class BaseCase : public QObject -{ - Q_OBJECT -public: - BaseCase(); - int isLetterIn(); - -private: - char lettre; - -}; - -#endif // BASECASE_H diff --git a/motus/brain.cpp b/motus/brain.cpp index 54e563dba57b575bb00bb220cd2ac848d36e65bf..d0513cf4a150f761daefe314541059a92f738f31 100644 --- a/motus/brain.cpp +++ b/motus/brain.cpp @@ -3,6 +3,7 @@ #include <random> #include <iostream> #include <filesystem> +#include "grillemanager.h" using namespace std; namespace fs = std::filesystem; @@ -34,6 +35,7 @@ vector<string> Brain::getTxtFiles() { } void Brain::entreLettre(char lettre) { + std::cout<<lettre<<std::endl; lignes[nbEssais]->entreLettre(lettre); } @@ -84,6 +86,9 @@ void Brain::initGame() { catch (NoWordException e) { cout << e.what() << endl; } + + GrilleManager grille; + grille.createGrid(mNbEssaisMax, mTailleMot); } void Brain::validateWord() { diff --git a/motus/caseclavier.cpp b/motus/caseclavier.cpp deleted file mode 100644 index 0a413f103bf2ba99367f7e923e197e1e62679edb..0000000000000000000000000000000000000000 --- a/motus/caseclavier.cpp +++ /dev/null @@ -1,3 +0,0 @@ -#include "caseclavier.h" - -CaseClavier::CaseClavier() : BaseCase() {} diff --git a/motus/caseclavier.h b/motus/caseclavier.h deleted file mode 100644 index 3eabc0c6cba99b616f4044ca9ea80269470b493a..0000000000000000000000000000000000000000 --- a/motus/caseclavier.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef CASECLAVIER_H -#define CASECLAVIER_H - -#include <QObject> - -#include "basecase.h" - -class CaseClavier : public BaseCase -{ - Q_OBJECT -public: - CaseClavier(); -}; - -#endif // CASECLAVIER_H diff --git a/motus/grillemanager.cpp b/motus/grillemanager.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d765f83ab3c69be180a26c325ede36ec6222e58d --- /dev/null +++ b/motus/grillemanager.cpp @@ -0,0 +1,24 @@ +#include "grillemanager.h" + +GrilleManager::GrilleManager(QObject *parent) : QObject(parent) { + // Initialisation avec une grille vide + m_cases.clear(); +} + +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('A' + (i % 26)); // Exemple : lettres de A à Z + vraieCase->setEtat(i % 3); // Exemple : état cyclique (0,1,2) + m_cases.append(vraieCase); + } + + emit casesChanged(); +} + +QQmlListProperty<VraieCase> GrilleManager::getCases() { + return QQmlListProperty<VraieCase>(this, &m_cases); // Passer un pointeur à la liste +} diff --git a/motus/grillemanager.h b/motus/grillemanager.h new file mode 100644 index 0000000000000000000000000000000000000000..15caaa78aad7e79fc60c88d8f196c8e8dc452c02 --- /dev/null +++ b/motus/grillemanager.h @@ -0,0 +1,27 @@ +#ifndef GRILLEMANAGER_H +#define GRILLEMANAGER_H + +#include <QObject> +#include <QQmlListProperty> +#include "vraiecase.h" + +class GrilleManager : public QObject { + Q_OBJECT + 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(); + +signals: + void casesChanged(); + +private: + QList<VraieCase*> m_cases; +}; + +#endif // GRILLEMANAGER_H diff --git a/motus/jeu.cpp b/motus/jeu.cpp index ab1b3eefb6ebf7ab6f0aa5970b3e9caa9f5c13dc..e077dc3f39f099fa8a9769ed34d43073a23c6c19 100644 --- a/motus/jeu.cpp +++ b/motus/jeu.cpp @@ -24,4 +24,9 @@ QString Jeu::getMotAffiche() { void Jeu::onClavierClick(QString lettre) { std::cout << lettre.toStdString() << " est appuyée"<< std::endl; + brain.entreLettre(lettre.toStdString()[0]); +} + +void Jeu::initGame() { + brain.initGame(); } diff --git a/motus/jeu.h b/motus/jeu.h index 53c0005f17d693ce3daf0040d351265295034ddf..bf308bf4618bc6aa95a182e0738f0192180f84d0 100644 --- a/motus/jeu.h +++ b/motus/jeu.h @@ -12,6 +12,7 @@ public: explicit Jeu(QObject *parent = nullptr); QString getMotAffiche(); Q_INVOKABLE void onClavierClick(QString lettre); + Q_INVOKABLE void initGame(); signals: void motChanged(); diff --git a/motus/main.cpp b/motus/main.cpp index fb3911630b17432a18affe6d9f5da8b75055b8a8..bc6161ea35d4fefbb962ae21b11e812f59695384 100644 --- a/motus/main.cpp +++ b/motus/main.cpp @@ -2,11 +2,20 @@ #include <QQmlApplicationEngine> #include <QQmlContext> #include "jeu.h" +#include "vraiecase.h" +#include "grillemanager.h" int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQmlApplicationEngine engine; + + qmlRegisterType<VraieCase>("motus", 1, 0, "VraieCase"); + qmlRegisterType<GrilleManager>("motus", 1, 0, "GrilleManager"); + + GrilleManager grilleManager; + engine.rootContext()->setContextProperty("grilleManager", &grilleManager); + Jeu jeu; engine.rootContext()->setContextProperty("jeu", &jeu); diff --git a/motus/vraiecase.cpp b/motus/vraiecase.cpp index 148566460b7fe09104b49a9c65f45d08b89e3513..c2efba705d1e30f507ebc0c5f0f6c47478377976 100644 --- a/motus/vraiecase.cpp +++ b/motus/vraiecase.cpp @@ -1,15 +1,19 @@ #include "vraiecase.h" -VraieCase::VraieCase() : BaseCase() {} - -char VraieCase::getLetter() {return lettre;} -void VraieCase::setLetter(char letter) {lettre = letter;} +VraieCase::VraieCase(QObject *parent) : lettre(' '), etat(0) {} +char VraieCase::getLetter() const { return lettre; } +void VraieCase::setLetter(char letter) { + if (lettre != letter) { + lettre = letter; + emit letterChanged(); + } +} -// etat 0 : rien -// etat 1 : lettre bonne mais pas bonne position -// etat 2 : lettre bonne et bonne position +int VraieCase::getEtat() const { return etat; } void VraieCase::setEtat(int etat) { - //TODO change la couleur de la case - etat = etat; + if (this->etat != etat) { + this->etat = etat; + emit etatChanged(); + } } diff --git a/motus/vraiecase.h b/motus/vraiecase.h index cc0c752c38c370083f8a9ddb97dae551b5158b47..46bd1928eb797a945b5cb7d2ef854dcc27806d39 100644 --- a/motus/vraiecase.h +++ b/motus/vraiecase.h @@ -3,20 +3,25 @@ #include <QObject> -#include "basecase.h" - -class Ligne; - -class VraieCase : public BaseCase -{ +class VraieCase : public QObject { Q_OBJECT + Q_PROPERTY(char letter READ getLetter WRITE setLetter NOTIFY letterChanged) + Q_PROPERTY(int etat READ getEtat WRITE setEtat NOTIFY etatChanged) + public: - VraieCase(); - char getLetter(); + explicit VraieCase(QObject *parent = nullptr); + + char getLetter() const; void setLetter(char letter); + + int getEtat() const; void setEtat(int etat); + +signals: + void letterChanged(); + void etatChanged(); + private: - int position; char lettre; int etat; };