diff --git a/applicationQT2048/Main.qml b/applicationQT2048/Main.qml index 8cf786c7ac8ec9dbb9d7f86c2f86cfe1ac78390c..7b57da9b5b824f9659074a1f012df933eaf8b1a2 100644 --- a/applicationQT2048/Main.qml +++ b/applicationQT2048/Main.qml @@ -112,8 +112,7 @@ Window { MouseArea{ id: buttonMouseArea - anchors.fill: parent //anchor all sides of the mouse area to the rectangle's anchors - //onClicked handles valid mouse button clicks + anchors.fill: parent onClicked: gameManager.restartGame() } } @@ -149,7 +148,7 @@ Window { anchors.horizontalCenter: parent.horizontalCenter y:170 color:"grey" - radius: 10 + radius: 5 Grid { @@ -162,16 +161,28 @@ Window { Repeater { - model: 16 + model: gameManager.gridValues Rectangle { width: 78 height: 78 - color: "lightgrey" - - radius:10 + color: modelData == 2 ? "#EEE4DA" : + modelData == 4 ? "#EDE0C8" : + modelData == 8 ? "#F2B179" : + modelData == 16 ? "#F59563" : + modelData == 32 ? "#F67C5F" : + modelData == 64 ? "#F65E3B" : + modelData == 128 ? "#EDCF72" : + modelData == 256 ? "#EDCC61" : + modelData == 512 ? "#EDC850" : + modelData == 1024 ? "#EDC53F" : + modelData == 2048 ? "#EDC22E" : "#BBADA0" + radius: 5 Text { + text: modelData > 0 ? modelData : "" anchors.centerIn: parent - text: "" + font.bold: true + font.pixelSize: 30 + color: "grey" } } } diff --git a/applicationQT2048/gamemanager.cpp b/applicationQT2048/gamemanager.cpp index f58a0d569d5401545b32f5409473b0094c8d6602..9d5a638dfcd0b5611d36aa430dac65909f2f58b1 100644 --- a/applicationQT2048/gamemanager.cpp +++ b/applicationQT2048/gamemanager.cpp @@ -1,8 +1,8 @@ #include "gamemanager.h" +#include "random" GameManager::GameManager(QObject *parent) : QObject(parent), grid(4, std::vector<int>(4, 0)) { - generateTile(); - generateTile(); + } void GameManager::moveLeft() { @@ -23,14 +23,36 @@ void GameManager::moveDown() { void GameManager::restartGame() { grid.assign(4, std::vector<int>(4, 0)); - generateTile(); - generateTile(); -} + std::random_device rd; + std::uniform_int_distribution<int> distrib(0, 15); + + int num1 = distrib(rd); + int num2 = distrib(rd); + + // Assure que num2 est différent de num1 + do { + num2 = distrib(rd); + } while (num2 == num1); + + int rg1= num1/4; + int col1= num1 - (4*rg1); + + int rg2= num2/4; + int col2= num2 - (4*rg2); + + grid[rg1][col1]=2; + grid[rg2][col2]=2; + + emit gridChanged(); -void GameManager::generateTile() { - // Implémentation de la génération de tuiles } -void GameManager::mergeTiles() { - // Implémentation de la fusion des tuiles +QVector<int> GameManager::getGridValues() const { + QVector<int> flattenedGrid; + for (const auto& row : grid) { // 🔹 Parcourt chaque ligne + for (int value : row) { // 🔹 Parcourt chaque colonne + flattenedGrid.append(value); + } + } + return flattenedGrid; } diff --git a/applicationQT2048/gamemanager.h b/applicationQT2048/gamemanager.h index d0dbbdc0c9edb82829412cbc68749febb1962c4b..f38899b5acbb1ff9559d8b2bcd8839e9c3b07c79 100644 --- a/applicationQT2048/gamemanager.h +++ b/applicationQT2048/gamemanager.h @@ -7,6 +7,9 @@ class GameManager : public QObject { Q_OBJECT + + Q_PROPERTY(QVector<int> gridValues READ getGridValues NOTIFY gridChanged) + public: explicit GameManager(QObject *parent = nullptr); Q_INVOKABLE void moveLeft(); @@ -15,10 +18,14 @@ public: Q_INVOKABLE void moveDown(); Q_INVOKABLE void restartGame(); + QVector<int> getGridValues() const; + private: std::vector<std::vector<int>> grid; - void generateTile(); - void mergeTiles(); + + +signals: + void gridChanged(); };