#include "map.h" #include 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_RED; map.tiles[map.height - 1][x] = P_RED; } for (size_t y = 0; y < map.height; y++) { /* Vertical */ map.tiles[y][0] = P_RED; 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; }