diff --git a/applicationQT2048/gamemanager.cpp b/applicationQT2048/gamemanager.cpp index 6721ea8e7cb78725ae38357a082092a2bf944118..7c2810f08192f46a859d34aaac20415273352a8f 100644 --- a/applicationQT2048/gamemanager.cpp +++ b/applicationQT2048/gamemanager.cpp @@ -40,6 +40,9 @@ void GameManager::moveLeft() { grid[i] = newRow; } emit addRandomElement(); + + //Mettre a jour l'état et l'enregistrer + historyArray.append(gridToJsonArray()); emit gridChanged(); } @@ -78,6 +81,9 @@ void GameManager::moveRight() { grid[i] = newRow; } emit addRandomElement(); + + //Mettre a jour l'état et l'enregistrer + historyArray.append(gridToJsonArray()); emit gridChanged(); } @@ -123,6 +129,9 @@ void GameManager::moveUp() { } emit addRandomElement(); + + //Mettre a jour l'état et l'enregistrer + historyArray.append(gridToJsonArray()); emit gridChanged(); } @@ -165,11 +174,23 @@ void GameManager::moveDown() { } emit addRandomElement(); + + //Mettre a jour l'état et l'enregistrer + historyArray.append(gridToJsonArray()); emit gridChanged(); + } void GameManager::restartGame() { + + //sauvergarder la partie précédente + + enregistrerPartie(); + + // Réinitialisation des variables grid.assign(4, std::vector<int>(4, 0)); + historyArray = QJsonArray(); + std::random_device rd; std::uniform_int_distribution<int> distrib(0, 15); @@ -191,6 +212,8 @@ void GameManager::restartGame() { grid[rg2][col2]=2; + //Mettre a jour l'état et l'enregistrer + historyArray.append(gridToJsonArray()); emit gridChanged(); } @@ -229,3 +252,35 @@ QVector<int> GameManager::getGridValues() const { } return flattenedGrid; } + +QJsonArray GameManager::gridToJsonArray() { + QJsonArray jsonGrid; + for (const auto &row : grid) { + QJsonArray jsonRow; + for (int cell : row) { + jsonRow.append(cell); + } + jsonGrid.append(jsonRow); // Ajoute chaque ligne + } + return jsonGrid; +} + +void GameManager::undo() { + if (historyArray.size() > 1) { // Vérifiez qu'il y a au moins deux états + historyArray.removeLast(); // Supprimez le dernier état + QJsonArray previousState = historyArray.last().toArray(); // Récupérez l'avant-dernier état + + // Mettez à jour la grille avec l'état précédent + 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é + } +} + +void GameManager::enregistrerPartie(){ + +} diff --git a/applicationQT2048/gamemanager.h b/applicationQT2048/gamemanager.h index 977859bf7efc53f268e6be0b8cc94b672ee584cf..ab6f00a40158bb54465c85bcd83d4bd720edcc02 100644 --- a/applicationQT2048/gamemanager.h +++ b/applicationQT2048/gamemanager.h @@ -3,6 +3,12 @@ #include <QObject> #include <vector> +#include <QJsonArray> +#include <QJsonObject> +#include <QJsonDocument> +#include <QFile> + + class GameManager : public QObject { @@ -17,12 +23,19 @@ public: Q_INVOKABLE void moveUp(); Q_INVOKABLE void moveDown(); Q_INVOKABLE void restartGame(); + Q_INVOKABLE void undo(); + QVector<int> getGridValues() const; private: std::vector<std::vector<int>> grid; + QJsonArray historyArray; + Q_INVOKABLE void addRandomElement(); + Q_INVOKABLE void enregistrerPartie(); + QJsonArray gridToJsonArray(); + signals: