Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed MotionSensor
main.cpp@47:6e31b195ce3c, 2019-05-09 (annotated)
- Committer:
- el17sm
- Date:
- Thu May 09 01:57:49 2019 +0000
- Revision:
- 47:6e31b195ce3c
- Parent:
- 46:f09711580d4a
- Child:
- 48:f7d9ae3e554d
Full Game Complete;; Added scoring system;; ; To do: ; Commenting and Doxygen;; Shortening of a few functions;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| el17sm | 0:8e92b66a0755 | 1 | /* |
| el17sm | 0:8e92b66a0755 | 2 | ELEC2645 Embedded Systems Project |
| el17sm | 0:8e92b66a0755 | 3 | School of Electronic & Electrical Engineering |
| el17sm | 0:8e92b66a0755 | 4 | University of Leeds |
| el17sm | 0:8e92b66a0755 | 5 | Name: Steven Mahasin |
| el17sm | 0:8e92b66a0755 | 6 | Username: el17sm |
| el17sm | 0:8e92b66a0755 | 7 | Student ID Number: 201192939 |
| el17sm | 0:8e92b66a0755 | 8 | Date: 11/04/2019 |
| el17sm | 1:1fa7ecca8dfb | 9 | */ |
| el17sm | 46:f09711580d4a | 10 | #include "main.h" |
| el17sm | 10:1a3499f6b583 | 11 | |
| el17sm | 1:1fa7ecca8dfb | 12 | int main() |
| el17sm | 1:1fa7ecca8dfb | 13 | { |
| el17sm | 29:6b8411bb040a | 14 | // Initialize |
| el17sm | 46:f09711580d4a | 15 | init(); |
| el17sm | 28:98848e6a77a2 | 16 | |
| el17sm | 29:6b8411bb040a | 17 | while(1) { // Gameloop |
| el17sm | 46:f09711580d4a | 18 | boss_room_exist = false; |
| el17sm | 47:6e31b195ce3c | 19 | number_of_enemies_killed = 0; |
| el17sm | 47:6e31b195ce3c | 20 | total_time = 0; |
| el17sm | 47:6e31b195ce3c | 21 | |
| el17sm | 32:fe6359ef9916 | 22 | title.main(lcd, gamepad, global_contrast); |
| el17sm | 32:fe6359ef9916 | 23 | srand(title.get_seed()); |
| el17sm | 31:ab24d028ddfd | 24 | player = new Player(39, 27); |
| el17sm | 41:0697508a28ba | 25 | room_engine = new RoomEngine(global_contrast); |
| el17sm | 31:ab24d028ddfd | 26 | |
| el17sm | 31:ab24d028ddfd | 27 | game_loop(); |
| el17sm | 31:ab24d028ddfd | 28 | game_over(); |
| el17sm | 46:f09711580d4a | 29 | for (int i = 0; i < MAX_ROOMS_MAP_X; i++) { |
| el17sm | 46:f09711580d4a | 30 | for (int j = 0; j < MAX_ROOMS_MAP_Y; j++) { |
| el17sm | 46:f09711580d4a | 31 | if (valid_rooms[j][j]){ |
| el17sm | 40:cbcbf6fc1421 | 32 | delete rooms[j][i]; |
| el17sm | 46:f09711580d4a | 33 | valid_rooms[i][j] = false; |
| el17sm | 40:cbcbf6fc1421 | 34 | } |
| el17sm | 40:cbcbf6fc1421 | 35 | } |
| el17sm | 46:f09711580d4a | 36 | } |
| el17sm | 31:ab24d028ddfd | 37 | delete room_engine; |
| el17sm | 31:ab24d028ddfd | 38 | delete player; |
| el17sm | 31:ab24d028ddfd | 39 | } |
| el17sm | 31:ab24d028ddfd | 40 | } |
| el17sm | 31:ab24d028ddfd | 41 | |
| el17sm | 46:f09711580d4a | 42 | void init() |
| el17sm | 46:f09711580d4a | 43 | { |
| el17sm | 46:f09711580d4a | 44 | lcd.init(); |
| el17sm | 46:f09711580d4a | 45 | lcd.setContrast(global_contrast); |
| el17sm | 46:f09711580d4a | 46 | gamepad.init(); |
| el17sm | 46:f09711580d4a | 47 | for (int j = 0; j < MAX_ROOMS_MAP_Y; j++){ |
| el17sm | 46:f09711580d4a | 48 | for (int i = 0; i < MAX_ROOMS_MAP_X; i++){ |
| el17sm | 46:f09711580d4a | 49 | valid_rooms[j][i] = false; |
| el17sm | 46:f09711580d4a | 50 | } |
| el17sm | 46:f09711580d4a | 51 | } |
| el17sm | 46:f09711580d4a | 52 | } |
| el17sm | 46:f09711580d4a | 53 | |
| el17sm | 31:ab24d028ddfd | 54 | void game_loop() |
| el17sm | 31:ab24d028ddfd | 55 | { |
| el17sm | 31:ab24d028ddfd | 56 | while(1) { // Floor Loop |
| el17sm | 46:f09711580d4a | 57 | boss_room_number = 5 + rand() % 4; // Boss room appears after travelling 5-8 rooms |
| el17sm | 46:f09711580d4a | 58 | boss_room_counter = 0; |
| el17sm | 46:f09711580d4a | 59 | while(1) { // Room Loop |
| el17sm | 46:f09711580d4a | 60 | update_room_coords(); |
| el17sm | 46:f09711580d4a | 61 | if (!valid_rooms[room_y][room_x]){ |
| el17sm | 46:f09711580d4a | 62 | generate_room(); |
| el17sm | 30:ec915d24d3e9 | 63 | } |
| el17sm | 46:f09711580d4a | 64 | room_engine->load(player, rooms[room_y][room_x]); |
| el17sm | 31:ab24d028ddfd | 65 | room_engine->entrance_scene(lcd, gamepad); |
| el17sm | 31:ab24d028ddfd | 66 | while(room_engine->check_player_room_position() == INSIDE) { // Room actions |
| el17sm | 31:ab24d028ddfd | 67 | room_engine->read_input(gamepad); |
| el17sm | 47:6e31b195ce3c | 68 | room_engine->update(number_of_enemies_killed); |
| el17sm | 31:ab24d028ddfd | 69 | room_engine->render(lcd, gamepad); |
| el17sm | 46:f09711580d4a | 70 | minimap_detection(); |
| el17sm | 47:6e31b195ce3c | 71 | total_time++; |
| el17sm | 31:ab24d028ddfd | 72 | if (player->get_hp() <= 0) { |
| el17sm | 31:ab24d028ddfd | 73 | goto gameover; |
| el17sm | 29:6b8411bb040a | 74 | } |
| el17sm | 47:6e31b195ce3c | 75 | if ((rooms[room_y][room_x]->get_room_type() == 10) && !(rooms[room_y][room_x]->enemies_exist())){ |
| el17sm | 47:6e31b195ce3c | 76 | goto winner; |
| el17sm | 47:6e31b195ce3c | 77 | } |
| el17sm | 29:6b8411bb040a | 78 | } |
| el17sm | 31:ab24d028ddfd | 79 | room_engine->exit_scene(lcd, gamepad); |
| el17sm | 46:f09711580d4a | 80 | rooms[room_y][room_x]->unload(); |
| el17sm | 31:ab24d028ddfd | 81 | player->delete_bullets(); |
| el17sm | 31:ab24d028ddfd | 82 | room_engine->update_current_room(); |
| el17sm | 31:ab24d028ddfd | 83 | } |
| el17sm | 31:ab24d028ddfd | 84 | } |
| el17sm | 31:ab24d028ddfd | 85 | gameover : { |
| el17sm | 31:ab24d028ddfd | 86 | game_over(); |
| el17sm | 47:6e31b195ce3c | 87 | goto displaystats; |
| el17sm | 47:6e31b195ce3c | 88 | } |
| el17sm | 47:6e31b195ce3c | 89 | winner : { |
| el17sm | 47:6e31b195ce3c | 90 | win(); |
| el17sm | 47:6e31b195ce3c | 91 | goto displaystats; |
| el17sm | 47:6e31b195ce3c | 92 | } |
| el17sm | 47:6e31b195ce3c | 93 | displaystats : { |
| el17sm | 47:6e31b195ce3c | 94 | display_stats(); |
| el17sm | 31:ab24d028ddfd | 95 | } |
| el17sm | 31:ab24d028ddfd | 96 | } |
| el17sm | 29:6b8411bb040a | 97 | |
| el17sm | 46:f09711580d4a | 98 | void generate_room() |
| el17sm | 46:f09711580d4a | 99 | { |
| el17sm | 46:f09711580d4a | 100 | valid_rooms[room_y][room_x] = true; |
| el17sm | 46:f09711580d4a | 101 | if (boss_room_counter == 0) { |
| el17sm | 46:f09711580d4a | 102 | rooms[room_y][room_x] = new Room(0, 0); |
| el17sm | 46:f09711580d4a | 103 | rooms[room_y][room_x]->set_doorway(0, true); |
| el17sm | 46:f09711580d4a | 104 | } else { |
| el17sm | 46:f09711580d4a | 105 | rooms[room_y][room_x] = new Room(rand() % 4, 0); |
| el17sm | 46:f09711580d4a | 106 | if (boss_room_counter < boss_room_number) {no_of_doorways = 2 + (rand() % 100 < 10) + (rand() % 100 < 10);} // 20% chance of adding doorways |
| el17sm | 46:f09711580d4a | 107 | else {no_of_doorways = 1;} |
| el17sm | 46:f09711580d4a | 108 | while (count_doorways() < no_of_doorways) { |
| el17sm | 46:f09711580d4a | 109 | rooms[room_y][room_x]->set_doorway(rand() % 4, true); // Setting random doorways until number of desired doorways |
| el17sm | 46:f09711580d4a | 110 | } |
| el17sm | 46:f09711580d4a | 111 | update_definite_doorways(); |
| el17sm | 46:f09711580d4a | 112 | for (int i = 0; i < 4; i++) { |
| el17sm | 46:f09711580d4a | 113 | if (cannot[i]){rooms[room_y][room_x]->set_doorway(i, false);} |
| el17sm | 46:f09711580d4a | 114 | if (have_to[i]){rooms[room_y][room_x]->set_doorway(i, true);} |
| el17sm | 46:f09711580d4a | 115 | } |
| el17sm | 46:f09711580d4a | 116 | if ((boss_room_counter >= boss_room_number) && (!boss_room_exist)) { |
| el17sm | 46:f09711580d4a | 117 | rooms[room_y][room_x]->set_boss_doorway(available_boss_room()); |
| el17sm | 46:f09711580d4a | 118 | boss_room_exist = true; |
| el17sm | 46:f09711580d4a | 119 | } |
| el17sm | 46:f09711580d4a | 120 | } |
| el17sm | 46:f09711580d4a | 121 | boss_room_counter++; |
| el17sm | 46:f09711580d4a | 122 | } |
| el17sm | 46:f09711580d4a | 123 | |
| el17sm | 46:f09711580d4a | 124 | void update_room_coords() |
| el17sm | 46:f09711580d4a | 125 | { |
| el17sm | 46:f09711580d4a | 126 | prev_room_x = room_x; |
| el17sm | 46:f09711580d4a | 127 | prev_room_y = room_y; |
| el17sm | 46:f09711580d4a | 128 | room_y = room_engine->get_room_y(); |
| el17sm | 46:f09711580d4a | 129 | room_x = room_engine->get_room_x(); |
| el17sm | 46:f09711580d4a | 130 | } |
| el17sm | 46:f09711580d4a | 131 | |
| el17sm | 46:f09711580d4a | 132 | int opposite(int value) |
| el17sm | 46:f09711580d4a | 133 | { |
| el17sm | 46:f09711580d4a | 134 | if (value <= 1) { |
| el17sm | 46:f09711580d4a | 135 | return value + 2; |
| el17sm | 46:f09711580d4a | 136 | } else { |
| el17sm | 46:f09711580d4a | 137 | return value - 2; |
| el17sm | 46:f09711580d4a | 138 | } |
| el17sm | 46:f09711580d4a | 139 | } |
| el17sm | 46:f09711580d4a | 140 | |
| el17sm | 46:f09711580d4a | 141 | int count_doorways() // counts number of exisisting doorways |
| el17sm | 46:f09711580d4a | 142 | { |
| el17sm | 46:f09711580d4a | 143 | int count = 0; |
| el17sm | 46:f09711580d4a | 144 | for (int i = 0; i < 4; i++){ |
| el17sm | 46:f09711580d4a | 145 | if (rooms[room_y][room_x]->get_doorway(i)) { |
| el17sm | 46:f09711580d4a | 146 | count++; |
| el17sm | 46:f09711580d4a | 147 | } |
| el17sm | 46:f09711580d4a | 148 | } |
| el17sm | 46:f09711580d4a | 149 | return count; |
| el17sm | 46:f09711580d4a | 150 | } |
| el17sm | 46:f09711580d4a | 151 | |
| el17sm | 46:f09711580d4a | 152 | void update_definite_doorways() |
| el17sm | 46:f09711580d4a | 153 | { |
| el17sm | 46:f09711580d4a | 154 | // UP |
| el17sm | 46:f09711580d4a | 155 | if (room_y == 1) { |
| el17sm | 46:f09711580d4a | 156 | cannot[0] = true; |
| el17sm | 46:f09711580d4a | 157 | have_to[0] = false; |
| el17sm | 46:f09711580d4a | 158 | } else if (valid_rooms[room_y - 1][room_x]){ |
| el17sm | 46:f09711580d4a | 159 | if (rooms[room_y - 1][room_x]->get_doorway(2)){ |
| el17sm | 46:f09711580d4a | 160 | have_to[0] = true; |
| el17sm | 46:f09711580d4a | 161 | cannot[0] = false; |
| el17sm | 46:f09711580d4a | 162 | } else { |
| el17sm | 46:f09711580d4a | 163 | have_to[0] = false; |
| el17sm | 46:f09711580d4a | 164 | cannot[0] = true; |
| el17sm | 46:f09711580d4a | 165 | } |
| el17sm | 46:f09711580d4a | 166 | } else { |
| el17sm | 46:f09711580d4a | 167 | have_to[0] = false; |
| el17sm | 46:f09711580d4a | 168 | cannot[0] = false; |
| el17sm | 46:f09711580d4a | 169 | } |
| el17sm | 46:f09711580d4a | 170 | |
| el17sm | 46:f09711580d4a | 171 | // RIGHT |
| el17sm | 46:f09711580d4a | 172 | if (room_x == 10) { |
| el17sm | 46:f09711580d4a | 173 | cannot[1] = true; |
| el17sm | 46:f09711580d4a | 174 | have_to[1] = false; |
| el17sm | 46:f09711580d4a | 175 | } else if (valid_rooms[room_y][room_x + 1]){ |
| el17sm | 46:f09711580d4a | 176 | if (rooms[room_y][room_x + 1]->get_doorway(3)){ |
| el17sm | 46:f09711580d4a | 177 | have_to[1] = true; |
| el17sm | 46:f09711580d4a | 178 | cannot[1] = false; |
| el17sm | 46:f09711580d4a | 179 | } else { |
| el17sm | 46:f09711580d4a | 180 | have_to[1] = false; |
| el17sm | 46:f09711580d4a | 181 | cannot[1] = true; |
| el17sm | 46:f09711580d4a | 182 | } |
| el17sm | 46:f09711580d4a | 183 | } else { |
| el17sm | 46:f09711580d4a | 184 | have_to[1] = false; |
| el17sm | 46:f09711580d4a | 185 | cannot[1] = false; |
| el17sm | 46:f09711580d4a | 186 | } |
| el17sm | 46:f09711580d4a | 187 | |
| el17sm | 46:f09711580d4a | 188 | // DOWN |
| el17sm | 46:f09711580d4a | 189 | if (room_y == 10) { |
| el17sm | 46:f09711580d4a | 190 | cannot[2] = true; |
| el17sm | 46:f09711580d4a | 191 | have_to[2] = false; |
| el17sm | 46:f09711580d4a | 192 | } else if (valid_rooms[room_y + 1][room_x]){ |
| el17sm | 46:f09711580d4a | 193 | if (rooms[room_y + 1][room_x]->get_doorway(0)){ |
| el17sm | 46:f09711580d4a | 194 | have_to[2] = true; |
| el17sm | 46:f09711580d4a | 195 | cannot[2] = false; |
| el17sm | 46:f09711580d4a | 196 | } else { |
| el17sm | 46:f09711580d4a | 197 | have_to[2] = false; |
| el17sm | 46:f09711580d4a | 198 | cannot[2] = true; |
| el17sm | 46:f09711580d4a | 199 | } |
| el17sm | 46:f09711580d4a | 200 | } else { |
| el17sm | 46:f09711580d4a | 201 | have_to[2] = false; |
| el17sm | 46:f09711580d4a | 202 | cannot[2] = false; |
| el17sm | 46:f09711580d4a | 203 | } |
| el17sm | 46:f09711580d4a | 204 | |
| el17sm | 46:f09711580d4a | 205 | // LEFT |
| el17sm | 46:f09711580d4a | 206 | if (room_x == 1) { |
| el17sm | 46:f09711580d4a | 207 | cannot[3] = true; |
| el17sm | 46:f09711580d4a | 208 | have_to[3] = false; |
| el17sm | 46:f09711580d4a | 209 | } else if (valid_rooms[room_y][room_x - 1]){ |
| el17sm | 46:f09711580d4a | 210 | if (rooms[room_y][room_x - 1]->get_doorway(1)){ |
| el17sm | 46:f09711580d4a | 211 | have_to[3] = true; |
| el17sm | 46:f09711580d4a | 212 | cannot[3] = false; |
| el17sm | 46:f09711580d4a | 213 | } else { |
| el17sm | 46:f09711580d4a | 214 | have_to[3] = false; |
| el17sm | 46:f09711580d4a | 215 | cannot[3] = true; |
| el17sm | 46:f09711580d4a | 216 | } |
| el17sm | 46:f09711580d4a | 217 | } else { |
| el17sm | 46:f09711580d4a | 218 | have_to[3] = false; |
| el17sm | 46:f09711580d4a | 219 | cannot[3] = false; |
| el17sm | 46:f09711580d4a | 220 | } |
| el17sm | 46:f09711580d4a | 221 | } |
| el17sm | 46:f09711580d4a | 222 | |
| el17sm | 46:f09711580d4a | 223 | int available_boss_room() |
| el17sm | 46:f09711580d4a | 224 | { |
| el17sm | 46:f09711580d4a | 225 | if (!valid_rooms[room_y - 1][room_x]){ |
| el17sm | 46:f09711580d4a | 226 | rooms[room_y][room_x]->set_doorway(0, true); |
| el17sm | 46:f09711580d4a | 227 | valid_rooms[room_y - 1][room_x] = true; |
| el17sm | 46:f09711580d4a | 228 | rooms[room_y - 1][room_x] = new Room(0, 10); |
| el17sm | 46:f09711580d4a | 229 | rooms[room_y - 1][room_x]->set_doorway(2, true); |
| el17sm | 46:f09711580d4a | 230 | return 0; |
| el17sm | 46:f09711580d4a | 231 | } else if (!valid_rooms[room_y][room_x + 1]){ |
| el17sm | 46:f09711580d4a | 232 | rooms[room_y][room_x]->set_doorway(1, true); |
| el17sm | 46:f09711580d4a | 233 | valid_rooms[room_y][room_x + 1] = true; |
| el17sm | 46:f09711580d4a | 234 | rooms[room_y][room_x + 1] = new Room(0, 10); |
| el17sm | 46:f09711580d4a | 235 | rooms[room_y][room_x + 1]->set_doorway(3, true); |
| el17sm | 46:f09711580d4a | 236 | return 1; |
| el17sm | 46:f09711580d4a | 237 | } else if (!valid_rooms[room_y + 1][room_x]){ |
| el17sm | 46:f09711580d4a | 238 | rooms[room_y][room_x]->set_doorway(2, true); |
| el17sm | 46:f09711580d4a | 239 | valid_rooms[room_y + 1][room_x] = true; |
| el17sm | 46:f09711580d4a | 240 | rooms[room_y + 1][room_x] = new Room(0, 10); |
| el17sm | 46:f09711580d4a | 241 | rooms[room_y + 1][room_x]->set_doorway(0, true); |
| el17sm | 46:f09711580d4a | 242 | return 2; |
| el17sm | 46:f09711580d4a | 243 | } else if (!valid_rooms[room_y][room_x - 1]){ |
| el17sm | 46:f09711580d4a | 244 | rooms[room_y][room_x]->set_doorway(3, true); |
| el17sm | 46:f09711580d4a | 245 | valid_rooms[room_y][room_x - 1] = true; |
| el17sm | 46:f09711580d4a | 246 | rooms[room_y][room_x - 1] = new Room(0, 10); |
| el17sm | 46:f09711580d4a | 247 | rooms[room_y][room_x - 1]->set_doorway(1, true); |
| el17sm | 46:f09711580d4a | 248 | return 3; |
| el17sm | 46:f09711580d4a | 249 | } |
| el17sm | 46:f09711580d4a | 250 | delete rooms[room_y - 1][room_x]; |
| el17sm | 46:f09711580d4a | 251 | rooms[room_y - 1][room_x] = new Room(0, 10); |
| el17sm | 46:f09711580d4a | 252 | rooms[room_y - 1][room_x]->set_doorway(2, true); |
| el17sm | 46:f09711580d4a | 253 | return 0; |
| el17sm | 46:f09711580d4a | 254 | } |
| el17sm | 46:f09711580d4a | 255 | |
| el17sm | 46:f09711580d4a | 256 | void minimap_detection() |
| el17sm | 46:f09711580d4a | 257 | { |
| el17sm | 46:f09711580d4a | 258 | while(gamepad.check_event(Gamepad::BACK_PRESSED)) { |
| el17sm | 46:f09711580d4a | 259 | lcd.clear(); |
| el17sm | 47:6e31b195ce3c | 260 | for (int j = 0; j < MAX_ROOMS_MAP_Y; j++) { |
| el17sm | 47:6e31b195ce3c | 261 | for (int i = 0; i < MAX_ROOMS_MAP_X; i++) { |
| el17sm | 47:6e31b195ce3c | 262 | if (valid_rooms[j][i]) { |
| el17sm | 47:6e31b195ce3c | 263 | lcd.drawSprite(33 + (i-room_x)*20, 17 + (j-room_y)*15, 15, 20, (char *)minimap_sprite[0]); |
| el17sm | 47:6e31b195ce3c | 264 | if (rooms[j][i]->get_room_type() == 10) { |
| el17sm | 47:6e31b195ce3c | 265 | lcd.drawSprite(33 + (i-room_x)*20, 17 + (j-room_y)*15, 15, 20, (char *)minimap_sprite[2]); |
| el17sm | 47:6e31b195ce3c | 266 | } else if (rooms[j][i]->enemies_exist()) { |
| el17sm | 47:6e31b195ce3c | 267 | lcd.drawSprite(33 + (i-room_x)*20, 17 + (j-room_y)*15, 15, 20, (char *)minimap_sprite[1]); |
| el17sm | 47:6e31b195ce3c | 268 | } |
| el17sm | 47:6e31b195ce3c | 269 | if (rooms[j][i]->get_doorway(0)) { |
| el17sm | 47:6e31b195ce3c | 270 | lcd.drawLine(42 + (i-room_x)*20, 17 + (j-room_y)*15, 43 + (i-room_x)*20, 17 + (j-room_y)*15, 1); |
| el17sm | 47:6e31b195ce3c | 271 | } |
| el17sm | 47:6e31b195ce3c | 272 | if (rooms[j][i]->get_doorway(1)) { |
| el17sm | 47:6e31b195ce3c | 273 | lcd.drawLine(52 + (i-room_x)*20, 23 + (j-room_y)*15, 52 + (i-room_x)*20, 24 + (j-room_y)*15, 1); |
| el17sm | 47:6e31b195ce3c | 274 | } |
| el17sm | 47:6e31b195ce3c | 275 | if (rooms[j][i]->get_doorway(2)) { |
| el17sm | 47:6e31b195ce3c | 276 | lcd.drawLine(42 + (i-room_x)*20, 31 + (j-room_y)*15, 43 + (i-room_x)*20, 31 + (j-room_y)*15, 1); |
| el17sm | 47:6e31b195ce3c | 277 | } |
| el17sm | 47:6e31b195ce3c | 278 | if (rooms[j][i]->get_doorway(3)) { |
| el17sm | 47:6e31b195ce3c | 279 | lcd.drawLine(33 + (i-room_x)*20, 23 + (j-room_y)*15, 33 + (i-room_x)*20, 24 + (j-room_y)*15, 1); |
| el17sm | 47:6e31b195ce3c | 280 | } |
| el17sm | 47:6e31b195ce3c | 281 | } |
| el17sm | 47:6e31b195ce3c | 282 | } |
| el17sm | 47:6e31b195ce3c | 283 | } |
| el17sm | 47:6e31b195ce3c | 284 | lcd.drawSpriteTransparent(33, 17, 15, 20, (char *)minimap_sprite[3]); |
| el17sm | 46:f09711580d4a | 285 | lcd.refresh(); |
| el17sm | 46:f09711580d4a | 286 | wait_ms(1000/40); |
| el17sm | 46:f09711580d4a | 287 | }; |
| el17sm | 46:f09711580d4a | 288 | } |
| el17sm | 47:6e31b195ce3c | 289 | |
| el17sm | 47:6e31b195ce3c | 290 | void game_over() |
| el17sm | 47:6e31b195ce3c | 291 | { |
| el17sm | 47:6e31b195ce3c | 292 | lcd.clear(); |
| el17sm | 47:6e31b195ce3c | 293 | lcd.setContrast(global_contrast); |
| el17sm | 47:6e31b195ce3c | 294 | lcd.printString("Game Over", 0, 0); |
| el17sm | 47:6e31b195ce3c | 295 | lcd.printString("Retry?", 0, 1); |
| el17sm | 47:6e31b195ce3c | 296 | } |
| el17sm | 47:6e31b195ce3c | 297 | |
| el17sm | 47:6e31b195ce3c | 298 | void win() |
| el17sm | 47:6e31b195ce3c | 299 | { |
| el17sm | 47:6e31b195ce3c | 300 | lcd.clear(); |
| el17sm | 47:6e31b195ce3c | 301 | lcd.setContrast(global_contrast); |
| el17sm | 47:6e31b195ce3c | 302 | lcd.printString("You won!", 0, 0); |
| el17sm | 47:6e31b195ce3c | 303 | } |
| el17sm | 47:6e31b195ce3c | 304 | |
| el17sm | 47:6e31b195ce3c | 305 | void display_stats() |
| el17sm | 47:6e31b195ce3c | 306 | { |
| el17sm | 47:6e31b195ce3c | 307 | lcd.printString("Enemies Killed:", 0, 2); |
| el17sm | 47:6e31b195ce3c | 308 | char kills[10]; |
| el17sm | 47:6e31b195ce3c | 309 | sprintf(kills, "%d enemies", number_of_enemies_killed); |
| el17sm | 47:6e31b195ce3c | 310 | lcd.printString(kills, 0, 3); |
| el17sm | 47:6e31b195ce3c | 311 | lcd.printString("Time:", 0, 4); |
| el17sm | 47:6e31b195ce3c | 312 | char total_duration[10]; |
| el17sm | 47:6e31b195ce3c | 313 | sprintf(total_duration, "%d seconds", (total_time/40)); |
| el17sm | 47:6e31b195ce3c | 314 | lcd.printString(total_duration, 0, 5); |
| el17sm | 47:6e31b195ce3c | 315 | lcd.refresh(); |
| el17sm | 47:6e31b195ce3c | 316 | while(gamepad.check_event(Gamepad::A_PRESSED)) { |
| el17sm | 47:6e31b195ce3c | 317 | } |
| el17sm | 47:6e31b195ce3c | 318 | wait(0.05); |
| el17sm | 47:6e31b195ce3c | 319 | while(!gamepad.check_event(Gamepad::A_PRESSED)) { |
| el17sm | 47:6e31b195ce3c | 320 | } |
| el17sm | 47:6e31b195ce3c | 321 | wait(0.05); |
| el17sm | 47:6e31b195ce3c | 322 | while(gamepad.check_event(Gamepad::A_PRESSED)) { |
| el17sm | 47:6e31b195ce3c | 323 | } |
| el17sm | 47:6e31b195ce3c | 324 | } |