aboutsummaryrefslogtreecommitdiff
path: root/map.h
blob: a4cc971cb03a57e3dbbad47bf127286253ab3d49 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#ifndef MAP_H_
#define MAP_H_

#include <stddef.h>
#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_ */