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

creation de l'historique

acces a l'historique ok il faut encore trouver un moyen de donner un nom au partie si on veut les eregistrer
parent bd706f19
Branches main
No related tags found
No related merge requests found
...@@ -71,6 +71,33 @@ Rectangle { ...@@ -71,6 +71,33 @@ Rectangle {
} }
} }
Rectangle {
width: 90; height: 30
anchors.horizontalCenter: parent.horizontalCenter
y:250
radius:5
MenuBar {
Menu {
title: "Charger une ancienne partie"
Repeater {
model: gameManager.partieHistorique
MenuItem {
text: modelData
background: Rectangle { color: "grey"; radius: 5 }
onTriggered: gameManager.chargerPartie(modelData)
}
}
}
}
}
Rectangle { Rectangle {
color:"blue" color:"blue"
...@@ -92,3 +119,6 @@ Rectangle { ...@@ -92,3 +119,6 @@ Rectangle {
} }
} }
} }
#include "gamemanager.h" #include "gamemanager.h"
#include "random" #include "random"
#include <QFileInfo>
#include <QInputDialog>
#include <QLineEdit>
#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)) {
...@@ -183,9 +187,19 @@ void GameManager::moveDown() { ...@@ -183,9 +187,19 @@ void GameManager::moveDown() {
void GameManager::restartGame() { void GameManager::restartGame() {
//sauvergarder la partie précédente //demander pour sauvergarder la partie précédente
bool ok;
QString nomPartie = QInputDialog::getText(nullptr, "Sauvegarde",
"Entrez le nom de la partie :",
QLineEdit::Normal, "", &ok);
if (ok && !nomPartie.isEmpty()) {
qDebug() << "Nom de la partie sauvegardée :" << nomPartie;
enregistrerPartie(nomPartie); // Appelle la fonction de sauvegarde
} else {
qDebug() << "Saisie annulée ou vide.";
}
enregistrerPartie();
// Réinitialisation des variables // Réinitialisation des variables
grid.assign(4, std::vector<int>(4, 0)); grid.assign(4, std::vector<int>(4, 0));
...@@ -195,7 +209,7 @@ void GameManager::restartGame() { ...@@ -195,7 +209,7 @@ void GameManager::restartGame() {
std::uniform_int_distribution<int> distrib(0, 15); std::uniform_int_distribution<int> distrib(0, 15);
int num1 = distrib(rd); int num1 = distrib(rd);
int num2 = distrib(rd); int num2;
// Assure que num2 est différent de num1 // Assure que num2 est différent de num1
do { do {
...@@ -253,6 +267,33 @@ QVector<int> GameManager::getGridValues() const { ...@@ -253,6 +267,33 @@ QVector<int> GameManager::getGridValues() const {
return flattenedGrid; return flattenedGrid;
} }
QStringList GameManager::getPartieHistorique() {
QFile file("historique.json");
qDebug() << "Fichier JSON enregistré à : " << QFileInfo(file).absoluteFilePath();
if (!file.open(QIODevice::ReadWrite)) {
qWarning() << "Impossible d'ouvrir le fichier pour écriture :" << file.errorString();
}
QJsonDocument doc;
if (file.size() > 0) { // Vérifier que le fichier n'est pas vide
doc = QJsonDocument::fromJson(file.readAll());
}else{ // Sinon initialiser avec un objet vide
doc = QJsonDocument(QJsonObject());
}
QJsonObject rootObj = doc.object();
QStringList list = rootObj.keys();
file.close();
qDebug() << "Liste des parties:" << list ;
return list;
}
QJsonArray GameManager::gridToJsonArray() { QJsonArray GameManager::gridToJsonArray() {
QJsonArray jsonGrid; QJsonArray jsonGrid;
for (const auto &row : grid) { for (const auto &row : grid) {
...@@ -281,6 +322,69 @@ void GameManager::undo() { ...@@ -281,6 +322,69 @@ void GameManager::undo() {
} }
} }
void GameManager::enregistrerPartie(){ void GameManager::enregistrerPartie(QString partieName){
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;
if (file.size() > 0) { // Vérifier que le fichier n'est pas vide
doc = QJsonDocument::fromJson(file.readAll());
}else{ // Sinon initialiser avec un objet vide
doc = QJsonDocument(QJsonObject());
}
QJsonObject rootObj = doc.object(); // Récupérer l'objet JSON racine
rootObj[partieName] = historyArray; // Ajouter ou remplacer la grille associée à l'ID
// 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();
}
void GameManager::chargerPartie(QString partieName){
QFile file("historique.json");
// 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;
if (file.size() > 0) { // Vérifier que le fichier n'est pas vide
doc = QJsonDocument::fromJson(file.readAll());
}else{ // Sinon erreur
return;
}
QJsonObject rootObj = doc.object(); // Récupérer l'objet JSON racine
historyArray = rootObj[partieName].toArray(); // Charger la grille
QJsonArray previousState = historyArray.last().toArray(); // Récupérez le dernier état de la partie chargée
// Mettez à jour la grille
for (int i = 0; i < 4; ++i) {
for (int j = 0; j < 4; ++j) {
grid[i][j] = previousState[i].toArray()[j].toInt();
}
}
emit gridChanged(); // Notifiez que la grille a changé
file.close();
} }
...@@ -15,6 +15,7 @@ class GameManager : public QObject ...@@ -15,6 +15,7 @@ class GameManager : public QObject
Q_OBJECT Q_OBJECT
Q_PROPERTY(QVector<int> gridValues READ getGridValues NOTIFY gridChanged) Q_PROPERTY(QVector<int> gridValues READ getGridValues NOTIFY gridChanged)
Q_PROPERTY(QStringList partieHistorique READ getPartieHistorique NOTIFY historiqueChanged)
public: public:
explicit GameManager(QObject *parent = nullptr); explicit GameManager(QObject *parent = nullptr);
...@@ -24,22 +25,25 @@ public: ...@@ -24,22 +25,25 @@ public:
Q_INVOKABLE void moveDown(); Q_INVOKABLE void moveDown();
Q_INVOKABLE void restartGame(); Q_INVOKABLE void restartGame();
Q_INVOKABLE void undo(); Q_INVOKABLE void undo();
Q_INVOKABLE void chargerPartie(QString partieName);
QVector<int> getGridValues() const; QVector<int> getGridValues() const;
QStringList getPartieHistorique();
private: private:
std::vector<std::vector<int>> grid; std::vector<std::vector<int>> grid;
QJsonArray historyArray; QJsonArray historyArray;
Q_INVOKABLE void addRandomElement(); Q_INVOKABLE void addRandomElement();
Q_INVOKABLE void enregistrerPartie(); Q_INVOKABLE void enregistrerPartie(QString partieName);
QJsonArray gridToJsonArray(); QJsonArray gridToJsonArray();
signals: signals:
void gridChanged(); void gridChanged();
void historiqueChanged();
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment