From 408d6a63d9c228714317e56deeae8e96d0b6f491 Mon Sep 17 00:00:00 2001
From: Jamal <fredrick2.enoime@live.uwe.ac.uk>
Date: Thu, 13 Mar 2025 15:59:50 +0000
Subject: [PATCH] new structure

---
 .vscode/c_cpp_properties.json |  18 ++++
 .vscode/launch.json           |  24 ++++++
 .vscode/settings.json         |  59 +++++++++++++
 2048                          | Bin 33944 -> 38528 bytes
 2048.cpp                      |  62 --------------
 Extra.cpp                     |   0
 Extra.hpp                     |   0
 Makefile                      |  28 +++++++
 Tile.cpp                      |   0
 Tile.hpp                      |   0
 UI.cpp                        |   0
 UI.hpp                        |   0
 2048.hpp => include/2048.hpp  |  18 ++--
 include/Extra.hpp             |   9 ++
 include/Tile.hpp              |  14 ++++
 include/UI.hpp                |  13 +++
 main.cpp                      |  24 ------
 src/2048.cpp                  | 152 ++++++++++++++++++++++++++++++++++
 src/2048.o                    | Bin 0 -> 49952 bytes
 src/Extra.cpp                 |  13 +++
 src/Extra.o                   | Bin 0 -> 1984 bytes
 src/Tile.cpp                  |  11 +++
 src/Tile.o                    | Bin 0 -> 1672 bytes
 src/UI.cpp                    |  28 +++++++
 src/UI.o                      | Bin 0 -> 3016 bytes
 src/main.cpp                  |  26 ++++++
 src/main.o                    | Bin 0 -> 2376 bytes
 27 files changed, 405 insertions(+), 94 deletions(-)
 create mode 100644 .vscode/c_cpp_properties.json
 create mode 100644 .vscode/launch.json
 create mode 100644 .vscode/settings.json
 delete mode 100644 2048.cpp
 delete mode 100644 Extra.cpp
 delete mode 100644 Extra.hpp
 create mode 100644 Makefile
 delete mode 100644 Tile.cpp
 delete mode 100644 Tile.hpp
 delete mode 100644 UI.cpp
 delete mode 100644 UI.hpp
 rename 2048.hpp => include/2048.hpp (60%)
 create mode 100644 include/Extra.hpp
 create mode 100644 include/Tile.hpp
 create mode 100644 include/UI.hpp
 delete mode 100644 main.cpp
 create mode 100644 src/2048.cpp
 create mode 100644 src/2048.o
 create mode 100644 src/Extra.cpp
 create mode 100644 src/Extra.o
 create mode 100644 src/Tile.cpp
 create mode 100644 src/Tile.o
 create mode 100644 src/UI.cpp
 create mode 100644 src/UI.o
 create mode 100644 src/main.cpp
 create mode 100644 src/main.o

diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json
new file mode 100644
index 0000000..c2098a2
--- /dev/null
+++ b/.vscode/c_cpp_properties.json
@@ -0,0 +1,18 @@
+{
+  "configurations": [
+    {
+      "name": "linux-gcc-x64",
+      "includePath": [
+        "${workspaceFolder}/**"
+      ],
+      "compilerPath": "/usr/bin/gcc",
+      "cStandard": "${default}",
+      "cppStandard": "${default}",
+      "intelliSenseMode": "linux-gcc-x64",
+      "compilerArgs": [
+        ""
+      ]
+    }
+  ],
+  "version": 4
+}
\ No newline at end of file
diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..d8762db
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,24 @@
+{
+  "version": "0.2.0",
+  "configurations": [
+    {
+      "name": "C/C++ Runner: Debug Session",
+      "type": "cppdbg",
+      "request": "launch",
+      "args": [],
+      "stopAtEntry": false,
+      "externalConsole": false,
+      "cwd": "/home/fredrick2.enoime/2048-clone",
+      "program": "/home/fredrick2.enoime/2048-clone/build/Debug/outDebug",
+      "MIMode": "gdb",
+      "miDebuggerPath": "gdb",
+      "setupCommands": [
+        {
+          "description": "Enable pretty-printing for gdb",
+          "text": "-enable-pretty-printing",
+          "ignoreFailures": true
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..3e5eb95
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,59 @@
+{
+  "C_Cpp_Runner.cCompilerPath": "gcc",
+  "C_Cpp_Runner.cppCompilerPath": "g++",
+  "C_Cpp_Runner.debuggerPath": "gdb",
+  "C_Cpp_Runner.cStandard": "",
+  "C_Cpp_Runner.cppStandard": "",
+  "C_Cpp_Runner.msvcBatchPath": "",
+  "C_Cpp_Runner.useMsvc": false,
+  "C_Cpp_Runner.warnings": [
+    "-Wall",
+    "-Wextra",
+    "-Wpedantic",
+    "-Wshadow",
+    "-Wformat=2",
+    "-Wcast-align",
+    "-Wconversion",
+    "-Wsign-conversion",
+    "-Wnull-dereference"
+  ],
+  "C_Cpp_Runner.msvcWarnings": [
+    "/W4",
+    "/permissive-",
+    "/w14242",
+    "/w14287",
+    "/w14296",
+    "/w14311",
+    "/w14826",
+    "/w44062",
+    "/w44242",
+    "/w14905",
+    "/w14906",
+    "/w14263",
+    "/w44265",
+    "/w14928"
+  ],
+  "C_Cpp_Runner.enableWarnings": true,
+  "C_Cpp_Runner.warningsAsError": false,
+  "C_Cpp_Runner.compilerArgs": [],
+  "C_Cpp_Runner.linkerArgs": [],
+  "C_Cpp_Runner.includePaths": [],
+  "C_Cpp_Runner.includeSearch": [
+    "*",
+    "**/*"
+  ],
+  "C_Cpp_Runner.excludeSearch": [
+    "**/build",
+    "**/build/**",
+    "**/.*",
+    "**/.*/**",
+    "**/.vscode",
+    "**/.vscode/**"
+  ],
+  "C_Cpp_Runner.useAddressSanitizer": false,
+  "C_Cpp_Runner.useUndefinedSanitizer": false,
+  "C_Cpp_Runner.useLeakSanitizer": false,
+  "C_Cpp_Runner.showCompilationTime": false,
+  "C_Cpp_Runner.useLinkTimeOptimization": false,
+  "C_Cpp_Runner.msvcSecureNoWarnings": false
+}
\ No newline at end of file
diff --git a/2048 b/2048
index 2822740d6a916791aeea15318772db1a1da7d0d7..012dd31c904f6c63d21b5e01db62b883bef602db 100755
GIT binary patch
delta 11687
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
C;j4B4

delta 9790
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
Qla;2KF=bRwj+&+h0BC{oxBvhE

diff --git a/2048.cpp b/2048.cpp
deleted file mode 100644
index 9d03545..0000000
--- a/2048.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-#include "2048.hpp"
-#include <iostream>
-#include <cstdlib>
-#include <ctime>
-
-Game2048::Game2048() {
-    std::srand(std::time(0));
-    resetBoard();
-}
-
-void Game2048::resetBoard() {
-    for (int i = 0; i < SIZE; ++i)
-        for (int j = 0; j < SIZE; ++j)
-            board[i][j] = 0;
-    spawnTile();
-    spawnTile();
-}
-
-void Game2048::spawnTile() {
-    std::vector<std::pair<int, int>> emptyTiles;
-    for (int i = 0; i < SIZE; ++i)
-        for (int j = 0; j < SIZE; ++j)
-            if (board[i][j] == 0)
-                emptyTiles.push_back({i, j});
-
-    if (!emptyTiles.empty()) {
-        int idx = std::rand() % emptyTiles.size();
-        board[emptyTiles[idx].first][emptyTiles[idx].second] = (std::rand() % 10 == 0) ? 4 : 2;
-    }
-}
-
-void Game2048::drawBoard() {
-    clear();
-    for (int i = 0; i < SIZE; ++i) {
-        for (int j = 0; j < SIZE; ++j) {
-            mvprintw(i * 2, j * 5, "%4d", board[i][j]);
-        }
-    }
-    refresh();
-}
-
-void Game2048::moveLeft() {
-    moved = false;
-    for (int i = 0; i < SIZE; ++i) {
-        int temp[SIZE] = {0}, index = 0;
-        for (int j = 0; j < SIZE; ++j) {
-            if (board[i][j] != 0) {
-                if (index > 0 && temp[index - 1] == board[i][j]) {
-                    temp[index - 1] *= 2;
-                    moved = true;
-                } else {
-                    temp[index++] = board[i][j];
-                }
-            }
-        }
-        for (int j = 0; j < SIZE; ++j) {
-            if (board[i][j] != temp[j]) moved = true;
-            board[i][j] = temp[j];
-        }
-    }
-    if (moved) spawnTile();
-}
diff --git a/Extra.cpp b/Extra.cpp
deleted file mode 100644
index e69de29..0000000
diff --git a/Extra.hpp b/Extra.hpp
deleted file mode 100644
index e69de29..0000000
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..30620e6
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,28 @@
+# Compiler and flags
+CXX = g++
+CXXFLAGS = -std=c++11 -Wall -Wextra -Iinclude
+LDFLAGS = -lncurses  # Add this for linking ncurses
+
+# Source files
+SRC = src/2048.cpp src/UI.cpp src/Extra.cpp src/Tile.cpp src/main.cpp
+
+# Object files
+OBJ = $(SRC:.cpp=.o)
+
+# Target executable
+TARGET = 2048
+
+# Default target
+all: $(TARGET)
+
+# Link object files to create the executable
+$(TARGET): $(OBJ)
+	$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJ) $(LDFLAGS)  # <-- Add $(LDFLAGS) here
+
+# Compile source files into object files
+%.o: %.cpp
+	$(CXX) $(CXXFLAGS) -c $< -o $@  # <-- TAB indentation
+
+# Clean up build artifacts
+clean:
+	rm -f $(OBJ) $(TARGET)  # <-- TAB indentation
\ No newline at end of file
diff --git a/Tile.cpp b/Tile.cpp
deleted file mode 100644
index e69de29..0000000
diff --git a/Tile.hpp b/Tile.hpp
deleted file mode 100644
index e69de29..0000000
diff --git a/UI.cpp b/UI.cpp
deleted file mode 100644
index e69de29..0000000
diff --git a/UI.hpp b/UI.hpp
deleted file mode 100644
index e69de29..0000000
diff --git a/2048.hpp b/include/2048.hpp
similarity index 60%
rename from 2048.hpp
rename to include/2048.hpp
index d4aeab9..47f983c 100644
--- a/2048.hpp
+++ b/include/2048.hpp
@@ -1,25 +1,27 @@
-#ifndef GAME_2048_HPP
-#define GAME_2048_HPP
+#ifndef GAME2048_HPP
+#define GAME2048_HPP
 
 #include <vector>
-#include <ncurses.h>
+#define SIZE 4
 
 class Game2048 {
 private:
-    static const int SIZE = 4;
     int board[SIZE][SIZE];
     bool moved;
 
+    void spawnTile();
+    void resetBoard();
+
 public:
     Game2048();
-    void resetBoard();
-    void spawnTile();
     void drawBoard();
     void moveLeft();
     void moveRight();
     void moveUp();
     void moveDown();
-    bool isGameOver();
+    bool canMove();
+    int getScore();
+    const int (*getBoard() const)[SIZE]; // Mark this method as const
 };
 
-#endif // GAME_2048_HPP
+#endif
\ No newline at end of file
diff --git a/include/Extra.hpp b/include/Extra.hpp
new file mode 100644
index 0000000..539aa83
--- /dev/null
+++ b/include/Extra.hpp
@@ -0,0 +1,9 @@
+#ifndef EXTRA_HPP
+#define EXTRA_HPP
+
+#include <ncurses.h>
+
+void initializeGame();
+void cleanupGame();
+
+#endif
\ No newline at end of file
diff --git a/include/Tile.hpp b/include/Tile.hpp
new file mode 100644
index 0000000..ecf494e
--- /dev/null
+++ b/include/Tile.hpp
@@ -0,0 +1,14 @@
+#ifndef TILE_HPP
+#define TILE_HPP
+
+class Tile {
+private:
+    int value;
+
+public:
+    Tile();
+    void setValue(int val);
+    int getValue() const;
+};
+
+#endif
\ No newline at end of file
diff --git a/include/UI.hpp b/include/UI.hpp
new file mode 100644
index 0000000..b6d6424
--- /dev/null
+++ b/include/UI.hpp
@@ -0,0 +1,13 @@
+#ifndef UI_HPP
+#define UI_HPP
+
+#include "2048.hpp"
+
+class UI {
+public:
+    void drawBoard(const Game2048& game);
+    void handleInput(Game2048& game);
+    void showGameOver();
+};
+
+#endif
\ No newline at end of file
diff --git a/main.cpp b/main.cpp
deleted file mode 100644
index bc0a5c8..0000000
--- a/main.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#include "2048.hpp"
-#include <ncurses.h>
-
-int main() {
-    initscr();
-    noecho();
-    keypad(stdscr, TRUE);
-    curs_set(0);
-
-    Game2048 game;
-    game.drawBoard();
-
-    int ch;
-    while ((ch = getch()) != 'q') {
-        switch (ch) {
-            case KEY_LEFT: game.moveLeft(); break;
-            // TODO: Add moveRight(), moveUp(), moveDown()
-        }
-        game.drawBoard();
-    }
-
-    endwin();
-    return 0;
-}
diff --git a/src/2048.cpp b/src/2048.cpp
new file mode 100644
index 0000000..331e64d
--- /dev/null
+++ b/src/2048.cpp
@@ -0,0 +1,152 @@
+#include "2048.hpp"
+#include <ncurses.h>
+#include <cstdlib>
+#include <ctime>
+#include <vector>
+
+Game2048::Game2048() {
+    std::srand(std::time(0));
+    resetBoard();
+}
+
+void Game2048::resetBoard() {
+    for (int i = 0; i < SIZE; ++i)
+        for (int j = 0; j < SIZE; ++j)
+            board[i][j] = 0;
+    spawnTile();
+    spawnTile();
+}
+
+void Game2048::spawnTile() {
+    std::vector<std::pair<int, int>> emptyTiles;
+    for (int i = 0; i < SIZE; ++i)
+        for (int j = 0; j < SIZE; ++j)
+            if (board[i][j] == 0)
+                emptyTiles.push_back({i, j});
+
+    if (!emptyTiles.empty()) {
+        int idx = std::rand() % emptyTiles.size();
+        board[emptyTiles[idx].first][emptyTiles[idx].second] = (std::rand() % 10 == 0) ? 4 : 2;
+    }
+}
+
+void Game2048::drawBoard() {
+    clear();
+    for (int i = 0; i < SIZE; ++i) {
+        for (int j = 0; j < SIZE; ++j) {
+            mvprintw(i * 2, j * 5, "%4d", board[i][j]);
+        }
+    }
+    refresh();
+}
+
+void Game2048::moveLeft() {
+    moved = false;
+    for (int i = 0; i < SIZE; ++i) {
+        int temp[SIZE] = {0}, index = 0;
+        for (int j = 0; j < SIZE; ++j) {
+            if (board[i][j] != 0) {
+                if (index > 0 && temp[index - 1] == board[i][j]) {
+                    temp[index - 1] *= 2;
+                    moved = true;
+                } else {
+                    temp[index++] = board[i][j];
+                }
+            }
+        }
+        for (int j = 0; j < SIZE; ++j) {
+            if (board[i][j] != temp[j]) moved = true;
+            board[i][j] = temp[j];
+        }
+    }
+    if (moved) spawnTile();
+}
+
+void Game2048::moveRight() {
+    moved = false;
+    for (int i = 0; i < SIZE; ++i) {
+        int temp[SIZE] = {0}, index = SIZE - 1;
+        for (int j = SIZE - 1; j >= 0; --j) {
+            if (board[i][j] != 0) {
+                if (index < SIZE - 1 && temp[index + 1] == board[i][j]) {
+                    temp[index + 1] *= 2;
+                    moved = true;
+                } else {
+                    temp[index--] = board[i][j];
+                }
+            }
+        }
+        for (int j = 0; j < SIZE; ++j) {
+            if (board[i][j] != temp[j]) moved = true;
+            board[i][j] = temp[j];
+        }
+    }
+    if (moved) spawnTile();
+}
+
+void Game2048::moveUp() {
+    moved = false;
+    for (int j = 0; j < SIZE; ++j) {
+        int temp[SIZE] = {0}, index = 0;
+        for (int i = 0; i < SIZE; ++i) {
+            if (board[i][j] != 0) {
+                if (index > 0 && temp[index - 1] == board[i][j]) {
+                    temp[index - 1] *= 2;
+                    moved = true;
+                } else {
+                    temp[index++] = board[i][j];
+                }
+            }
+        }
+        for (int i = 0; i < SIZE; ++i) {
+            if (board[i][j] != temp[i]) moved = true;
+            board[i][j] = temp[i];
+        }
+    }
+    if (moved) spawnTile();
+}
+
+void Game2048::moveDown() {
+    moved = false;
+    for (int j = 0; j < SIZE; ++j) {
+        int temp[SIZE] = {0}, index = SIZE - 1;
+        for (int i = SIZE - 1; i >= 0; --i) {
+            if (board[i][j] != 0) {
+                if (index < SIZE - 1 && temp[index + 1] == board[i][j]) {
+                    temp[index + 1] *= 2;
+                    moved = true;
+                } else {
+                    temp[index--] = board[i][j];
+                }
+            }
+        }
+        for (int i = 0; i < SIZE; ++i) {
+            if (board[i][j] != temp[i]) moved = true;
+            board[i][j] = temp[i];
+        }
+    }
+    if (moved) spawnTile();
+}
+
+bool Game2048::canMove() {
+    for (int i = 0; i < SIZE; ++i) {
+        for (int j = 0; j < SIZE; ++j) {
+            if (board[i][j] == 0) return true;
+            if (j < SIZE - 1 && board[i][j] == board[i][j + 1]) return true;
+            if (i < SIZE - 1 && board[i][j] == board[i + 1][j]) return true;
+        }
+    }
+    return false;
+}
+
+int Game2048::getScore() {
+    int score = 0;
+    for (int i = 0; i < SIZE; ++i)
+        for (int j = 0; j < SIZE; ++j)
+            score += board[i][j];
+    return score;
+}
+
+const int (*Game2048::getBoard() const)[SIZE] {
+    return board;
+}
\ No newline at end of file
diff --git a/src/2048.o b/src/2048.o
new file mode 100644
index 0000000000000000000000000000000000000000..c199e0a7f2d9e698883681c10d56548e2bc2d52c
GIT binary patch
literal 49952
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
Kg==PDU;qH~r*9kp

literal 0
HcmV?d00001

diff --git a/src/Extra.cpp b/src/Extra.cpp
new file mode 100644
index 0000000..66f1cba
--- /dev/null
+++ b/src/Extra.cpp
@@ -0,0 +1,13 @@
+#include "Extra.hpp"
+#include <ncurses.h>
+
+void initializeGame() {
+    initscr();
+    noecho();
+    keypad(stdscr, TRUE);
+    curs_set(0);
+}
+
+void cleanupGame() {
+    endwin();
+}
\ No newline at end of file
diff --git a/src/Extra.o b/src/Extra.o
new file mode 100644
index 0000000000000000000000000000000000000000..c65d8bce46bd620e67c5c97fa4d9dd37416bd3a8
GIT binary patch
literal 1984
zcmb<-^>JfjWMqH=Mg}_u1P><4z|g>gU^{@B4h*~uJPe=t<$i^FbUu9n5(5(+-K-$?
zK9DIMoyWmq`#~aL)`Zx@C|V}O9%gWNcD7Q`2u&)@D=Ag5)HBgD&^0Ut^9<{Z4D<|4
z^o%qi;tUKRX9zGbFo5iE_X}lUVqiD`5@QD0z`(#D0;L(Nf*2Sp1Q?}x*f}OJGBC(6
zKrl$!7(}@83A8ae^Ri{}uya7=Y(U}+3=AOi8DR465P7H+1_kmZ3&Y3%7!nK&49r+V
z5+n|DEvhbNu<uaCKs;s!HV}n@nHktI#6SYf3?LtYSg4p89BQay+zbp1LP+iehYbS*
zgFGx8P?a;7;t;pRA?|`h+#82@5DxKZs5@cq1IG~q149lD^$e~RB}IvP$pr-r@ll2*
znR%HdnTa`>RjKZYxv6Cg@$NqUPL4kD{%&r;t|9Ruj!r(V@eCkU#mPksdHJcy8Tkyw
zB`F|Yc4}ooVhTfYX;E=}acT+3Jj3Li)Wp2f0*GO$c`4<Yd60nOgizp^1cmLN{}8~3
zB+kRYzyK2$g^DvVFfi~Ui7P?HL1`PL7p7hZNt_=^JuK~l)C(esD?rtQ%m-m8mjRN8
z89@05jA7x*pjTX(TauW>pjTW{1fervtfJJMM7@&KiV_CBl*E!m2EC->Vg|kB{M_8s
zyb=bzy!?_>J$JuQ-QtqO<ZLKEJ+D-+peVl}wWy?$K@V&~YDRooQDSZ?%qbMnApe2#
zAbJjg`Og{6bdXwPA!!CknF3P}lM8@m(FsriE(Qj0E`jAN38=UlR2-@tD$2mn3}>M-
z(Cr7sC&)~4^&3L%H$b%pZa>I;WGR^aFxm>LA6X5Ey&gnh!7zO=DK7>Fa4CeGwm@<l
zKm-E=11Nr=OfUuVE0_T#lA!jZ>%Rb%kATuJ3SECJj`({34NzFPfZ`9N7lc7(!Qv0(
zA9TAx@){rs1_p)=P#Tn%L3tZpKS&H}6-XN#-+&rg3>SegpvFNs3=9mQyoyb~04O6v
M%Qv`UXjmch0gR@)lK=n!

literal 0
HcmV?d00001

diff --git a/src/Tile.cpp b/src/Tile.cpp
new file mode 100644
index 0000000..47e1f43
--- /dev/null
+++ b/src/Tile.cpp
@@ -0,0 +1,11 @@
+#include "Tile.hpp"
+
+Tile::Tile() : value(0) {}
+
+void Tile::setValue(int val) {
+    value = val;
+}
+
+int Tile::getValue() const {
+    return value;
+}
\ No newline at end of file
diff --git a/src/Tile.o b/src/Tile.o
new file mode 100644
index 0000000000000000000000000000000000000000..2a327ba1ea273fc432998dbffe86016cddae3aa5
GIT binary patch
literal 1672
zcmb<-^>JfjWMqH=Mg}_u1P><4z|g^rU^{@B4h%dD+zg-j<$i^FbUyXyto`B9?fT<5
zSZ+e>;R(nxouywulHH+SIt9?>z!D6xhZ)?Rovjo!LX%4KN=g+h^-S~(bPY?vJi|I8
z13d#1JtIwsI0FL%3j+g#00RR9D+2?AyI&{+69dBmkQmIFB4BqgFfdjHF)&sLFiP{V
zb4*}lV31*eV34#Vh;Zc-Xk&8bWeeb8=YY!DfW#RX7^FcoOg;!99|IC+U|;~-0h9NJ
z$U~(tC{UQPFns)vA;G}Fz>GD-LE=o<lru0hz<h}+%?u6=R51{bnSl*NVPIwkb__9)
z05dprK`aF3VqjnpLUJcK>=+mr#BqqLK*gn?Mu5YTfq}sSDsBc92Zteu9g>-os+U|)
zzz`qhX9D6l8@ZMtIEF|Zi{jLhu*96wRM$+90&lQ#i*%S^8OS&V5W&CzN*7=Z<uX9h
zE<zmUz67WOP>6#t%zX@c#g(}wiAfB4#U(`$Is?WkNv$Yh&`U`yNo3GVDlTTwOU}>D
zP0cG|(96p&N!4@r3)L+yNlea$^3(H5^$Lpe3sQ?pDjD>OQgagZQZwSyiV|~Ep_WrX
zfx;J*#?WIL=3g%~vq64D7E)wj0LLzR%IZQ^gv18fg~Vl0XJB9e<sWkO>p<-{KsJ<t
zfdOVeNFG@VW<QKJh3ZFE17dFj5m+!xA56-XfdQNw(8Fa1Q~@kKLAhYR!q^}>7HU7b
z{u>}k1_p)-C=H`PVFhD@=m=<;28%C{7zp2h8t4JyFfcH1Lfr||F98(?`3I^LDgvPb
zKoX#Q2c<#z7-R;zevlY?+<{E!fEwxx;viwDac~hqa5)C&!WjxsL(}0R5C*z_00)|h
A2LJ#7

literal 0
HcmV?d00001

diff --git a/src/UI.cpp b/src/UI.cpp
new file mode 100644
index 0000000..b27a33c
--- /dev/null
+++ b/src/UI.cpp
@@ -0,0 +1,28 @@
+#include "UI.hpp"
+#include "2048.hpp"
+#include <ncurses.h>
+
+void UI::drawBoard(const Game2048& game) {
+    clear();
+    for (int i = 0; i < SIZE; ++i) {
+        for (int j = 0; j < SIZE; ++j) {
+            mvprintw(i * 2, j * 5, "%4d", game.getBoard()[i][j]); // Now this works
+        }
+    }
+    refresh();
+}
+
+void UI::handleInput(Game2048& game) {
+    int ch = getch();
+    switch (ch) {
+        case KEY_LEFT: game.moveLeft(); break;
+        case KEY_RIGHT: game.moveRight(); break;
+        case KEY_UP: game.moveUp(); break;
+        case KEY_DOWN: game.moveDown(); break;
+    }
+}
+
+void UI::showGameOver() {
+    mvprintw(SIZE * 2, 0, "Game Over! Press any key to exit.");
+    getch();
+}
\ No newline at end of file
diff --git a/src/UI.o b/src/UI.o
new file mode 100644
index 0000000000000000000000000000000000000000..7f1f66b496bcb640693deb1bacbfcd0cab9b099b
GIT binary patch
literal 3016
zcmb<-^>JfjWMqH=Mg}_u1P><4z~I4wU^{@B4h(z@ybPcD<$i^FbUyWHexu;gS^L7H
zv-H6Wko<AiA0Vo^_6Ku)>~YsW5Y8XwdM}S|*9RV*$HA()Lw|TAU-CHkh{c2PP`B$J
zj~U%OP2Hh?Ixif2z|?CZ(Czwz@qkCKC`fnb@f{!vtgqSi598|%&8|NfU(W>#OgMRX
z0yejJbhCmq!R+gF{nJ?chn10mp~M!-sE=)|{lfwhk%cnqy&G%)Fo8r&8*BeCgBWtJ
z&5@n`S`&pQjl$za=1rJz@-ULS1Ux!xe?a}S59F}@pm0U_3(dI`P96p+0%28?6cFW}
zn47BLUzS>=s1Q(;T3oD<m{+Ngom#0-lCO|jky)b0z~JueY^9(PnpB!sQmSC7XQF4I
zYgh{A8P*vY=oy&k8EHbq85kH?7#J7?7#J8pq2%rt%D}|HZ~!F646=-Yfk6aHGgbvL
zFjfdKO7pODOkiYSkYRvekaRbQaOD$dV{+zYV`}1I=YYuBfW#RX7-oQIxO_icJ_aPt
zz`$S&qG9qSU}=yDRt!p;EDRt2W0PdYnsON!m>FQcLDj_!_C2Z?h{p^L4G;@~LD9sB
zBo1;1OqQ8}9mYhVnHfO3P=vr7W(H0$jZQE#u%QbvC^IlH2qF0k9M%jB44^y+iZ^r(
zVbJ(Q7YBtkHua@A)Yst<Z-ct02WkO0ZW$ODmf}#q28Z}&9O9>Oh(Ez0{tJh=5F;eq
zRG<+BPGcZ9hkEKI7ZfnWM+KMo7+Mx&rY5JBXBMZ%C+FuCmlTyImoUUf`5A?JTBZ~w
zmOJGq7Nxibd0T+8osofw1w*{MkH3?nPrSdITd-?Le2Alyk83<ba!zVu5lACKrA2yb
z2}FAtLvC3?QD$CAIYUuuT2X3o21un*sHdS}Mq*w{PO4{KL1~F=5W<q;l9b})B8Kwx
z)RJVdVz`t=Zhl#+Pik6;YZ=H8xVR-qJSa0g16{%lBoSJGrW|aHOMZDCL>%N6qvDMG
za*#Jcg^Oz$D5yXfT=GK830?*UhClxyz#1e873V_|Plt*#LCciC5as`iq2i#jg&#?M
z3z9e}eZtIN3>62NBZQ=WHB=mAjxdt=CnRxDnFTWkmUTetL4JXW^Fh-ENL&ob92q2W
zaU^kbs5r<ypt2IA4`ih`R2;-d_E!*89HbuE{ZUYHka}eID}W4RU;vfBU<~Dg^ErqO
zG6#fV`7Qw@h@>8t&KdNID|1T{lNj`hONt<L28>mdnv<wkl3G#1pqG+ZlE|Q!R9wuU
zSCkLoB<JVmrskC}=;h^?r0Ti*h3XcUBqnD=`RRG3dId%K1*t_Pl?-}dlTtI{(~1&v
zQ=u-Qi~{)|6g221AgG)JnVblc1Tml(6c$h>n39I3MVNZ9AOiz~0@T0^sD5q+25^#q
zmCO=Qg=$c7^qOKJR3B6soI)4YVPF84_T=g}gxZhpuN6>>wBR;F7%=xkcnl1dQ2hol
z0VsV5svqP&s1TTf3WLJ}B;W+q4`L(Ze=vo}f>_iBF))B@L3H=S5;G`%k&Qrie-_kC
zbo~lYfeK{J(6B}p0;NJwo<fiR4rtZv0aXl&e@-O*u=odg6KWMyC4`y*6^ww=JPZsB
zATwa@hv^5Ii5~YL6Fz_(#lXOz39<kr0L5rr20;c;I|V9<L|uTozXVAP#6;H*05Q$P
AxBvhE

literal 0
HcmV?d00001

diff --git a/src/main.cpp b/src/main.cpp
new file mode 100644
index 0000000..2ad697a
--- /dev/null
+++ b/src/main.cpp
@@ -0,0 +1,26 @@
+#include "2048.hpp"
+#include "UI.hpp"
+#include "Extra.hpp"
+#include <ncurses.h>
+
+int main() {
+    initializeGame();
+
+    Game2048 game;
+    UI ui;
+
+    ui.drawBoard(game);
+
+    while (true) {
+        ui.handleInput(game);
+        ui.drawBoard(game);
+
+        if (!game.canMove()) {
+            ui.showGameOver();
+            break;
+        }
+    }
+
+    cleanupGame();
+    return 0;
+}
\ No newline at end of file
diff --git a/src/main.o b/src/main.o
new file mode 100644
index 0000000000000000000000000000000000000000..81e031e499cf37f1c37af6a7495a82b1b505cd12
GIT binary patch
literal 2376
zcmb<-^>JfjWMqH=Mg}_u1P><4z;J>U!FB*M9T@l+co{zP%l!)V=zQwY{3apAqnkxl
zgMop;qto?=;ei(*Wgfk*8$3FXL)oDlJbGQ%dvsnSRS027^9RP310}~H=0MDy05*LG
z*t%}tA1NNjJYZ*(u!1E{9%f*0cXqZ?&<IT`%_}KYu+%frGtf0G1@jE+j12S)O!SO2
zA>trY7#J8>7#J7?7#J8p-gfs3Wnf}pH~<o3hRTaTX~wD`2F3~jMrj^)jtPtm3^EK5
z43b_7B3$_d+L)Yq*_h_=uycR}uwzh|voL)8k4=^tYm6{3Ff+hhgQ|-e?0Qr&5RVz`
z8xRYDxfmE27?H$5?tsZMGqA&$C^Rzzc8@SKaH6P#ahMs{U`#lz%D})Ngyb)9STQg#
zXhFjrt`N!qr8!W1K)G-#1c&-m9O6wl#24Za2c;@(_MXR~{s9hghTO!=JiX+C0*3gg
z;1VB0%Yw|*<ka%a;?(%${Ji3lqSE9Nuo{MVcOQQzN1u3qH@9HdkoXWsCm+{%hWIE$
zlgzx#lFY=M%&JuP#N5;}hWIEy3lPi5z{JAY&=o9T6zXZ2Qj}Qkl%H6X;u_=)R{&CN
z6zXYcn30&5l9TG0S5R8w8iXPZ=a?ra=K1EArNWIgG%C)>F9+G>UzS<~7B)0Y&Ph$o
zD=h$tmNCS~7ndX^XU8XJWXGo^X6C>m2$UZ{Y*60eWnf_V^B)30#RN>84@uk_BnZua
z{7B+{NaCRQfSHqsB#x{;7fD<Y$(#lxaUmq}HY9OjB=Px3;-EYavsVEs&cwg~DjT3Y
z1_lPb;>z5T#3Tm2;*uf=odIJNrRF5+m84dbFzBTumLxLhB^4Jl=oRHdILZ0Bxv6<2
z40?I_C8>JuexbVH5QXy7^Gfv!it-Cmi%KdP^uQ*iX2hozCFX)sI>LH#Ss?#_@;-V_
z1?4-CnXvo`VuLV9Er^C;X=t3m)WgIRKoQTtz;FX9zzr^M7~my{1XNrNDvn;FJ%!4n
zQ|R{VFhI;CSHB_Deo%ZO+Xb^9-9B`_B~-rwvStPbhG$Sd$bC>In1bnt(N0kPU`ZrG
z2&Mo@48%ki4q{*cm)7X+mw+k+#V<%745OFeSy21Y^;<yoTfj6zX>|RdR0xV{^!T>`
zRiF$E46t|x#XqQ)fa!;cgRDWf8)Q`hNP>ZZ;RlrFVPIeYnSrh!WF~stgY;)W1wVo~
cNEm7yTm)1`K$XJ9K#TyW`%6F^B#f>f0GQA!?f?J)

literal 0
HcmV?d00001

-- 
GitLab