Skip to content
Snippets Groups Projects
Commit 87a89011 authored by Breitwiller Josephine's avatar Breitwiller Josephine
Browse files

best score et gestion historique

parent bdd11a35
Branches
No related tags found
No related merge requests found
......@@ -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
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
}
......@@ -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();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment