From bd706f19274c6722485166737c66cdf686876773 Mon Sep 17 00:00:00 2001 From: jbreitwi <josephine.breitwiller@etu.ec-lyon.fr> Date: Thu, 27 Mar 2025 10:56:07 +0100 Subject: [PATCH] undo --- applicationQT2048/gamemanager.cpp | 55 +++++++++++++++++++++++++++++++ applicationQT2048/gamemanager.h | 13 ++++++++ 2 files changed, 68 insertions(+) diff --git a/applicationQT2048/gamemanager.cpp b/applicationQT2048/gamemanager.cpp index 6721ea8..7c2810f 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 977859b..ab6f00a 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: -- GitLab