Add 'visited' flag to each cell
This commit is contained in:
parent
ce8195f3e8
commit
cc43e870fe
17
main.c
17
main.c
@ -33,6 +33,11 @@ typedef struct {
|
||||
typedef bool (*coord_pred_t)(vec2_t c, vec2_t im);
|
||||
typedef bool (*visit_fn_t)(vec2_t c, vec2_t im);
|
||||
|
||||
typedef struct {
|
||||
bool is_path : 1;
|
||||
bool visited : 1;
|
||||
} cell_t;
|
||||
|
||||
static const struct timespec pause = { .tv_nsec = 5000000 };
|
||||
|
||||
static const vec2_t steps[] = {
|
||||
@ -45,7 +50,7 @@ static const vec2_t steps[] = {
|
||||
static Display *dpy;
|
||||
static Window window;
|
||||
static GC ctx;
|
||||
static bool maze[GRID_SIZE][GRID_SIZE];
|
||||
static cell_t maze[GRID_SIZE][GRID_SIZE];
|
||||
|
||||
static void draw_walls(void)
|
||||
{
|
||||
@ -75,7 +80,7 @@ static void draw_maze(void)
|
||||
|
||||
for (int x = 0; x < GRID_SIZE; ++x) {
|
||||
for (int y = 0; y < GRID_SIZE; ++y) {
|
||||
if (maze[x][y])
|
||||
if (maze[x][y].is_path)
|
||||
continue;
|
||||
const int left = margin_px + PX(x);
|
||||
const int top = margin_px + PX(y);
|
||||
@ -122,13 +127,13 @@ random_walk(coord_pred_t should_visit, visit_fn_t visit_fn, vec2_t start)
|
||||
static bool is_wall(vec2_t c, vec2_t im)
|
||||
{
|
||||
(void)im;
|
||||
return !maze[c.x][c.y];
|
||||
return !maze[c.x][c.y].is_path;
|
||||
}
|
||||
|
||||
static bool generation_visit(vec2_t c, vec2_t im)
|
||||
{
|
||||
maze[c.x][c.y] = true;
|
||||
maze[im.x][im.y] = true;
|
||||
maze[c.x][c.y].is_path = true;
|
||||
maze[im.x][im.y].is_path = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -166,7 +171,7 @@ int main(void)
|
||||
// Generate
|
||||
memset(&maze, 0, sizeof(maze));
|
||||
const vec2_t gen_start = { GOAL, GOAL };
|
||||
maze[GOAL][GOAL] = true;
|
||||
maze[GOAL][GOAL].is_path = true;
|
||||
random_walk(is_wall, generation_visit, gen_start);
|
||||
|
||||
// Wait for window exit
|
||||
|
Loading…
x
Reference in New Issue
Block a user