diff --git a/applicationQT2048/GamePage.qml b/applicationQT2048/GamePage.qml
index 04bce111907c30c952aeabc3b3af8b3c97155fd9..fc79fdf91b4d8b1809ab72e7752e5fd864d96462 100644
--- a/applicationQT2048/GamePage.qml
+++ b/applicationQT2048/GamePage.qml
@@ -112,7 +112,7 @@ FocusScope {  // Permet de capter le focus pour les raccourcis clavier
 
             Text{
                 id: score
-                text:"0"
+                text:gameManager.score
                 color:"white"
                 font.bold: true
                 font.pixelSize: 25
diff --git a/applicationQT2048/gamemanager.cpp b/applicationQT2048/gamemanager.cpp
index 810fd89d94781d8ca71af41fb8c4b1f1b579bdce..5ac116a9ca71610c0149c546057ec9ee754e9bb1 100644
--- a/applicationQT2048/gamemanager.cpp
+++ b/applicationQT2048/gamemanager.cpp
@@ -4,11 +4,14 @@
 
 #include <QDebug>
 
-GameManager::GameManager(QObject *parent) : QObject(parent), grid(4, std::vector<int>(4, 0)) {
+GameManager::GameManager(QObject *parent) : QObject(parent), grid(4, std::vector<int>(4, 0)),m_score(0), m_gameOver(false) {
 
 }
 
 void GameManager::moveLeft() {
+    if (m_gameOver) {  // Si la partie est terminée, ne fais rien
+        return;
+    }
     for (int i = 0; i < 4; i++) {
         std::vector<int> newRow(4, 0);  // Créer une nouvelle ligne vide
         int newPos = 0;  // Position pour insérer un élément non nul (commence par le début)
@@ -43,7 +46,7 @@ void GameManager::moveLeft() {
         grid[i] = newRow;
     }
     emit addRandomElement();
-
+    m_gameOver = isGameOver();
     //Mettre a jour l'état et l'enregistrer
     historyArray.append(gridToJsonArray());
     emit gridChanged();
@@ -51,6 +54,9 @@ void GameManager::moveLeft() {
 }
 
 void GameManager::moveRight() {
+    if (m_gameOver) {  // Si la partie est terminée, ne fais rien
+        return;
+    }
     for (int i = 0; i < 4; i++) {
         std::vector<int> newRow(4, 0);  // Créer une nouvelle ligne vide
         int newPos = 3;  // Position pour insérer un élément non nul (commence par la fin)
@@ -85,6 +91,7 @@ void GameManager::moveRight() {
         grid[i] = newRow;
     }
     emit addRandomElement();
+    m_gameOver = isGameOver();
 
     //Mettre a jour l'état et l'enregistrer
     historyArray.append(gridToJsonArray());
@@ -96,6 +103,9 @@ void GameManager::moveRight() {
 
 
 void GameManager::moveUp() {
+    if (m_gameOver) {  // Si la partie est terminée, ne fais rien
+        return;
+    }
     // Implémentation du mouvement vers le haut
     for (int j = 0; j < 4; j++) {
         std::vector<int> newCol(4, 0);  // Créer une nouvelle ligne vide
@@ -134,6 +144,7 @@ void GameManager::moveUp() {
 
     }
     emit addRandomElement();
+    m_gameOver = isGameOver();
 
     //Mettre a jour l'état et l'enregistrer
     historyArray.append(gridToJsonArray());
@@ -142,6 +153,9 @@ void GameManager::moveUp() {
 }
 
 void GameManager::moveDown() {
+    if (m_gameOver) {  // Si la partie est terminée, ne fais rien
+        return;
+    }
     // Implémentation du mouvement vers le bas
     for (int j = 0; j < 4; j++) {
         std::vector<int> newCol(4, 0);  // Créer une nouvelle ligne vide
@@ -180,6 +194,7 @@ void GameManager::moveDown() {
 
     }
     emit addRandomElement();
+    m_gameOver = isGameOver();
 
     //Mettre a jour l'état et l'enregistrer
     historyArray.append(gridToJsonArray());
@@ -193,6 +208,7 @@ void GameManager::restartGame() {
     //demander pour sauvergarder la partie précédente
 
     enregistrerPartie("partie1");
+    m_gameOver = false;
 
 
     // Réinitialisation des variables
@@ -388,15 +404,37 @@ void GameManager::chargerPartie(QString partieName){
     file.close();
 }
 
+int GameManager::score() const {
+    return m_score;  // Retourne le score actuel
+}
+
 void GameManager::calculscore(){
+    if (m_gameOver) {  // Si la partie est terminée, ne calcule pas le score
+        return;
+    }
+    m_score = 0;
     // Parcourir la grille pour additionner toute les cases
-    int score=0;
     for (int i = 0; i < 4; i++) {
         for (int j = 0; j < 4; j++) {
-            score=grid[i][j]+score;
+            m_score+=grid[i][j];
 
         }
     }
-
+    emit scoreChanged();
 }
 
+bool GameManager::isGameOver() {
+
+    for (int i = 0; i < 4; i++) {
+        for (int j = 0; j < 4; j++) {
+            if (grid[i][j] == 0) {  // Une case vide est trouvée, donc le jeu n'est pas fini
+                return false;
+            }
+            // Vérifier les possibilités de fusion (horizontale et verticale)
+            if ((i < 3 && grid[i][j] == grid[i + 1][j]) || (j < 3 && grid[i][j] == grid[i][j + 1])) {
+                return false;
+            }
+        }
+    }
+    return true;  // Si la grille est pleine et aucune fusion n'est possible, la partie est terminée
+}
diff --git a/applicationQT2048/gamemanager.h b/applicationQT2048/gamemanager.h
index 8e2fd68de7092f134d37e90da2b5b67f22e5d11d..d280f883ff8ba6cbfd386eedf40d84a837599d18 100644
--- a/applicationQT2048/gamemanager.h
+++ b/applicationQT2048/gamemanager.h
@@ -16,6 +16,7 @@ class GameManager : public QObject
 
     Q_PROPERTY(QVector<int> gridValues READ getGridValues NOTIFY gridChanged)
     Q_PROPERTY(QStringList partieHistorique READ getPartieHistorique NOTIFY historiqueChanged)
+    Q_PROPERTY(int score READ score NOTIFY scoreChanged)
 
 public:
     explicit GameManager(QObject *parent = nullptr);
@@ -26,13 +27,16 @@ public:
     Q_INVOKABLE void restartGame();
     Q_INVOKABLE void undo();
     Q_INVOKABLE void chargerPartie(QString partieName);
+    bool isGameOver();
 
     QVector<int> getGridValues() const;
     QStringList getPartieHistorique();
+    int score() const;
 
 private:
     std::vector<std::vector<int>> grid;
     QJsonArray historyArray;
+    int m_score;
 
     Q_INVOKABLE void addRandomElement();
     Q_INVOKABLE void enregistrerPartie(QString partieName);
@@ -40,11 +44,14 @@ private:
 
     QJsonArray gridToJsonArray();
 
+    bool m_gameOver;
+
 
 
 signals:
     void gridChanged();
     void historiqueChanged();
+    void scoreChanged();
 
 
 };