Still won't work

Dependencies:   mbed wave_player 4DGL-uLCD-SE MMA8452

Committer:
jtrux
Date:
Thu Apr 11 23:48:14 2019 +0000
Revision:
3:44a69b76507d
Parent:
0:35660d7952f7
Child:
4:237c791cc5c0
updating mapcpp file;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rconnorlawson 0:35660d7952f7 1 #include "map.h"
rconnorlawson 0:35660d7952f7 2
rconnorlawson 0:35660d7952f7 3 #include "globals.h"
rconnorlawson 0:35660d7952f7 4 #include "graphics.h"
rconnorlawson 0:35660d7952f7 5
rconnorlawson 0:35660d7952f7 6 /**
rconnorlawson 0:35660d7952f7 7 * The Map structure. This holds a HashTable for all the MapItems, along with
rconnorlawson 0:35660d7952f7 8 * values for the width and height of the Map.
rconnorlawson 0:35660d7952f7 9 */
rconnorlawson 0:35660d7952f7 10 struct Map {
rconnorlawson 0:35660d7952f7 11 HashTable* items;
rconnorlawson 0:35660d7952f7 12 int w, h;
rconnorlawson 0:35660d7952f7 13 };
rconnorlawson 0:35660d7952f7 14
rconnorlawson 0:35660d7952f7 15 /**
rconnorlawson 0:35660d7952f7 16 * Storage area for the maps.
rconnorlawson 0:35660d7952f7 17 * This is a global variable, but can only be access from this file because it
rconnorlawson 0:35660d7952f7 18 * is static.
rconnorlawson 0:35660d7952f7 19 */
rconnorlawson 0:35660d7952f7 20 static Map map;
rconnorlawson 0:35660d7952f7 21 static int active_map;
rconnorlawson 0:35660d7952f7 22
rconnorlawson 0:35660d7952f7 23 /**
rconnorlawson 0:35660d7952f7 24 * The first step in HashTable access for the map is turning the two-dimensional
rconnorlawson 0:35660d7952f7 25 * key information (x, y) into a one-dimensional unsigned integer.
rconnorlawson 0:35660d7952f7 26 * This function should uniquely map (x,y) onto the space of unsigned integers.
rconnorlawson 0:35660d7952f7 27 */
rconnorlawson 0:35660d7952f7 28 static unsigned XY_KEY(int X, int Y) {
rconnorlawson 0:35660d7952f7 29 // TODO: Fix me!
jtrux 3:44a69b76507d 30 return X + (Y*map_height());
rconnorlawson 0:35660d7952f7 31 }
rconnorlawson 0:35660d7952f7 32
rconnorlawson 0:35660d7952f7 33 /**
rconnorlawson 0:35660d7952f7 34 * This is the hash function actually passed into createHashTable. It takes an
rconnorlawson 0:35660d7952f7 35 * unsigned key (the output of XY_KEY) and turns it into a hash value (some
rconnorlawson 0:35660d7952f7 36 * small non-negative integer).
rconnorlawson 0:35660d7952f7 37 */
rconnorlawson 0:35660d7952f7 38 unsigned map_hash(unsigned key)
rconnorlawson 0:35660d7952f7 39 {
rconnorlawson 0:35660d7952f7 40 // TODO: Fix me!
jtrux 3:44a69b76507d 41 return key%50;
rconnorlawson 0:35660d7952f7 42 }
rconnorlawson 0:35660d7952f7 43
rconnorlawson 0:35660d7952f7 44 void maps_init()
rconnorlawson 0:35660d7952f7 45 {
rconnorlawson 0:35660d7952f7 46 // TODO: Implement!
rconnorlawson 0:35660d7952f7 47 // Initialize hash table
rconnorlawson 0:35660d7952f7 48 // Set width & height
jtrux 3:44a69b76507d 49 HashTable* ht = createHashTable(&map_hash, 50);
jtrux 3:44a69b76507d 50 map.items = ht;
jtrux 3:44a69b76507d 51 map.w = 50;
jtrux 3:44a69b76507d 52 map.h = 50;
rconnorlawson 0:35660d7952f7 53 }
rconnorlawson 0:35660d7952f7 54
rconnorlawson 0:35660d7952f7 55 Map* get_active_map()
rconnorlawson 0:35660d7952f7 56 {
rconnorlawson 0:35660d7952f7 57 // There's only one map
rconnorlawson 0:35660d7952f7 58 return ↦
rconnorlawson 0:35660d7952f7 59 }
rconnorlawson 0:35660d7952f7 60
rconnorlawson 0:35660d7952f7 61 Map* set_active_map(int m)
rconnorlawson 0:35660d7952f7 62 {
rconnorlawson 0:35660d7952f7 63 active_map = m;
rconnorlawson 0:35660d7952f7 64 return ↦
rconnorlawson 0:35660d7952f7 65 }
rconnorlawson 0:35660d7952f7 66
rconnorlawson 0:35660d7952f7 67 void print_map()
rconnorlawson 0:35660d7952f7 68 {
rconnorlawson 0:35660d7952f7 69 // As you add more types, you'll need to add more items to this array.
rconnorlawson 0:35660d7952f7 70 char lookup[] = {'W', 'P'};
rconnorlawson 0:35660d7952f7 71 for(int y = 0; y < map_height(); y++)
rconnorlawson 0:35660d7952f7 72 {
rconnorlawson 0:35660d7952f7 73 for (int x = 0; x < map_width(); x++)
rconnorlawson 0:35660d7952f7 74 {
rconnorlawson 0:35660d7952f7 75 MapItem* item = get_here(x,y);
rconnorlawson 0:35660d7952f7 76 if (item) pc.printf("%c", lookup[item->type]);
rconnorlawson 0:35660d7952f7 77 else pc.printf(" ");
rconnorlawson 0:35660d7952f7 78 }
rconnorlawson 0:35660d7952f7 79 pc.printf("\r\n");
rconnorlawson 0:35660d7952f7 80 }
rconnorlawson 0:35660d7952f7 81 }
rconnorlawson 0:35660d7952f7 82
rconnorlawson 0:35660d7952f7 83 int map_width()
rconnorlawson 0:35660d7952f7 84 {
jtrux 3:44a69b76507d 85 return 50;
rconnorlawson 0:35660d7952f7 86 }
rconnorlawson 0:35660d7952f7 87
rconnorlawson 0:35660d7952f7 88 int map_height()
rconnorlawson 0:35660d7952f7 89 {
jtrux 3:44a69b76507d 90 return 50;
rconnorlawson 0:35660d7952f7 91 }
rconnorlawson 0:35660d7952f7 92
rconnorlawson 0:35660d7952f7 93 int map_area()
rconnorlawson 0:35660d7952f7 94 {
jtrux 3:44a69b76507d 95 return 2500;
rconnorlawson 0:35660d7952f7 96 }
rconnorlawson 0:35660d7952f7 97
rconnorlawson 0:35660d7952f7 98 MapItem* get_north(int x, int y)
rconnorlawson 0:35660d7952f7 99 {
jtrux 3:44a69b76507d 100 unsigned ynew = y-1;
jtrux 3:44a69b76507d 101 return (MapItem*)getItem(map.items,XY_KEY(x,ynew));
rconnorlawson 0:35660d7952f7 102 }
rconnorlawson 0:35660d7952f7 103
rconnorlawson 0:35660d7952f7 104 MapItem* get_south(int x, int y)
rconnorlawson 0:35660d7952f7 105 {
jtrux 3:44a69b76507d 106 unsigned ynew = y+1;
jtrux 3:44a69b76507d 107 return (MapItem*)getItem(map.items,XY_KEY(x,ynew));
rconnorlawson 0:35660d7952f7 108 }
rconnorlawson 0:35660d7952f7 109
rconnorlawson 0:35660d7952f7 110 MapItem* get_east(int x, int y)
rconnorlawson 0:35660d7952f7 111 {
jtrux 3:44a69b76507d 112 unsigned xnew = x+1;
jtrux 3:44a69b76507d 113 return (MapItem*)getItem(map.items,XY_KEY(xnew,y));
rconnorlawson 0:35660d7952f7 114 }
rconnorlawson 0:35660d7952f7 115
rconnorlawson 0:35660d7952f7 116 MapItem* get_west(int x, int y)
rconnorlawson 0:35660d7952f7 117 {
jtrux 3:44a69b76507d 118 unsigned xnew = x-1;
jtrux 3:44a69b76507d 119 return (MapItem*)getItem(map.items,XY_KEY(xnew,y));
rconnorlawson 0:35660d7952f7 120 }
rconnorlawson 0:35660d7952f7 121
rconnorlawson 0:35660d7952f7 122 MapItem* get_here(int x, int y)
rconnorlawson 0:35660d7952f7 123 {
jtrux 3:44a69b76507d 124 return (MapItem*)getItem(map.items,XY_KEY(x,y));
rconnorlawson 0:35660d7952f7 125 }
rconnorlawson 0:35660d7952f7 126
rconnorlawson 0:35660d7952f7 127
rconnorlawson 0:35660d7952f7 128 void map_erase(int x, int y)
rconnorlawson 0:35660d7952f7 129 {
rconnorlawson 0:35660d7952f7 130 }
rconnorlawson 0:35660d7952f7 131
rconnorlawson 0:35660d7952f7 132 void add_wall(int x, int y, int dir, int len)
rconnorlawson 0:35660d7952f7 133 {
rconnorlawson 0:35660d7952f7 134 for(int i = 0; i < len; i++)
rconnorlawson 0:35660d7952f7 135 {
rconnorlawson 0:35660d7952f7 136 MapItem* w1 = (MapItem*) malloc(sizeof(MapItem));
rconnorlawson 0:35660d7952f7 137 w1->type = WALL;
rconnorlawson 0:35660d7952f7 138 w1->draw = draw_wall;
rconnorlawson 0:35660d7952f7 139 w1->walkable = false;
rconnorlawson 0:35660d7952f7 140 w1->data = NULL;
rconnorlawson 0:35660d7952f7 141 unsigned key = (dir == HORIZONTAL) ? XY_KEY(x+i, y) : XY_KEY(x, y+i);
rconnorlawson 0:35660d7952f7 142 void* val = insertItem(get_active_map()->items, key, w1);
rconnorlawson 0:35660d7952f7 143 if (val) free(val); // If something is already there, free it
rconnorlawson 0:35660d7952f7 144 }
rconnorlawson 0:35660d7952f7 145 }
rconnorlawson 0:35660d7952f7 146
rconnorlawson 0:35660d7952f7 147 void add_plant(int x, int y)
rconnorlawson 0:35660d7952f7 148 {
rconnorlawson 0:35660d7952f7 149 MapItem* w1 = (MapItem*) malloc(sizeof(MapItem));
rconnorlawson 0:35660d7952f7 150 w1->type = PLANT;
rconnorlawson 0:35660d7952f7 151 w1->draw = draw_plant;
rconnorlawson 0:35660d7952f7 152 w1->walkable = true;
rconnorlawson 0:35660d7952f7 153 w1->data = NULL;
rconnorlawson 0:35660d7952f7 154 void* val = insertItem(get_active_map()->items, XY_KEY(x, y), w1);
rconnorlawson 0:35660d7952f7 155 if (val) free(val); // If something is already there, free it
rconnorlawson 0:35660d7952f7 156 }