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;
 };