#ifndef MAP_H_ #define MAP_H_ #include #include "structs.h" enum MapTile_e { EMPTY = 0, WALL, }; typedef enum MapTile_e MapTile; enum Colors_e { EMPTY_COLOR = 1, GOAL_COLOR = 2, WALL_COLOR = 3, START_COLOR = 4, }; /* A map is a 2D array of MapTiles. * Use as map[row][column] */ typedef MapTile** Map; /* Returns an empty map of given size */ Map empty_map(size_t width, size_t height); /* Stores all the existing neighbours of pos in neighbour_array and returns their amount */ unsigned int neighbours(Position neighbour_array[], Position pos, size_t width, size_t height, \ char visited[height][width]); /* https://en.wikipedia.org/wiki/Maze_generation_algorithm#Randomized_depth-first_search * WARNING: width and height are not the width and height of the returned map! * TODO: formula for actual size */ Map rbt_maze_map(size_t width, size_t height, unsigned int seed); /* Reads the map from a file, saves size in `width` and `height` * * FILE FORMAT IS AS FOLLOWS: * {WIDTH}x{HEIGHT} * {EMPTY_CHAR}{WALL_CHAR}{START_CHAR}{END_CHAR} * {MAP, one line at a time} * * EXAMPLE: * 10x4 * .#@x * .......x.. * ....###... * ....#.#... * ..@....... */ Map file_plaintext_map(char *filename, size_t *width, size_t *height, Position *start_pos, Position *end_pos); /* Draw the map. Bet you didn't expect that. */ void draw_map(Map map, size_t width, size_t height, int offset_x, int offset_y, Position start, Position goal); #endif /*MAP_H_ */