#pragma once #include #include #include #include #include #include class MazeGenerator { public: explicit MazeGenerator(uint32_t height, uint32_t width); ~MazeGenerator(); static constexpr uint32_t Maze_Char_Space = 32; // " " static constexpr uint32_t Maze_Char_Exit = 69; // E static constexpr uint32_t Maze_Char_Start = 83; // S static constexpr uint32_t Maze_Char_Wall = 88; // X static constexpr uint32_t Maze_Char_Path = 111; // o static constexpr uint32_t Maze_Char_Nul = 0; static constexpr uint32_t Maze_Char_Entrance = 69; // E static constexpr uint32_t Maze_Char_Finish = 70; // F static constexpr uint32_t Maze_Char_Player = 80; // P int Maze_Height_Half; int Maze_Width_Half; int Maze_Exits; int Maze_Max_Exits; int Maze_Centre_Top; int Maze_Centre_Bottom; int Maze_Centre_Left; int Maze_Centre_Right; int Maze_Centre_Size; int Maze_All_Nodes; int Maze_Available_Nodes; int Maze_Nodes_To_Clear; void InitializeMapDetails(); void SetCell(uint32_t y, uint32_t x, uint32_t value); uint32_t GetCell(uint32_t y, uint32_t x) { return m_area[y][x]; } char** GetMaze() { return m_area; } void SetMaze(char** maze, uint32_t mazeHeight, uint32_t mazeWidth); uint32_t GetHeight() { return m_areaHeight; } uint32_t GetWidth() { return m_areaWidth; } void GenerateWalls(); void GenerateCentreSpace(uint32_t exitEntrance = Maze_Char_Start); void GenerateRandomExit(int n, int* exitsLocation, int* playerLocation, uint32_t exitEntrance = Maze_Char_Space); void PrintMaze(); protected: std::random_device random_device; static constexpr uint32_t vertical = 0u; static constexpr uint32_t horizontal = 1u; char** m_area; uint32_t m_areaHeight; uint32_t m_areaWidth; };