From 1d1e4932175f4c7e2eb548e36830de4749727d35 Mon Sep 17 00:00:00 2001 From: Jamal <fredrick2.enoime@live.uwe.ac.uk> Date: Sat, 26 Apr 2025 18:30:26 +0100 Subject: [PATCH] Almsost done --- 2048 | Bin 39232 -> 0 bytes Makefile | 40 ++-- bin/2048 | Bin 0 -> 101640 bytes include/GameMode.hpp | 104 ++++++++ include/UI.hpp | 69 +++++- obj/2048.o | Bin 0 -> 52264 bytes {src => obj}/Extra.o | Bin obj/GameMode.o | Bin 0 -> 24480 bytes {src => obj}/Tile.o | Bin obj/UI.o | Bin 0 -> 83440 bytes obj/main.o | Bin 0 -> 31840 bytes src/2048.cpp | 12 +- src/2048.o | Bin 52736 -> 0 bytes src/GameMode.cpp | 150 ++++++++++++ src/UI.cpp | 553 +++++++++++++++++++++++++++++++++++++++---- src/UI.o | Bin 5360 -> 0 bytes src/main.cpp | 83 ++++++- src/main.o | Bin 2264 -> 0 bytes 18 files changed, 927 insertions(+), 84 deletions(-) delete mode 100755 2048 create mode 100755 bin/2048 create mode 100644 include/GameMode.hpp create mode 100644 obj/2048.o rename {src => obj}/Extra.o (100%) create mode 100644 obj/GameMode.o rename {src => obj}/Tile.o (100%) create mode 100644 obj/UI.o create mode 100644 obj/main.o delete mode 100644 src/2048.o create mode 100644 src/GameMode.cpp delete mode 100644 src/UI.o delete mode 100644 src/main.o diff --git a/2048 b/2048 deleted file mode 100755 index c7c546fcb6a8996c9f964d9987173c168731fa75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39232 zcmb<-^>JfjWMqH=W(GS35O0AnM8p9?F*r<wG8h;b92hJZco`fR6d2?g*cccXSioWs zdANEAm*EBzgaM;DAY2A!s6Gi0gMonootA;BgV7*2frLOb$UYDo8-BnG5rxqV0uVk( zA1jCn<-^2b^ih3~Bm)DChKYmpf$c;07?ke;4JR0ltPd16D`Ft#uE;^93!wh)fYLC1 zpx^@O+X2<L1F8>38-NrrFfhPqSa^cm2*MUn^U!Gpi1iFG8eLxmR3AF+0@VkjL3V(I zf}fV8fY|8v!1yqGU^L9W0H{72N02ED4Cr(T)EzJyWCuuP;M0;6P`H5D#9&x72SM$_ z6%XkC1;sbWeEpovBr_BJoD|)h%)HVH-3kjcT{9EC;(R?LkTf{WgX{pMDR;k61||lE z10c6Toe!25VPF8KbC7(^H<8t{+0R4%SIzTtZB&peS?zlbq#k4j$WD+Nkij7R&?p9R zLFO_jGBAMiB*g!Xj0_D7U@?$_3#sRFZ)*3zvI$5C1<zn$U=TtPfpAvg5MRNFUA+Jf z@lqV-oWUWkiNl;^9O^&e5Wj^(d@T<1t#ODi#~~h$LwpksaZq-}7S8QB+_?ycIej?P zgNgxc=EveNXAur_YH)~W<1ohwhxj%e=7ix87i3_7mpzaa2q8Ohn12a}xGoNJY;cGl zW@KPcf>?z@US?om5M+>MP$+;1!^$UyoXn)W<kF(z)M8L(H)DwR4DpRmNi9lE&nzxU zEei2<&dJY94M|MONo9zSPtVQIi!UxoEGmhQhbYCWFgYhRv4|lrKQ%ccpP@Xlq@*Z5 zKaU}|te_|}ucVxzJUz7}IfEf1u{b_CKPSJam?1SUr93karZg>$Au}(tB)%Xqvk1&8 zPA+1A*a}w9P?VZhlv<nta(qc<URplH>Dj531&JvP#U&{q^&n5h7pInh6cv}GBx`F! zRK-UHmlzqu$CqRj<(J3jq~@iUWW=Wy73CKNcqcP}WDU(>vPp?4@rgM(`N?Gr@$tzO ziSbFP>6v-)$%!E6$48~)1b`&cD=Oj(Qj3c7^AdA1ODf~b3>f00^2&3edWurPRzZ2G zc_~o+Ihjf6$;t8Ha5rR#56vsj%u9(6N-ZwUO$9kR8RFj5ip&y*;-bX76o!(_Tu>ww zmn0@<$0uiG$EPJ`=0MF&%LLh81(MInOiG4EQf^{q9)r8HbG)&h0fV1&Xi%_guvvVF zr=OdDys4gno}s0srJ;e5F@tkNgrk#ZyrG^kgS(HXlXFBwys@4MgdJ~$#4^$|MHqx) z1Oo#D69W?iGXo0)69X#)8v_#q3j-^d4-#XC%7WB@<d_)Pz-mCHKL@zp0M#C#`UR9i z85tNEsu>x;%>+=L8lYCm&A`CH@B~zOfa?cFhJ6eOd1l{m1_lOJhBt6|CWgmQc>@Lp zhRf@-Ss57E7&w?9dP+1Wae!KK!XWFx<}oqMfZ7LAFOr$b%fP_SAP-evDwW9za-Sw# zJ;;R+vq0_*UUrKG<bPABJgof#%V!Os%8`MAVFRdOV*vRCq>F*U0V>XcmM>xa8~G4* zpt=xLFG6?>3=fdRkt@R&NaAuZ#S9D#ACSc5k;H!>iG#u!CM5uM4=6Y#VS=DC2PzJV zCzNsqY7RR%ED;(wki?-u1C|s(5(l*bz=EK5F_Ji_y#NzeKoSSp4HMTu5(kA5OxyrT z9ONdLxCN3pEN(z@4oKphAOR@$KoaMIih-yABynz#02D_ciSt0kKvV*fIJC(Q5@yIi z66XVpK!^e)aejypn5;k&2eqZZf(#4{4M^gkx(6oSfh3MxpH4s$hc@ZKT4o@LLz5<0 zd;yZUC|CqStUwYMg9w4i4M^hRU=awh14�A_OK6Ac;$XMIgipBynko5SYAxBrXdU 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 Tel!>lK?_fSuyxQhpm7-hI=nB$ diff --git a/Makefile b/Makefile index 30620e6..8ccb1de 100644 --- a/Makefile +++ b/Makefile @@ -1,28 +1,28 @@ -# Compiler and flags -CXX = g++ -CXXFLAGS = -std=c++11 -Wall -Wextra -Iinclude -LDFLAGS = -lncurses # Add this for linking ncurses +CC = g++ +CFLAGS = -std=c++11 -Wall -I include +LDFLAGS = -lncurses -# Source files -SRC = src/2048.cpp src/UI.cpp src/Extra.cpp src/Tile.cpp src/main.cpp +SRCDIR = src +OBJDIR = obj +BINDIR = bin -# Object files -OBJ = $(SRC:.cpp=.o) +# Source files +SOURCES = $(wildcard $(SRCDIR)/*.cpp) +OBJECTS = $(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.o,$(SOURCES)) +EXECUTABLE = $(BINDIR)/2048 -# Target executable -TARGET = 2048 +# Create directories if they don't exist +$(shell mkdir -p $(OBJDIR) $(BINDIR)) -# Default target -all: $(TARGET) +all: $(EXECUTABLE) -# Link object files to create the executable -$(TARGET): $(OBJ) - $(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJ) $(LDFLAGS) # <-- Add $(LDFLAGS) here +$(EXECUTABLE): $(OBJECTS) + $(CC) $(OBJECTS) -o $@ $(LDFLAGS) -# Compile source files into object files -%.o: %.cpp - $(CXX) $(CXXFLAGS) -c $< -o $@ # <-- TAB indentation +$(OBJDIR)/%.o: $(SRCDIR)/%.cpp + $(CC) $(CFLAGS) -c $< -o $@ -# Clean up build artifacts clean: - rm -f $(OBJ) $(TARGET) # <-- TAB indentation \ No newline at end of file + rm -rf $(OBJDIR)/*.o $(EXECUTABLE) + +.PHONY: all clean \ No newline at end of file diff --git a/bin/2048 b/bin/2048 new file mode 100755 index 0000000000000000000000000000000000000000..646381373d323dc17565e3794d0c5796fde902f5 GIT binary patch literal 101640 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 literal 0 HcmV?d00001 diff --git a/include/GameMode.hpp b/include/GameMode.hpp new file mode 100644 index 0000000..a815dde --- /dev/null +++ b/include/GameMode.hpp @@ -0,0 +1,104 @@ +#ifndef GAMEMODE_HPP +#define GAMEMODE_HPP + +#include <string> + +enum class GameModeType { + CLASSIC, + TIMED, + POWERUP, + CHALLENGE, + TUTORIAL +}; + +class GameMode { +protected: + GameModeType type; + std::string name; + std::string description; + +public: + GameMode(GameModeType type, const std::string& name, const std::string& description); + virtual ~GameMode() = default; + + virtual void initialize() = 0; + virtual bool update(float deltaTime) = 0; + virtual void render() = 0; + + GameModeType getType() const; + const std::string& getName() const; + const std::string& getDescription() const; +}; + +// Classic mode - original 2048 gameplay +class ClassicMode : public GameMode { +public: + ClassicMode(); + void initialize() override; + bool update(float deltaTime) override; + void render() override; +}; + +// Timed mode - play against the clock +class TimedMode : public GameMode { +private: + float timeLimit; + float timeRemaining; + +public: + TimedMode(); + void initialize() override; + bool update(float deltaTime) override; + void render() override; + + float getTimeRemaining() const; +}; + +// PowerUp mode - special abilities and boosters +class PowerUpMode : public GameMode { +private: + int powerUpCount; + bool doubleScoreActive; + bool removeRowActive; + bool freezeTimeActive; + +public: + PowerUpMode(); + void initialize() override; + bool update(float deltaTime) override; + void render() override; + + void activatePowerUp(int type); +}; + +// Challenge mode - reach specific goals +class ChallengeMode : public GameMode { +private: + int targetScore; + int targetTile; + int movesLimit; + int movesUsed; + +public: + ChallengeMode(); + void initialize() override; + bool update(float deltaTime) override; + void render() override; +}; + +// Tutorial mode - learn to play +class TutorialMode : public GameMode { +private: + int tutorialStep; + bool waitingForInput; + +public: + TutorialMode(); + void initialize() override; + bool update(float deltaTime) override; + void render() override; + + void advanceTutorialStep(); +}; + +#endif \ No newline at end of file diff --git a/include/UI.hpp b/include/UI.hpp index 1e52a83..6f583b0 100644 --- a/include/UI.hpp +++ b/include/UI.hpp @@ -2,15 +2,80 @@ #define UI_HPP #include <ncurses.h> +#include <vector> +#include <string> #include "2048.hpp" +#include "GameMode.hpp" + +enum class UIState { + MAIN_MENU, + MODE_SELECTION, + GAME_PLAYING, + PAUSE_MENU, + GAME_OVER, + TUTORIAL +}; class UI { +private: + UIState currentState; + int selectedMenuOption; + std::vector<std::string> mainMenuOptions; + std::vector<std::string> modeSelectionOptions; + std::vector<std::string> pauseMenuOptions; + GameModeType currentGameMode; + + // Window management + WINDOW* mainWindow; + WINDOW* gameWindow; + WINDOW* scoreWindow; + WINDOW* infoWindow; + + // For animations and transitions + float transitionTimer; + bool isTransitioning; + public: + UI(); + ~UI(); + + void initialize(); void drawBoard(const Game2048& game); void handleInput(Game2048& game); - void showGameOver(Game2048& game); // Modified to allow restart + void showGameOver(Game2048& game); void displayScore(const Game2048& game); - void displayInstructions(); // New method to show game instructions + void displayInstructions(); + + // New menu-related methods + void drawMainMenu(); + void drawModeSelection(); + void drawPauseMenu(); + void handleMenuInput(); + + // Game mode management + void setGameMode(GameModeType mode); + GameModeType getGameMode() const; + + // Tutorial-specific rendering + void drawTutorial(int step); + + // PowerUp mode-specific UI + void drawPowerUpInterface(const PowerUpMode& powerUpMode); + + // Timed mode-specific UI + void drawTimerInterface(float timeRemaining); + + // Challenge mode-specific UI + void drawChallengeInterface(int targetScore, int targetTile, int movesRemaining); + + // State management + void setState(UIState newState); + UIState getState() const; + + // Utility methods + void drawCenteredText(WINDOW* win, int y, const std::string& text, bool highlight = false); + void createWindows(); + void destroyWindows(); }; #endif \ No newline at end of file diff --git a/obj/2048.o b/obj/2048.o new file mode 100644 index 0000000000000000000000000000000000000000..4cf51d0ff32df9b8ccd4253c4c7450419797ce66 GIT binary patch literal 52264 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 literal 0 HcmV?d00001 diff --git a/src/Extra.o b/obj/Extra.o similarity index 100% rename from src/Extra.o rename to obj/Extra.o diff --git a/obj/GameMode.o b/obj/GameMode.o new file mode 100644 index 0000000000000000000000000000000000000000..89923a74ad3a2e02561691fad69613a1ba3df67b GIT binary patch literal 24480 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 literal 0 HcmV?d00001 diff --git a/src/Tile.o b/obj/Tile.o similarity index 100% rename from src/Tile.o rename to obj/Tile.o diff --git a/obj/UI.o b/obj/UI.o new file mode 100644 index 0000000000000000000000000000000000000000..9d33e9f70128cb9f24de4a552ec79a45c72dd76e GIT binary patch literal 83440 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 ADF6Tf literal 0 HcmV?d00001 diff --git a/obj/main.o b/obj/main.o new file mode 100644 index 0000000000000000000000000000000000000000..cbacafd64565d02669a72545504e1172c2d17029 GIT binary patch literal 31840 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 literal 0 HcmV?d00001 diff --git a/src/2048.cpp b/src/2048.cpp index dd59286..c775f6d 100644 --- a/src/2048.cpp +++ b/src/2048.cpp @@ -36,16 +36,6 @@ void Game2048::addToScore(int value) { score += value; } -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].getValue()); - } - } - refresh(); -} - void Game2048::moveLeft() { moved = false; for (int i = 0; i < SIZE; ++i) { @@ -163,4 +153,4 @@ int Game2048::getScore() const { const Tile (*Game2048::getBoard() const)[SIZE] { return board; -} \ No newline at end of file +} diff --git a/src/2048.o b/src/2048.o deleted file mode 100644 index 8980af415a3af453f1c2406f739659a30b323ac5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52736 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 diff --git a/src/GameMode.cpp b/src/GameMode.cpp new file mode 100644 index 0000000..d5e605b --- /dev/null +++ b/src/GameMode.cpp @@ -0,0 +1,150 @@ +#include "GameMode.hpp" +#include <ncurses.h> + +GameMode::GameMode(GameModeType type, const std::string& name, const std::string& description) + : type(type), name(name), description(description) { +} + +GameModeType GameMode::getType() const { + return type; +} + +const std::string& GameMode::getName() const { + return name; +} + +const std::string& GameMode::getDescription() const { + return description; +} + +// Classic Mode Implementation +ClassicMode::ClassicMode() + : GameMode(GameModeType::CLASSIC, "Classic", "The original 2048 game. Combine tiles to reach 2048!") { +} + +void ClassicMode::initialize() { + // Nothing special needed for classic mode +} + +bool ClassicMode::update(float deltaTime) { + // Classic mode has no time-based updates + return true; +} + +void ClassicMode::render() { + // Rendering handled by the main UI class +} + +// Timed Mode Implementation +TimedMode::TimedMode() + : GameMode(GameModeType::TIMED, "Timed", "Race against the clock! Score as high as possible before time runs out."), + timeLimit(180.0f), // 3 minutes + timeRemaining(180.0f) { +} + +void TimedMode::initialize() { + timeRemaining = timeLimit; +} + +bool TimedMode::update(float deltaTime) { + timeRemaining -= deltaTime; + return timeRemaining > 0.0f; +} + +void TimedMode::render() { + // Rendering handled by the UI class +} + +float TimedMode::getTimeRemaining() const { + return timeRemaining; +} + +// PowerUp Mode Implementation +PowerUpMode::PowerUpMode() + : GameMode(GameModeType::POWERUP, "Power-Up", "Use special powers to boost your score!"), + powerUpCount(3), + doubleScoreActive(false), + removeRowActive(false), + freezeTimeActive(false) { +} + +void PowerUpMode::initialize() { + powerUpCount = 3; + doubleScoreActive = false; + removeRowActive = false; + freezeTimeActive = false; +} + +bool PowerUpMode::update(float deltaTime) { + // Power-up specific logic + return true; +} + +void PowerUpMode::render() { + // Rendering handled by the UI class +} + +void PowerUpMode::activatePowerUp(int type) { + if (powerUpCount <= 0) return; + + powerUpCount--; + + switch (type) { + case 1: // Double score + doubleScoreActive = true; + break; + case 2: // Remove row + removeRowActive = true; + break; + case 3: // Freeze time + freezeTimeActive = true; + break; + } +} + +// Challenge Mode Implementation +ChallengeMode::ChallengeMode() + : GameMode(GameModeType::CHALLENGE, "Challenge", "Complete specific objectives within constraints."), + targetScore(5000), + targetTile(512), + movesLimit(100), + movesUsed(0) { +} + +void ChallengeMode::initialize() { + movesUsed = 0; +} + +bool ChallengeMode::update(float deltaTime) { + return movesUsed < movesLimit; +} + +void ChallengeMode::render() { + // Rendering handled by the UI class +} + +// Tutorial Mode Implementation +TutorialMode::TutorialMode() + : GameMode(GameModeType::TUTORIAL, "Tutorial", "Learn how to play 2048."), + tutorialStep(0), + waitingForInput(true) { +} + +void TutorialMode::initialize() { + tutorialStep = 0; + waitingForInput = true; +} + +bool TutorialMode::update(float deltaTime) { + // Tutorial is not time-based + return true; +} + +void TutorialMode::render() { + // Rendering handled by the UI class +} + +void TutorialMode::advanceTutorialStep() { + tutorialStep++; + waitingForInput = true; +} \ No newline at end of file diff --git a/src/UI.cpp b/src/UI.cpp index 630870c..3486cb9 100644 --- a/src/UI.cpp +++ b/src/UI.cpp @@ -1,16 +1,182 @@ #include "UI.hpp" #include "2048.hpp" #include "Extra.hpp" +#include "GameMode.hpp" #include <ncurses.h> #include <cstdlib> +#include <chrono> + +UI::UI() : currentState(UIState::MAIN_MENU), selectedMenuOption(0), + mainWindow(nullptr), gameWindow(nullptr), scoreWindow(nullptr), infoWindow(nullptr), + transitionTimer(0.0f), isTransitioning(false), currentGameMode(GameModeType::CLASSIC) { + + // Initialize menu options + mainMenuOptions = {"Play Game", "Select Mode", "Tutorial", "Quit"}; + modeSelectionOptions = {"Classic", "Timed", "Power-Up", "Challenge", "Back"}; + pauseMenuOptions = {"Resume", "Restart", "Main Menu", "Quit"}; +} + +UI::~UI() { + destroyWindows(); +} + +void UI::initialize() { + createWindows(); +} + +void UI::createWindows() { + int maxY, maxX; + getmaxyx(stdscr, maxY, maxX); + + // Main window covers the entire screen + mainWindow = newwin(maxY, maxX, 0, 0); + keypad(mainWindow, TRUE); + + // Game window for the actual 2048 board + gameWindow = newwin(SIZE * 2 + 2, SIZE * 6 + 2, 2, (maxX - (SIZE * 6 + 2)) / 2); + box(gameWindow, 0, 0); + + // Score window for displaying score and other game info + scoreWindow = newwin(3, 20, 2, maxX - 25); + box(scoreWindow, 0, 0); + + // Info window for instructions and status messages + infoWindow = newwin(5, maxX - 4, maxY - 6, 2); + box(infoWindow, 0, 0); +} + +void UI::destroyWindows() { + if (mainWindow) delwin(mainWindow); + if (gameWindow) delwin(gameWindow); + if (scoreWindow) delwin(scoreWindow); + if (infoWindow) delwin(infoWindow); +} + +void UI::setState(UIState newState) { + currentState = newState; + selectedMenuOption = 0; + isTransitioning = true; + transitionTimer = 0.5f; +} + +UIState UI::getState() const { + return currentState; +} + +void UI::drawCenteredText(WINDOW* win, int y, const std::string& text, bool highlight) { + int maxX, maxY; + getmaxyx(win, maxY, maxX); + int x = (maxX - text.length()) / 2; + + if (highlight) wattron(win, A_REVERSE); + mvwprintw(win, y, x, "%s", text.c_str()); + if (highlight) wattroff(win, A_REVERSE); +} + +void UI::drawMainMenu() { + werase(mainWindow); + + int maxY, maxX; + getmaxyx(mainWindow, maxY, maxX); + + // Title with color + wattron(mainWindow, COLOR_PAIR(COLOR_PAIR_2048) | A_BOLD); + drawCenteredText(mainWindow, maxY / 4, "2048 GAME", false); + wattroff(mainWindow, COLOR_PAIR(COLOR_PAIR_2048) | A_BOLD); + + // Menu options + for (size_t i = 0; i < mainMenuOptions.size(); i++) { + drawCenteredText(mainWindow, maxY / 3 + i * 2, mainMenuOptions[i], i == selectedMenuOption); + } + + // Footer + wattron(mainWindow, A_DIM); + drawCenteredText(mainWindow, maxY - 2, "Use UP/DOWN to navigate, ENTER to select", false); + wattroff(mainWindow, A_DIM); + + wrefresh(mainWindow); +} + +void UI::drawModeSelection() { + werase(mainWindow); + + int maxY, maxX; + getmaxyx(mainWindow, maxY, maxX); + + // Title + wattron(mainWindow, COLOR_PAIR(COLOR_PAIR_1024) | A_BOLD); + drawCenteredText(mainWindow, maxY / 4, "SELECT GAME MODE", false); + wattroff(mainWindow, COLOR_PAIR(COLOR_PAIR_1024) | A_BOLD); + + // Mode options + for (size_t i = 0; i < modeSelectionOptions.size(); i++) { + drawCenteredText(mainWindow, maxY / 3 + i * 2, modeSelectionOptions[i], i == selectedMenuOption); + } + + // Mode description (if one is selected) + if (selectedMenuOption < 4) { + std::string description; + switch (selectedMenuOption) { + case 0: description = "Classic 2048 - Combine tiles to reach 2048!"; break; + case 1: description = "Timed Mode - Race against the clock!"; break; + case 2: description = "Power-Up Mode - Use special abilities!"; break; + case 3: description = "Challenge Mode - Complete specific objectives!"; break; + } + + wattron(mainWindow, A_DIM); + drawCenteredText(mainWindow, maxY / 3 + modeSelectionOptions.size() * 2 + 2, description, false); + wattroff(mainWindow, A_DIM); + } + + // Navigation help + wattron(mainWindow, A_DIM); + drawCenteredText(mainWindow, maxY - 2, "Use UP/DOWN to navigate, ENTER to select", false); + wattroff(mainWindow, A_DIM); + + wrefresh(mainWindow); +} + +void UI::drawPauseMenu() { + // Dim the background + wattron(mainWindow, A_DIM); + for (int y = 0; y < getmaxy(mainWindow); y++) { + for (int x = 0; x < getmaxx(mainWindow); x++) { + mvwaddch(mainWindow, y, x, ' '); + } + } + wattroff(mainWindow, A_DIM); + + // Draw pause menu box + int maxY, maxX; + getmaxyx(mainWindow, maxY, maxX); + + int boxHeight = pauseMenuOptions.size() * 2 + 4; + int boxWidth = 20; + int boxY = (maxY - boxHeight) / 2; + int boxX = (maxX - boxWidth) / 2; + + WINDOW* pauseWin = subwin(mainWindow, boxHeight, boxWidth, boxY, boxX); + box(pauseWin, 0, 0); + + // Title + wattron(pauseWin, A_BOLD); + drawCenteredText(pauseWin, 1, "PAUSED", false); + wattroff(pauseWin, A_BOLD); + + // Menu options + for (size_t i = 0; i < pauseMenuOptions.size(); i++) { + drawCenteredText(pauseWin, 3 + i * 2, pauseMenuOptions[i], i == selectedMenuOption); + } + + wrefresh(pauseWin); + delwin(pauseWin); +} void UI::drawBoard(const Game2048& game) { - clear(); + if (currentState != UIState::GAME_PLAYING) return; - // Display title - attron(A_BOLD); - mvprintw(0, 0, "2048 Game"); - attroff(A_BOLD); + werase(gameWindow); + box(gameWindow, 0, 0); // Display the board for (int i = 0; i < SIZE; ++i) { @@ -19,69 +185,372 @@ void UI::drawBoard(const Game2048& game) { int colorPair = getTileColorPair(value); // Calculate position for the tile - int yPos = i * 2 + 2; - int xPos = j * 6; + int yPos = i * 2 + 1; + int xPos = j * 6 + 1; // Draw the tile with color - attron(COLOR_PAIR(colorPair) | A_BOLD); + wattron(gameWindow, COLOR_PAIR(colorPair) | A_BOLD); if (value != 0) { - mvprintw(yPos, xPos, "%5d", value); + mvwprintw(gameWindow, yPos, xPos, "%5d", value); } else { - mvprintw(yPos, xPos, " "); // Empty tile + mvwprintw(gameWindow, yPos, xPos, " "); // Empty tile } - attroff(COLOR_PAIR(colorPair) | A_BOLD); + wattroff(gameWindow, COLOR_PAIR(colorPair) | A_BOLD); } } - // Display the score with highlight - displayScore(game); + wrefresh(gameWindow); + + // Update score window + werase(scoreWindow); + box(scoreWindow, 0, 0); + + wattron(scoreWindow, COLOR_PAIR(COLOR_PAIR_HIGHER) | A_BOLD); + mvwprintw(scoreWindow, 1, 2, "Score: %d", game.getScore()); + wattroff(scoreWindow, COLOR_PAIR(COLOR_PAIR_HIGHER) | A_BOLD); + + wrefresh(scoreWindow); + + // Update info window + werase(infoWindow); + box(infoWindow, 0, 0); + + mvwprintw(infoWindow, 1, 2, "Controls: Arrow keys to move"); + mvwprintw(infoWindow, 2, 2, "P: Pause, R: Restart, Q: Quit"); - // Display instructions - displayInstructions(); + if (currentGameMode == GameModeType::TIMED) { + mvwprintw(infoWindow, 3, 2, "Time left: %.1f", 180.0f); // Placeholder value + } else if (currentGameMode == GameModeType::POWERUP) { + mvwprintw(infoWindow, 3, 2, "Power-ups: 3 (1-3 to use)"); + } else if (currentGameMode == GameModeType::CHALLENGE) { + mvwprintw(infoWindow, 3, 2, "Target: 512 Moves: 50/100"); + } - refresh(); + wrefresh(infoWindow); } -void UI::displayScore(const Game2048& game) { - attron(COLOR_PAIR(COLOR_PAIR_HIGHER) | A_BOLD); - mvprintw(0, SIZE * 6 + 2, "Score: %d", game.getScore()); - attroff(COLOR_PAIR(COLOR_PAIR_HIGHER) | A_BOLD); - - mvprintw(SIZE * 2 + 3, 0, "Score: %d", game.getScore()); +void UI::drawTimerInterface(float timeRemaining) { + mvwprintw(infoWindow, 3, 2, "Time left: %.1f", timeRemaining); + wrefresh(infoWindow); } -void UI::displayInstructions() { - mvprintw(SIZE * 2 + 4, 0, "Controls: Arrow keys to move, 'r' to restart, 'q' to quit"); +void UI::drawPowerUpInterface(const PowerUpMode& powerUpMode) { + mvwprintw(infoWindow, 3, 2, "Power-ups available: %d", 3); // Placeholder + mvwprintw(infoWindow, 4, 2, "1: Double Score, 2: Clear Row, 3: Undo"); + wrefresh(infoWindow); +} + +void UI::drawChallengeInterface(int targetScore, int targetTile, int movesRemaining) { + mvwprintw(infoWindow, 3, 2, "Target: %d tile Score: %d", targetTile, targetScore); + mvwprintw(infoWindow, 4, 2, "Moves remaining: %d", movesRemaining); + wrefresh(infoWindow); +} + +void UI::drawTutorial(int step) { + werase(mainWindow); + + int maxY, maxX; + getmaxyx(mainWindow, maxY, maxX); + + // Title + wattron(mainWindow, COLOR_PAIR(COLOR_PAIR_16) | A_BOLD); + drawCenteredText(mainWindow, 2, "TUTORIAL", false); + wattroff(mainWindow, COLOR_PAIR(COLOR_PAIR_16) | A_BOLD); + + // Tutorial content + std::string content; + switch (step) { + case 0: + content = "Welcome to 2048!"; + mvwprintw(mainWindow, 5, 5, "In this game, you combine tiles with the same number"); + mvwprintw(mainWindow, 6, 5, "to create a tile with the sum of those numbers."); + mvwprintw(mainWindow, 8, 5, "The goal is to create a tile with the value 2048."); + break; + case 1: + content = "Controls"; + mvwprintw(mainWindow, 5, 5, "Use the arrow keys to move all tiles in that direction."); + mvwprintw(mainWindow, 6, 5, "When two tiles with the same number touch, they merge!"); + mvwprintw(mainWindow, 8, 5, "Press 'r' to restart and 'q' to quit."); + break; + case 2: + content = "Game Modes"; + mvwprintw(mainWindow, 5, 5, "Classic: Traditional 2048 gameplay"); + mvwprintw(mainWindow, 6, 5, "Timed: Race against the clock"); + mvwprintw(mainWindow, 7, 5, "Power-Up: Use special abilities"); + mvwprintw(mainWindow, 8, 5, "Challenge: Meet specific objectives"); + break; + case 3: + content = "Strategy"; + mvwprintw(mainWindow, 5, 5, "Try to keep your highest tile in a corner."); + mvwprintw(mainWindow, 6, 5, "Plan your moves ahead. Don't make hasty decisions."); + mvwprintw(mainWindow, 7, 5, "Sometimes it's better to not merge tiles immediately."); + mvwprintw(mainWindow, 8, 5, "Focus on building up one corner of the board."); + break; + case 4: + content = "Ready to Play!"; + mvwprintw(mainWindow, 5, 5, "You've completed the tutorial!"); + mvwprintw(mainWindow, 6, 5, "Now it's time to play the game and reach 2048!"); + mvwprintw(mainWindow, 8, 5, "Good luck!"); + break; + default: + content = "End of Tutorial"; + mvwprintw(mainWindow, 5, 5, "You're ready to play 2048!"); + break; + } + + wattron(mainWindow, A_BOLD); + drawCenteredText(mainWindow, 3, content, false); + wattroff(mainWindow, A_BOLD); + + // Navigation + wattron(mainWindow, A_DIM); + if (step < 4) { + drawCenteredText(mainWindow, maxY - 2, "Press SPACE to continue or ESC to exit", false); + } else { + drawCenteredText(mainWindow, maxY - 2, "Press ESC to return to main menu", false); + } + wattroff(mainWindow, A_DIM); + + wrefresh(mainWindow); } 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; - case 'r': case 'R': game.resetBoard(); break; // Restart on 'r' key - case 'q': case 'Q': endwin(); exit(0); break; // Quit on 'q' key + switch (currentState) { + case UIState::MAIN_MENU: + handleMenuInput(); + break; + + case UIState::MODE_SELECTION: + handleMenuInput(); + break; + + case UIState::GAME_PLAYING: { + int ch = wgetch(mainWindow); + 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; + case 'r': case 'R': game.resetBoard(); break; + case 'p': case 'P': setState(UIState::PAUSE_MENU); break; + case 'q': case 'Q': setState(UIState::MAIN_MENU); break; + + // PowerUp mode specific keys + case '1': + if (currentGameMode == GameModeType::POWERUP) { + // Activate power-up 1 (would need PowerUpMode instance) + } + break; + case '2': + if (currentGameMode == GameModeType::POWERUP) { + // Activate power-up 2 + } + break; + case '3': + if (currentGameMode == GameModeType::POWERUP) { + // Activate power-up 3 + } + break; + } + break; + } + + case UIState::PAUSE_MENU: + handleMenuInput(); + break; + + case UIState::GAME_OVER: { + int ch = wgetch(mainWindow); + if (ch == 'r' || ch == 'R') { + game.resetBoard(); + setState(UIState::GAME_PLAYING); + } else if (ch == 'q' || ch == 'Q' || ch == 27) { // 27 is ESC + setState(UIState::MAIN_MENU); + } + break; + } + + case UIState::TUTORIAL: { + int ch = wgetch(mainWindow); + static int tutorialStep = 0; + + if (ch == ' ') { + tutorialStep++; + if (tutorialStep > 4) { + setState(UIState::MAIN_MENU); + tutorialStep = 0; + } else { + drawTutorial(tutorialStep); + } + } else if (ch == 27) { // ESC + setState(UIState::MAIN_MENU); + tutorialStep = 0; + } + break; + } + } +} + +void UI::handleMenuInput() { + int ch = wgetch(mainWindow); + + switch (currentState) { + case UIState::MAIN_MENU: + if (ch == KEY_UP) { + selectedMenuOption = (selectedMenuOption - 1 + mainMenuOptions.size()) % mainMenuOptions.size(); + drawMainMenu(); + } else if (ch == KEY_DOWN) { + selectedMenuOption = (selectedMenuOption + 1) % mainMenuOptions.size(); + drawMainMenu(); + } else if (ch == 10 || ch == KEY_ENTER) { // Enter key + switch (selectedMenuOption) { + case 0: // Play Game + setState(UIState::GAME_PLAYING); + break; + case 1: // Select Mode + setState(UIState::MODE_SELECTION); + break; + case 2: // Tutorial + setState(UIState::TUTORIAL); + drawTutorial(0); + break; + case 3: // Quit + endwin(); + exit(0); + break; + } + } + break; + + case UIState::MODE_SELECTION: + if (ch == KEY_UP) { + selectedMenuOption = (selectedMenuOption - 1 + modeSelectionOptions.size()) % modeSelectionOptions.size(); + drawModeSelection(); + } else if (ch == KEY_DOWN) { + selectedMenuOption = (selectedMenuOption + 1) % modeSelectionOptions.size(); + drawModeSelection(); + } else if (ch == 10 || ch == KEY_ENTER) { // Enter key + switch (selectedMenuOption) { + case 0: // Classic + setGameMode(GameModeType::CLASSIC); + setState(UIState::GAME_PLAYING); + break; + case 1: // Timed + setGameMode(GameModeType::TIMED); + setState(UIState::GAME_PLAYING); + break; + case 2: // Power-Up + setGameMode(GameModeType::POWERUP); + setState(UIState::GAME_PLAYING); + break; + case 3: // Challenge + setGameMode(GameModeType::CHALLENGE); + setState(UIState::GAME_PLAYING); + break; + case 4: // Back + setState(UIState::MAIN_MENU); + break; + } + } else if (ch == 27) { // ESC + setState(UIState::MAIN_MENU); + } + break; + + case UIState::PAUSE_MENU: + if (ch == KEY_UP) { + selectedMenuOption = (selectedMenuOption - 1 + pauseMenuOptions.size()) % pauseMenuOptions.size(); + drawPauseMenu(); + } else if (ch == KEY_DOWN) { + selectedMenuOption = (selectedMenuOption + 1) % pauseMenuOptions.size(); + drawPauseMenu(); + } else if (ch == 10 || ch == KEY_ENTER) { // Enter key + switch (selectedMenuOption) { + case 0: // Resume + setState(UIState::GAME_PLAYING); + break; + case 1: // Restart + // Need to reset the game + setState(UIState::GAME_PLAYING); + break; + case 2: // Main Menu + setState(UIState::MAIN_MENU); + break; + case 3: // Quit + endwin(); + exit(0); + break; + } + } else if (ch == 27 || ch == 'p' || ch == 'P') { // ESC or P to resume + setState(UIState::GAME_PLAYING); + } + break; } } void UI::showGameOver(Game2048& game) { - attron(COLOR_PAIR(COLOR_PAIR_HIGHER) | A_BOLD); - mvprintw(SIZE * 2 + 6, 0, "GAME OVER!"); - attroff(COLOR_PAIR(COLOR_PAIR_HIGHER) | A_BOLD); + // Dim the background + wattron(mainWindow, A_DIM); + for (int y = 0; y < getmaxy(mainWindow); y++) { + for (int x = 0; x < getmaxx(mainWindow); x++) { + mvwaddch(mainWindow, y, x, ' '); + } + } + wattroff(mainWindow, A_DIM); + + // Create a popup window + int maxY, maxX; + getmaxyx(mainWindow, maxY, maxX); + + int boxHeight = 7; + int boxWidth = 30; + int boxY = (maxY - boxHeight) / 2; + int boxX = (maxX - boxWidth) / 2; + + WINDOW* gameOverWin = subwin(mainWindow, boxHeight, boxWidth, boxY, boxX); + box(gameOverWin, 0, 0); - mvprintw(SIZE * 2 + 7, 0, "Press 'r' to restart or 'q' to quit"); - refresh(); + // Title + wattron(gameOverWin, COLOR_PAIR(COLOR_PAIR_HIGHER) | A_BOLD); + drawCenteredText(gameOverWin, 1, "GAME OVER!", false); + wattroff(gameOverWin, COLOR_PAIR(COLOR_PAIR_HIGHER) | A_BOLD); + // Score + std::string scoreText = "Final Score: " + std::to_string(game.getScore()); + drawCenteredText(gameOverWin, 3, scoreText, false); + + // Options + drawCenteredText(gameOverWin, 5, "R: Restart Q: Quit", false); + + wrefresh(gameOverWin); + + // Wait for input while (true) { - int ch = getch(); + int ch = wgetch(gameOverWin); if (ch == 'r' || ch == 'R') { game.resetBoard(); + setState(UIState::GAME_PLAYING); + break; + } else if (ch == 'q' || ch == 'Q' || ch == 27) { // Q or ESC + setState(UIState::MAIN_MENU); break; - } else if (ch == 'q' || ch == 'Q') { - endwin(); - exit(0); } } -} \ No newline at end of file + + delwin(gameOverWin); +} + +void UI::setGameMode(GameModeType mode) { + currentGameMode = mode; +} + +GameModeType UI::getGameMode() const { + return currentGameMode; +} + +void UI::displayScore(const Game2048& game) { + // This is now handled in drawBoard +} + +void UI::displayInstructions() { + // This is now handled in drawBoard with the info window +} diff --git a/src/UI.o b/src/UI.o deleted file mode 100644 index 30433495b505e870cdf9860ba7f717ff9de76884..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5360 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 V44|?PoBkhA_m`k5hc!#!q5#B}Ls<X- diff --git a/src/main.cpp b/src/main.cpp index 8708fb4..934ac4e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,7 +1,19 @@ #include "2048.hpp" #include "UI.hpp" #include "Extra.hpp" +#include "GameMode.hpp" #include <ncurses.h> +#include <chrono> +#include <thread> + +// Helper function for tracking time +float getDeltaTime() { + static auto lastTime = std::chrono::high_resolution_clock::now(); + auto currentTime = std::chrono::high_resolution_clock::now(); + std::chrono::duration<float> duration = currentTime - lastTime; + lastTime = currentTime; + return duration.count(); +} int main() { // Initialize the game and colors @@ -9,18 +21,71 @@ int main() { Game2048 game; UI ui; - - ui.drawBoard(game); - + ui.initialize(); + + // Create game mode instances + ClassicMode classicMode; + TimedMode timedMode; + PowerUpMode powerUpMode; + ChallengeMode challengeMode; + TutorialMode tutorialMode; + + // Show the main menu initially + ui.drawMainMenu(); + + float timeRemaining = 180.0f; // For timed mode + while (true) { + float deltaTime = getDeltaTime(); + + // Handle timing for timed mode + if (ui.getState() == UIState::GAME_PLAYING && ui.getGameMode() == GameModeType::TIMED) { + timeRemaining -= deltaTime; + ui.drawTimerInterface(timeRemaining); + + if (timeRemaining <= 0) { + ui.showGameOver(game); + } + } + + // Handle user input based on current state ui.handleInput(game); - ui.drawBoard(game); - - if (!game.canMove()) { - ui.showGameOver(game); - // After restart, redraw the board - ui.drawBoard(game); + + // Update display based on current state + switch (ui.getState()) { + case UIState::MAIN_MENU: + ui.drawMainMenu(); + break; + + case UIState::MODE_SELECTION: + ui.drawModeSelection(); + break; + + case UIState::GAME_PLAYING: + ui.drawBoard(game); + + // Check for game over + if (!game.canMove()) { + ui.showGameOver(game); + ui.drawBoard(game); + } + break; + + case UIState::PAUSE_MENU: + ui.drawPauseMenu(); + break; + + case UIState::GAME_OVER: + // Handled in showGameOver + break; + + case UIState::TUTORIAL: + // Handled in handleInput and drawTutorial + break; } + + // Sleep a bit to limit CPU usage + std::this_thread::sleep_for(std::chrono::milliseconds(50)); } cleanupGame(); diff --git a/src/main.o b/src/main.o deleted file mode 100644 index 618be4a5c4dc1eefa3ddc87ac01405fe3e818fbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2264 zcmb<-^>JfjWMqH=Mg}_u1P><4z!1TTU^{@B4h(z@ybPcD<$i^FbUyWHev^>m(aoZ& z!N9=a(dqib@W2a@GLK%@4IZ7xq3qBN9=)#XJvy(EDughk`2%Cifs*4My~LRHdOib# zyR);Ef<|akX<kXGf~B5`o`J4mDVS$iXJnvfV4`QF2@wammxY0WL4bjQ0pwkGzfcAy z28IJ5F=mh?0|SEylxD07VqmNgV3g)z=a|6Az#zi_!64}cAi|YTppD6ymkq?mgF#`< z!tn7wHYLnhV}gN!nE~b+R9(yrAeW+wfq2Yd-+)*M%*DXKz=$LcatBP7nSmX~M4_1( zI8gX74l@HMjEO=sGhq5&m4Sgl2+3dIuwr0f(1M0LiUAA^44||IiVt-05FF}LafmnJ z5MPKxd<PD3hTO!=JiX+C0*3gg;1VB0%Yw|*<ka%a;?(%${Ji3lqSE9Nuo{MVcOQQz zN1u3qH@9HdkoXWsCm+{%hWIE$lgzx#lFY=M%&JuP#N5;}hWIEy3lPi5z{JAY&=o9T z6zXZ2Qj}Qkl%H6X;u_=)R{&CN6zXYcn30&5l9TG0S5R8w8iXPZ=a?ra=K1EArNWIg zG%C)>F9+G>UzS>gtPPZYL17F^LA(qM41fMZ04O`d#QBiKtwDke4B!;Uk0kDgBo2x< zm^q0^;>hZAk;Da&%xOmw7eW%Bg(Qw_jsjGiiGcx>XQ4a>1_r(2%G{E~BnG|Wk|GG5 z0b>=V<|OKsq*jzL=%pl<Br@nF6&Ew;73D)X$@#gtsd*&~dU^RJse0~yp}NH-iOJbe zetKT1UO`cQL26M+C4(N=q|}V~w4%gZPzpp?Pc94OA5fk|&q1L405TJnZ$NAi2B`(n zFf0v?8<={SI0q<#85kH2Kn1wL<p2XbXG=iE)u7_&CCvk<JUWGLzYYV$Omg)bLhT2| zC$e2I`_b(~=UYPc8z5_DU|@I%<%8S@Wr8V~ei-cp)en|LB6wj6ki<Ytbm1Td25>2g z?tTHNLQwpI^uaKC$(jYVA6>rzRKEpGBa}wh4@!lgs78<f6Cgnb1_oF>gW?}ldc*X? z#6i}e+YPcR10=z~z;FUe^Dr<lfXqPG4>A)y?m_wupn^9*93%`i4lV*J3!qBjVj#u? NsQXJm93+gc9{^898M^=g -- GitLab