aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHampus <hampus@hampusmat.com>2022-01-05 21:35:35 +0100
committerHampus <hampus@hampusmat.com>2022-01-05 21:35:35 +0100
commit6b1f6cf3b7685eed5fb9e24b18c479d842c4043c (patch)
treee5daeb12fd4b20eb2aebb996590a5570b951c232 /src
parente3690eb85a9456cc1f3ccda751ae7d9fdf2d3b03 (diff)
feat: implement random start position
Diffstat (limited to 'src')
-rw-r--r--src/mazerator.c42
1 files changed, 30 insertions, 12 deletions
diff --git a/src/mazerator.c b/src/mazerator.c
index 95c6fb6..8224fb9 100644
--- a/src/mazerator.c
+++ b/src/mazerator.c
@@ -51,8 +51,10 @@ int main(int argc, char *argv[])
{
unsigned int maze_width = 40U;
unsigned int maze_height = 20U;
- unsigned int start_x = 1U;
- unsigned int start_y = 1U;
+
+ unsigned int *start_x = NULL;
+ unsigned int *start_y = NULL;
+
unsigned int *seed = NULL;
char *wall = "█";
@@ -79,14 +81,16 @@ int main(int argc, char *argv[])
break;
case 'x':
- start_x = str_to_uint(optarg, &err);
+ start_x = malloc_s(sizeof(unsigned int *));
+ *start_x = str_to_uint(optarg, &err);
if (err != NULL)
optarg_error(arg, err);
break;
case 'y':
- start_y = str_to_uint(optarg, &err);
+ start_y = malloc_s(sizeof(unsigned int *));
+ *start_y = str_to_uint(optarg, &err);
if (err != NULL)
optarg_error(arg, err);
@@ -97,7 +101,6 @@ int main(int argc, char *argv[])
break;
case 's':
seed = malloc_s(sizeof(unsigned int *));
-
*seed = str_to_uint(optarg, &err);
if (err != NULL)
@@ -110,9 +113,9 @@ int main(int argc, char *argv[])
" -w, --width WIDTH The width of the maze (Default: 40)\n"
" -h, --heigth HEIGHT The heigth of the maze (Default: 20)\n"
" -x, --start-x X The x coordinate for the start position "
- "(Default: 1)\n"
+ "(Default: random)\n"
" -y, --start-y Y The y coordinate for the start position "
- "(Default: 1)\n"
+ "(Default: random)\n"
" -W, --wall WALL Single character used as maze walls "
"(Default: '█')\n"
" -s, --seed SEED The randomization seed used for maze "
@@ -122,12 +125,10 @@ int main(int argc, char *argv[])
exit(0);
case '?':
printf("\nTry '%s --help' for more information\n", argv[0]);
- exit(1);
+ exit(EXIT_FAILURE);
}
}
- validate_start_coords(start_x, start_y, maze_width, maze_height);
-
if (seed == NULL)
{
seed = malloc_s(sizeof(unsigned int *));
@@ -138,13 +139,30 @@ int main(int argc, char *argv[])
free(seed);
- Position start_pos = position_create(start_x, start_y);
+ if (start_x == NULL)
+ {
+ start_x = malloc_s(sizeof(unsigned int *));
+ *start_x = rand() % maze_width;
+ }
+
+ if (start_y == NULL)
+ {
+ start_y = malloc_s(sizeof(unsigned int *));
+ *start_y = rand() % maze_height;
+ }
+
+ validate_start_coords(*start_x, *start_y, maze_width, maze_height);
+
+ Position start_pos = position_create(*start_x * 2U + 1U, *start_y * 2U + 1U);
- Grid grid = grid_create(maze_width * 2 + 1, maze_width * 2 + 1, wall);
+ Grid grid = grid_create(maze_width * 2U + 1U, maze_height * 2U + 1U, wall);
grid_to_maze(grid, start_pos);
grid_print(grid);
grid_destroy(grid);
+
+ free(start_x);
+ free(start_y);
}