![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Snake
Dependencies: mbed wave_player 4DGL-uLCD-SE MMA8452
Diff: map.cpp
- Revision:
- 3:2fe73b263a9a
- Parent:
- 2:4947d6a82971
--- a/map.cpp Fri Oct 23 16:30:18 2020 -0400 +++ b/map.cpp Mon Nov 23 05:54:49 2020 +0000 @@ -17,6 +17,7 @@ HashTable* items; int w, h; }; +#define NUM_BUCKETS 223 #define NUM_MAPS 1 static Map maps[NUM_MAPS]; @@ -34,6 +35,9 @@ */ static unsigned XY_KEY(int X, int Y) { // TODO: Fix me! + // int and unsigned are 4 bytes = 32 bits + unsigned int key = ((unsigned)X << 16) + (unsigned)Y; + return key; } /** @@ -44,6 +48,7 @@ unsigned map_hash(unsigned key) { // TODO: Fix me! + return key % NUM_BUCKETS; } void maps_init() @@ -51,6 +56,12 @@ // TODO: Implement! // Initialize hash table // Set width & height + for (int i = 0; i < NUM_MAPS; i++) + { + maps[i].w = map_width(); + maps[i].h = map_height(); + maps[i].items = createHashTable(map_hash, NUM_BUCKETS); + } } Map* get_active_map() @@ -64,6 +75,11 @@ return &maps[active_map]; } +Map* get_map(int m) +{ + return &maps[m]; +} + void print_map() { char lookup[] = {'W', 'D', 'P', 'A', 'K', 'C', 'N',' ','S'}; @@ -82,49 +98,62 @@ int map_width() { - + return 100; } int map_height() { - + return 50; } int map_area() { - + return map_width() * map_height(); } MapItem* get_current(int x, int y) { - + Map* map = get_active_map(); + MapItem* item = (MapItem*)getItem(map->items, XY_KEY(x, y)); + return item; } MapItem* get_north(int x, int y) { - + Map* map = get_active_map(); + MapItem* item = (MapItem*)getItem(map->items, XY_KEY(x, y + 1)); + return item; } MapItem* get_south(int x, int y) { - + Map* map = get_active_map(); + MapItem* item = (MapItem*)getItem(map->items, XY_KEY(x, y - 1)); + return item; } MapItem* get_east(int x, int y) { - + Map* map = get_active_map(); + MapItem* item = (MapItem*)getItem(map->items, XY_KEY(x + 1, y)); + return item; } MapItem* get_west(int x, int y) { - + Map* map = get_active_map(); + MapItem* item = (MapItem*)getItem(map->items, XY_KEY(x - 1, y)); + return item; } MapItem* get_here(int x, int y) { - + Map* map = get_active_map(); + MapItem* item = (MapItem*)getItem(map->items, XY_KEY(x, y)); + return item; } void map_erase(int x, int y) { - + Map* map = get_active_map(); + removeItem(map->items, XY_KEY(x, y)); } void add_wall(int x, int y, int dir, int len)