diff options
Diffstat (limited to 'map.c')
| -rw-r--r-- | map.c | 62 |
1 files changed, 62 insertions, 0 deletions
@@ -0,0 +1,62 @@ +#include "map.h" + +#include <stdlib.h> + +Map map_new(size_t width, size_t height) { + Map map; + map.width = 0; + map.height = 0; + + map.tiles = malloc(sizeof(Pixel *) * height); + if (map.tiles == NULL) return map; + for (size_t row = 0; row < height; row++) { + map.tiles[row] = malloc(sizeof(Pixel *) * width); + if (map.tiles[row] == NULL) { + /* FIXME: free prev rows */ + map.tiles = NULL; + return map; + } + for (size_t col = 0; col < width; col++) { + map.tiles[row][col] = P_EMPTY; + } + } + + map.width = width; + map.height = height; + + return map; +} + +void map_free(Map *map) { + if (map->tiles == NULL) goto null; + + for (size_t row = 0; row < map->height; row++) + free(map->tiles[row]); + +null: + map->height = 0; + map->width = 0; + return; +} + +Map map_default(void) { + /* haha map map map */ + Map map = map_new(20, 30); + + /* Boundaries */ + for (size_t x = 0; x < map.width; x++) { /* Horizontal */ + map.tiles[0][x] = P_MAGENTA; + map.tiles[map.height - 1][x] = P_RED; + } + for (size_t y = 0; y < map.height; y++) { /* Vertical */ + map.tiles[y][0] = P_MAGENTA; + map.tiles[y][map.width - 1] = P_RED; + } + + /* Some random pillars */ + map.tiles[5][8] = P_GREEN; + map.tiles[20][4] = P_GREEN; + map.tiles[9][11] = P_GREEN; + + return map; +} |
