diff options
author | HampusM <hampus@hampusmat.com> | 2022-01-09 21:47:23 +0100 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2022-01-09 21:47:23 +0100 |
commit | 8ceb79db1d0687bba005cef4a77bb889bf7ec3c3 (patch) | |
tree | b7c13359f652506d60c8556ea386ae8d50bfc5bc /src/maze.c | |
parent | 097aa95c1f0cb159e7d9d0a3edf9284c421ee298 (diff) |
refactor: rewrite to c++
Diffstat (limited to 'src/maze.c')
-rw-r--r-- | src/maze.c | 124 |
1 files changed, 0 insertions, 124 deletions
diff --git a/src/maze.c b/src/maze.c deleted file mode 100644 index 76775b2..0000000 --- a/src/maze.c +++ /dev/null @@ -1,124 +0,0 @@ -#include "maze.h" -#include "grid.h" -#include "position.h" -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -int is_pos_empty(Grid grid, Position pos) -{ - return strcmp(grid_get(grid, pos), " ") != 0; -} - -void add_neighbour(Position neighbours[3], unsigned int *neighbour_cnt, - Position neighbour_pos) -{ - neighbours[*neighbour_cnt] = neighbour_pos; - (*neighbour_cnt)++; -} - -void get_neighbours(Grid grid, Position pos, Position neighbours[3], - unsigned int *neighbour_cnt) -{ - if (pos.y != 1U) - { - Position pos_down = position_create(pos.x, pos.y - 2U); - - if (is_pos_empty(grid, pos_down)) - add_neighbour(neighbours, neighbour_cnt, pos_down); - } - - if (pos.y != grid.dimens.height - 2U) - { - Position pos_up = position_create(pos.x, pos.y + 2U); - - if (is_pos_empty(grid, pos_up)) - add_neighbour(neighbours, neighbour_cnt, pos_up); - } - - if (pos.x != 1U) - { - Position pos_left = position_create(pos.x - 2U, pos.y); - - if (is_pos_empty(grid, pos_left)) - add_neighbour(neighbours, neighbour_cnt, pos_left); - } - - if (pos.x != grid.dimens.width - 2U) - { - Position pos_right = position_create(pos.x + 2U, pos.y); - - if (is_pos_empty(grid, pos_right)) - add_neighbour(neighbours, neighbour_cnt, pos_right); - } -} - -unsigned int get_maze_size(Grid grid) -{ - return ((grid.dimens.width - 1U) / 2U) * ((grid.dimens.height - 1U) / 2U); -} - -int is_whole_maze_visited(Grid grid, unsigned int visited_pos_cnt) -{ - return visited_pos_cnt == get_maze_size(grid) - 1U; -} - -void grid_to_maze(Grid grid, Position start_pos) -{ - PositionStack *path = pos_stack_create(get_maze_size(grid)); - - pos_stack_push(path, start_pos); - - unsigned int visited_pos_cnt = 0U; - while (1) - { - Position pos = pos_stack_peek(path); - - grid_set(grid, pos, " "); - - Position neighbours[3]; - unsigned int neighbour_cnt = 0U; - - get_neighbours(grid, pos, neighbours, &neighbour_cnt); - - if (neighbour_cnt == 0U) - { - if (is_whole_maze_visited(grid, visited_pos_cnt)) - break; - - // Go back a step - pos_stack_pop(path); - continue; - } - - visited_pos_cnt++; - - Position next_pos = neighbours[rand() % neighbour_cnt]; - - Position between_pos = position_create(pos.x, pos.y); - - if (next_pos.y != pos.y) - { - if (next_pos.y > pos.y) - between_pos.y += 1U; - else - between_pos.y -= 1U; - } - - if (next_pos.x != pos.x) - { - if (next_pos.x > pos.x) - between_pos.x += 1U; - else - between_pos.x -= 1U; - } - - grid_set(grid, between_pos, " "); - - pos_stack_push(path, next_pos); - - // grid_print(grid); - } - - pos_stack_destroy(path); -} |