From 7753b52dfbeb7b958c62a3801f3b278ab67260e1 Mon Sep 17 00:00:00 2001 From: shivam7147 Date: Mon, 27 Oct 2025 23:06:24 +0530 Subject: [PATCH] feat : MazeGenerator --- .vscode/settings.json | 3 +- .../3DMAZE_GeneratorSolver.cpp | 175 ++++++++++++++++++ .../3DMAZE_GeneratorSolver.exe | Bin 0 -> 90035 bytes .../README.md | 0 4 files changed, 177 insertions(+), 1 deletion(-) create mode 100644 Src/3DMAZE_GeneratorSolver/3DMAZE_GeneratorSolver.cpp create mode 100644 Src/3DMAZE_GeneratorSolver/3DMAZE_GeneratorSolver.exe rename Src/{3DMAZE_Generator&Solver => 3DMAZE_GeneratorSolver}/README.md (100%) diff --git a/.vscode/settings.json b/.vscode/settings.json index 70e34ec..9d68df4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "C_Cpp.errorSquiggles": "disabled" + "C_Cpp.errorSquiggles": "disabled", + "cmake.sourceDirectory": "C:/Users/shiva/Desktop/Projects/cppM/CPP_Mini_Projects/Src/Password_Generator" } \ No newline at end of file diff --git a/Src/3DMAZE_GeneratorSolver/3DMAZE_GeneratorSolver.cpp b/Src/3DMAZE_GeneratorSolver/3DMAZE_GeneratorSolver.cpp new file mode 100644 index 0000000..d4cc741 --- /dev/null +++ b/Src/3DMAZE_GeneratorSolver/3DMAZE_GeneratorSolver.cpp @@ -0,0 +1,175 @@ +#include +#include +#include +#include +#include + +using namespace std; +using namespace std::this_thread; +using namespace std::chrono; + +const int SIZE = 10; +int delay_ms = 120; + +bool visited[SIZE * SIZE]; +bool walls[SIZE * SIZE][2] = {0}; +int startPos = 0; +int goalPos = SIZE * SIZE - 1; +int path[SIZE * SIZE] = {0}; +int pos = startPos; +int rot = 0; +int pathIndex = 0; + +// ------------------------------------------------------------ +void drawMazeConsole(bool showPath = false, bool clearScreen = true) { + if (clearScreen) { +#ifdef _WIN32 + system("cls"); +#else + system("clear"); +#endif + } + + cout << "\n"; + for (int j = 0; j < SIZE; j++) { + for (int i = 0; i < SIZE; i++) { + cout << "+"; + if (walls[i + j * SIZE][1]) + cout << " "; + else + cout << "---"; + } + cout << "+\n"; + + for (int i = 0; i < SIZE; i++) { + if (walls[i + j * SIZE][0]) + cout << " "; + else + cout << "|"; + + int position = i + j * SIZE; + + if (position == startPos) + cout << " S "; + else if (position == goalPos) + cout << " G "; + else if (position == pos && showPath) + cout << " P "; + else if (showPath && path[position]) + cout << " . "; + else + cout << " "; + } + cout << "|\n"; + } + + for (int i = 0; i < SIZE; i++) cout << "+---"; + cout << "+\n"; + cout.flush(); + sleep_for(milliseconds(delay_ms)); +} + +// ------------------------------------------------------------ +int nextCell(int pos, int size) { + int options[4], count = 0; + if (pos >= size && !visited[pos - size]) options[count++] = -size; + if ((pos + 1) % size != 0 && !visited[pos + 1]) options[count++] = 1; + if (pos < size * (size - 1) && !visited[pos + size]) options[count++] = size; + if (pos % size != 0 && !visited[pos - 1]) options[count++] = -1; + + if (count == 0) return 0; + return options[rand() % count]; +} + +void connect(int pos1, int pos2) { + if (pos2 > pos1) { + if (pos2 == pos1 + 1) walls[pos2][0] = 1; + else walls[pos2][1] = 1; + } else { + if (pos1 == pos2 + 1) walls[pos1][0] = 1; + else walls[pos1][1] = 1; + } +} + +void randomDFS(int pos, int size) { + visited[pos] = 1; + int next = pos + nextCell(pos, size); + + while (next != pos) { + connect(pos, next); + pos = next; + drawMazeConsole(false); + randomDFS(pos, size); + next = pos + nextCell(pos, size); + } +} + +// ------------------------------------------------------------ +bool move() { + char dir; + if (abs(rot) % 4 == 0) dir = 'N'; + else if (abs(rot) % 4 == 1) dir = 'E'; + else if (abs(rot) % 4 == 2) dir = 'S'; + else dir = 'W'; + + switch (dir) { + case 'E': + if ((pos + 1) % SIZE != 0 && walls[pos + 1][0]) { pos += 1; path[pos] = ++pathIndex; return true; } + return false; + case 'S': + if (pos < SIZE * (SIZE - 1) && walls[pos + SIZE][1]) { pos += SIZE; path[pos] = ++pathIndex; return true; } + return false; + case 'W': + if (pos % SIZE != 0 && walls[pos][0]) { pos -= 1; path[pos] = ++pathIndex; return true; } + return false; + case 'N': + if (pos >= SIZE && walls[pos][1]) { pos -= SIZE; path[pos] = ++pathIndex; return true; } + return false; + } + return false; +} + +void solveMazeRightHand() { + path[0] = 1; + rot = 1; + pos = startPos; + + while (pos != goalPos) { + rot++; + if (!move()) { + rot--; + if (!move()) { + rot--; + if (!move()) { + rot--; + move(); + } + } + } + drawMazeConsole(true); + } +} + +// ------------------------------------------------------------ +int main() { + srand(time(0)); + + memset(visited, 0, sizeof(visited)); + cout << "\nGenerating maze...\n"; + randomDFS(0, SIZE); + + cout << "\nMaze generation complete!\n"; + drawMazeConsole(false, false); // show final maze once + sleep_for(seconds(2)); + + cout << "\nSolving maze (Right-Hand Rule)...\n"; + solveMazeRightHand(); + + cout << "\nFinal solved maze:\n"; + drawMazeConsole(true, false); + + cout << "\nPress Enter to exit..."; + cin.ignore(); + cin.get(); + return 0; +} diff --git a/Src/3DMAZE_GeneratorSolver/3DMAZE_GeneratorSolver.exe b/Src/3DMAZE_GeneratorSolver/3DMAZE_GeneratorSolver.exe new file mode 100644 index 0000000000000000000000000000000000000000..65ac42f59f9c6515c2999507550bfd08bfef5f21 GIT binary patch literal 90035 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