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