Snake

Dependencies:   mbed wave_player 4DGL-uLCD-SE MMA8452

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)