#include #include #include #include "matrix.hpp" #include "rand.hpp" #include "constants.hpp" #include "maze.hpp" using std::string; using matrix::Matrix; TEST_CASE("hunt-and-kill", "[mazes]") { auto map = matrix::make(21, 21); std::vector rooms; std::vector dead_ends; maze::hunt_and_kill(map, rooms, dead_ends); matrix::dump("BASIC MAZE", map); maze::randomize_rooms(rooms, dead_ends); maze::hunt_and_kill(map, rooms, dead_ends); for(auto& room : rooms) { for(matrix::box it{map, room.x, room.y, room.width}; it.next();) { map[it.y][it.x] = WALL_PATH_LIMIT; } } matrix::dump("MAZE WITH ROOMS", map); } TEST_CASE("hunt-and-kill ring", "[mazes]") { auto map = matrix::make(21, 21); std::vector rooms; std::vector dead_ends; maze::init(map); maze::inner_ring(map, 5, 2); maze::hunt_and_kill(map, rooms, dead_ends, false); for(auto at : dead_ends) { map[at.y][at.x]=32; } matrix::dump("RING MAZE", map); REQUIRE(rooms.size() == 0); } TEST_CASE("hunt-and-kill fissure", "[mazes]") { auto map = matrix::make(21, 21); std::vector rooms; std::vector dead_ends; maze::init(map); maze::divide(map, {3,3}, {19,18}); maze::hunt_and_kill(map, rooms, dead_ends, false); for(auto at : dead_ends) { map[at.y][at.x]=32; } matrix::dump("FISSURE MAZE", map); REQUIRE(rooms.size() == 0); } TEST_CASE("hunt-and-kill no-dead-ends", "[mazes]") { auto map = matrix::make(21, 21); std::vector rooms; std::vector dead_ends; maze::init(map); maze::hunt_and_kill(map, rooms, dead_ends, false); maze::remove_dead_ends(map, dead_ends); matrix::dump("NO DEAD ENDS", map); } TEST_CASE("hunt-and-kill too much", "[mazes]") { auto map = matrix::make(21, 21); std::vector rooms; std::vector dead_ends; maze::init(map); maze::inner_ring(map, 4, 2); maze::divide(map, {3,3}, {19,18}); auto copy = map; maze::hunt_and_kill(copy, rooms, dead_ends, false); map = copy; maze::randomize_rooms(rooms, dead_ends); maze::hunt_and_kill(map, rooms, dead_ends, false); matrix::dump("NO DEAD ENDS", map); }