From 3f5856d200b137386cf9b062e01ef151798125da Mon Sep 17 00:00:00 2001 From: Ulysse Durand <ulysse.durand@ens-lyon.fr> Date: Fri, 11 Apr 2025 14:45:31 +0200 Subject: [PATCH] ne marche pas --- motus/CMakeLists.txt | 5 +++-- motus/GameWindow.qml | 45 +++++++++++++++++++---------------------- motus/Main.qml | 3 ++- motus/basecase.cpp | 5 ----- motus/basecase.h | 18 ----------------- motus/brain.cpp | 5 +++++ motus/caseclavier.cpp | 3 --- motus/caseclavier.h | 15 -------------- motus/grillemanager.cpp | 24 ++++++++++++++++++++++ motus/grillemanager.h | 27 +++++++++++++++++++++++++ motus/jeu.cpp | 5 +++++ motus/jeu.h | 1 + motus/main.cpp | 9 +++++++++ motus/vraiecase.cpp | 22 +++++++++++--------- motus/vraiecase.h | 23 ++++++++++++--------- 15 files changed, 124 insertions(+), 86 deletions(-) delete mode 100644 motus/basecase.cpp delete mode 100644 motus/basecase.h delete mode 100644 motus/caseclavier.cpp delete mode 100644 motus/caseclavier.h create mode 100644 motus/grillemanager.cpp create mode 100644 motus/grillemanager.h diff --git a/motus/CMakeLists.txt b/motus/CMakeLists.txt index a1e6262..a166b2f 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 6f5bf26..65ce47a 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 ceab2ec..967f86e 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 ae75e0d..0000000 --- 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 0e411cf..0000000 --- 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 54e563d..d0513cf 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 0a413f1..0000000 --- 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 3eabc0c..0000000 --- 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 0000000..d765f83 --- /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 0000000..15caaa7 --- /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 ab1b3ee..e077dc3 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 53c0005..bf308bf 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 fb39116..bc6161e 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 1485664..c2efba7 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 cc0c752..46bd192 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; }; -- GitLab