diff --git a/applicationQT2048/gamemanager.cpp b/applicationQT2048/gamemanager.cpp index aef8b71f74ec3464fa266bd17157463937a054f2..cb790fca5e2fdfcc9af78348cff1b523e2d22d84 100644 --- a/applicationQT2048/gamemanager.cpp +++ b/applicationQT2048/gamemanager.cpp @@ -4,7 +4,7 @@ #include <QDebug> GameManager::GameManager(QObject *parent) : QObject(parent), grid(4, std::vector<int>(4, 0)),m_score(0), m_gameOver(false) { - + chercherBestScore(); } void GameManager::moveLeft() { @@ -338,7 +338,7 @@ void GameManager::undo() { } emit gridChanged(); // Notifiez que la grille a changé - emit calculscore(); + calculscore(); } } void GameManager::enregistrerMeilleurScore() { @@ -363,18 +363,20 @@ void GameManager::enregistrerMeilleurScore() { 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 + rootObj["meilleurScore"] = m_score; + m_bestScore=m_score; + emit bestScoreChanged();// Mettre à jour le meilleur score } } else { - rootObj["meilleurScore"] = m_score; // Si aucune entrée "meilleurScore", on l'ajoute + rootObj["meilleurScore"] = m_score; // Si aucune entrée "meilleurScore", on l'ajoute + m_bestScore=m_score; // intialisation du meilleur score + emit bestScoreChanged(); // Mettre à jour le meilleur score } // 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){ @@ -441,10 +443,38 @@ void GameManager::chargerPartie(QString partieName){ calculscore(); } -int GameManager::score() const { +void GameManager::supprimerHistorique(){ + QFile file("historique.json"); + qDebug() << "Fichier JSON enregistré à : " << QFileInfo(file).absoluteFilePath(); + // Ouvrir le fichier en mode lecture/écriture (si existant) + if (!file.open(QIODevice::ReadWrite)) { + qWarning() << "Impossible d'ouvrir le fichier pour écriture :" << file.errorString(); + return; + } + + + QJsonDocument doc; + // Ré-initialisation avec un objet vide + doc = QJsonDocument(QJsonObject()); + QJsonObject rootObj = doc.object(); // Récupérer l'objet JSON racine + + + // 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(); +} + +int GameManager::getScore() { return m_score; // Retourne le score actuel } +int GameManager::getBestScore() { + return m_bestScore; // Retourne le score actuel +} + void GameManager::calculscore(){ @@ -460,9 +490,43 @@ void GameManager::calculscore(){ } } emit scoreChanged(); - if (isGameOver()) { - endGame(); // Appeler endGame pour mettre à jour le meilleur score si nécessaire + enregistrerMeilleurScore(); + +} + +void GameManager::chercherBestScore(){ + 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")) { + m_bestScore = rootObj["meilleurScore"].toInt(); + } else { + rootObj["meilleurScore"] = 0; // Si aucune entrée "meilleurScore", on l'ajoute + m_bestScore = 0; // intialisation du meilleur score + } + + + emit bestScoreChanged(); // affichage du meilleur score + + // 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(); } bool GameManager::isGameOver() { @@ -479,7 +543,7 @@ 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() { @@ -491,7 +555,5 @@ void GameManager::endGame() { } } -int GameManager::bestScore() const { - return m_bestScore; // Retourne le meilleur score -} + diff --git a/applicationQT2048/gamemanager.h b/applicationQT2048/gamemanager.h index 475bf82e9671ca759c4c472bd1676ec0de3f4dba..7fe650a2ccb0c19a285234d377f53a184a5daa05 100644 --- a/applicationQT2048/gamemanager.h +++ b/applicationQT2048/gamemanager.h @@ -16,7 +16,8 @@ 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) + Q_PROPERTY(int score READ getScore NOTIFY scoreChanged) + Q_PROPERTY(int bestScore READ getBestScore NOTIFY bestScoreChanged) public: explicit GameManager(QObject *parent = nullptr); @@ -27,18 +28,18 @@ public: Q_INVOKABLE void restartGame(QString partieName); Q_INVOKABLE void undo(); Q_INVOKABLE void chargerPartie(QString partieName); + Q_INVOKABLE void supprimerHistorique(); bool isGameOver(); QVector<int> getGridValues() const; QStringList getPartieHistorique(); - int score() const; + private: std::vector<std::vector<int>> grid; QJsonArray historyArray; int m_score; int m_bestScore; - int bestScore() const; Q_INVOKABLE void addRandomElement(); @@ -46,6 +47,9 @@ private: Q_INVOKABLE void calculscore(); Q_INVOKABLE void enregistrerMeilleurScore(); Q_INVOKABLE void endGame(); + Q_INVOKABLE int getScore() ; + Q_INVOKABLE int getBestScore() ; + Q_INVOKABLE void chercherBestScore() ; QJsonArray gridToJsonArray();