diff --git a/applicationQT2048/GamePage.qml b/applicationQT2048/GamePage.qml
index c884000f4640e0ff61659050a11516f1a35ca4cd..eb6512dbde633ebda78353a2d2a1a197ddb76a5c 100644
--- a/applicationQT2048/GamePage.qml
+++ b/applicationQT2048/GamePage.qml
@@ -88,7 +88,7 @@ FocusScope {  // Permet de capter le focus pour les raccourcis clavier
 
             Text{
                 id: bestScore
-                text:"0"
+                text:gameManager.bestScore
                 color:"white"
                 font.bold: true
                 font.pixelSize: 25
diff --git a/applicationQT2048/gamemanager.cpp b/applicationQT2048/gamemanager.cpp
index 9ab3ea33772d2e49a893c91720a33421d59245ef..aef8b71f74ec3464fa266bd17157463937a054f2 100644
--- a/applicationQT2048/gamemanager.cpp
+++ b/applicationQT2048/gamemanager.cpp
@@ -206,8 +206,8 @@ void GameManager::restartGame(QString partieName) {
 
     //demander pour sauvergarder la partie précédente
 
-
-    if(partieName=="false"){}else{
+    if(partieName=="false"){
+        }else{
         enregistrerPartie(partieName);
         };
     m_gameOver = false;
@@ -341,6 +341,41 @@ void GameManager::undo() {
         emit calculscore();
     }
 }
+void GameManager::enregistrerMeilleurScore() {
+    QFile file("meilleurScore.json");
+    qDebug() << "Fichier JSON pour le meilleur score enregistré à : " << QFileInfo(file).absoluteFilePath();
+
+    if (!file.open(QIODevice::ReadWrite)) {
+        qWarning() << "Impossible d'ouvrir le fichier pour écriture :" << file.errorString();
+        return;
+    }
+
+    QJsonDocument doc;
+    if (file.size() > 0) {  // Vérifier si le fichier n'est pas vide
+        doc = QJsonDocument::fromJson(file.readAll());
+    } else {  // Si le fichier est vide, initialiser un objet vide
+        doc = QJsonDocument(QJsonObject());
+    }
+
+    QJsonObject rootObj = doc.object();  // Récupérer l'objet JSON racine
+
+    // Vérifier si le meilleur score est déjà enregistré, sinon l'initialiser
+    if (rootObj.contains("meilleurScore")) {
+        int meilleurScore = rootObj["meilleurScore"].toInt();
+        if (m_score > meilleurScore) {  // Si le score actuel est supérieur au meilleur score enregistré
+            rootObj["meilleurScore"] = m_score;  // Mettre à jour le meilleur score
+        }
+    } else {
+        rootObj["meilleurScore"] = m_score;  // Si aucune entrée "meilleurScore", on l'ajoute
+    }
+
+    // Réécriture du fichier avec la nouvelle version
+    file.resize(0);  // Effacer le contenu du fichier avant d'écrire la nouvelle version
+    file.write(QJsonDocument(rootObj).toJson());
+    file.close();
+
+    emit historiqueChanged();  // Notifie que l'historique a changé
+}
 
 void GameManager::enregistrerPartie(QString partieName){
     QFile file("historique.json");
@@ -425,6 +460,9 @@ void GameManager::calculscore(){
         }
     }
     emit scoreChanged();
+    if (isGameOver()) {
+        endGame();  // Appeler endGame pour mettre à jour le meilleur score si nécessaire
+    }
 }
 
 bool GameManager::isGameOver() {
@@ -441,4 +479,19 @@ bool GameManager::isGameOver() {
         }
     }
     return true;  // Si la grille est pleine et aucune fusion n'est possible, la partie est terminée
+    endGame();
 }
+
+void GameManager::endGame() {
+    // Comparer le score actuel avec le meilleur score
+    if (m_score > m_bestScore) {
+        m_bestScore = m_score;  // Mettre à jour le meilleur score
+        enregistrerMeilleurScore();  // Enregistrer le meilleur score
+        emit bestScoreChanged();
+    }
+
+}
+int GameManager::bestScore() const {
+    return m_bestScore;  // Retourne le meilleur score
+}
+
diff --git a/applicationQT2048/gamemanager.h b/applicationQT2048/gamemanager.h
index e1fc8d20b2fed75e5fe458ab6575f0e38874ff43..475bf82e9671ca759c4c472bd1676ec0de3f4dba 100644
--- a/applicationQT2048/gamemanager.h
+++ b/applicationQT2048/gamemanager.h
@@ -37,13 +37,19 @@ private:
     std::vector<std::vector<int>> grid;
     QJsonArray historyArray;
     int m_score;
+    int m_bestScore;
+    int bestScore() const;
+
 
     Q_INVOKABLE void addRandomElement();
     Q_INVOKABLE void enregistrerPartie(QString partieName);
     Q_INVOKABLE void calculscore();
+    Q_INVOKABLE void enregistrerMeilleurScore();
+    Q_INVOKABLE void endGame();
 
     QJsonArray gridToJsonArray();
 
+
     bool m_gameOver;
 
 
@@ -52,6 +58,7 @@ signals:
     void gridChanged();
     void historiqueChanged();
     void scoreChanged();
+    void bestScoreChanged();
 
 
 };