With some help from chat I sorted out how to randomize rooms without overlap.

This commit is contained in:
Zed A. Shaw 2026-03-08 03:28:49 -04:00
parent 47c0d4a5f0
commit fb41c153c1
6 changed files with 126 additions and 52 deletions

View file

@ -9,25 +9,28 @@ namespace maze {
Matrix& $walls;
std::vector<Room>& $rooms;
std::vector<Point>& $dead_ends;
std::unordered_map<Point, bool> $ends_map;
Builder(Map& map) :
$walls(map.$walls), $rooms(map.$rooms), $dead_ends(map.$dead_ends)
{
init();
clear();
}
void init();
void clear();
void hunt_and_kill(Point on={1,1});
void place_rooms();
void ensure_doors();
void enclose();
void randomize_rooms();
void randomize_rooms(size_t room_size);
void inner_donut(float outer_rad, float inner_rad);
void inner_box(size_t outer_size, size_t inner_size);
void divide(Point start, Point end);
void remove_dead_ends();
void dump(const std::string& msg);
void perimeter(size_t x, size_t y, size_t width, size_t height, std::function<void(size_t x, size_t y)> cb);
void open_box(size_t outer_size, size_t inner_size);
void open_box(size_t outer_size);
void add_dead_end(Point at);
bool room_should_exist(Room& room);
};
}