A rouge-like rpg, heavily inspired on the binding of isaac. Running on a FRDM-K64F Mbed board. C++.
Dependencies: mbed MotionSensor
Diff: main.cpp
- Revision:
- 49:3f83ed62d123
- Parent:
- 48:f7d9ae3e554d
- Child:
- 50:2c5cb92a5361
--- a/main.cpp Thu May 09 02:46:44 2019 +0000 +++ b/main.cpp Thu May 09 04:24:30 2019 +0000 @@ -90,7 +90,7 @@ } else { rooms[room_y][room_x] = new Room(rand() % 4, 0); if (boss_room_counter < boss_room_number) {no_of_doorways = 2 + (rand() % 100 < 10) + (rand() % 100 < 10);} // 20% chance of adding doorways - else {no_of_doorways = 1;} + else {no_of_doorways = 0;} while (count_doorways() < no_of_doorways) { rooms[room_y][room_x]->set_doorway(rand() % 4, true); // Setting random doorways until number of desired doorways } @@ -117,7 +117,7 @@ void minimap_detection() { - while(gamepad.check_event(Gamepad::BACK_PRESSED)) { + while(gamepad.check_event(Gamepad::R_PRESSED)) { lcd.clear(); for (int j = 0; j < MAX_ROOMS_MAP_Y; j++) { for (int i = 0; i < MAX_ROOMS_MAP_X; i++) { @@ -153,19 +153,19 @@ { lcd.clear(); lcd.setContrast(global_contrast); - lcd.printString("Game Over", 0, 0); - lcd.printString("Retry?", 0, 1); + lcd.printString("Game Over", 0, 0); } void win() { lcd.clear(); lcd.setContrast(global_contrast); - lcd.printString("You won!", 0, 0); + lcd.printString("You won!", 0, 0); } void display_stats() { + lcd.printString("Restart?", 0, 1); lcd.printString("Enemies Killed:", 0, 2); char kills[10]; sprintf(kills, "%d enemies", number_of_enemies_killed); @@ -189,35 +189,49 @@ { if (!valid_rooms[room_y - 1][room_x]){ rooms[room_y][room_x]->set_doorway(0, true); - valid_rooms[room_y - 1][room_x] = true; - rooms[room_y - 1][room_x] = new Room(0, 10); - rooms[room_y - 1][room_x]->set_doorway(2, true); + set_boss_room(room_y - 1, room_x, 0); return 0; } else if (!valid_rooms[room_y][room_x + 1]){ rooms[room_y][room_x]->set_doorway(1, true); - valid_rooms[room_y][room_x + 1] = true; - rooms[room_y][room_x + 1] = new Room(0, 10); - rooms[room_y][room_x + 1]->set_doorway(3, true); + set_boss_room(room_y, room_x + 1, 1); return 1; } else if (!valid_rooms[room_y + 1][room_x]){ rooms[room_y][room_x]->set_doorway(2, true); - valid_rooms[room_y + 1][room_x] = true; - rooms[room_y + 1][room_x] = new Room(0, 10); - rooms[room_y + 1][room_x]->set_doorway(0, true); + set_boss_room(room_y + 1, room_x, 2); return 2; } else if (!valid_rooms[room_y][room_x - 1]){ rooms[room_y][room_x]->set_doorway(3, true); - valid_rooms[room_y][room_x - 1] = true; - rooms[room_y][room_x - 1] = new Room(0, 10); - rooms[room_y][room_x - 1]->set_doorway(1, true); - return 3; - } + set_boss_room(room_y, room_x - 1, 3); + return 3; } delete rooms[room_y - 1][room_x]; - rooms[room_y - 1][room_x] = new Room(0, 10); - rooms[room_y - 1][room_x]->set_doorway(2, true); + rooms[room_y][room_x]->set_doorway(3, true); + set_boss_room(room_y - 1, room_x, 0); return 0; } +void set_boss_room(int room_y, int room_x, int side) +{ + valid_rooms[room_y][room_x] = true; + rooms[room_y][room_x] = new Room(0, 10); + rooms[room_y][room_x]->set_doorway(opposite(side), true); + if ((opposite(side) != 0) && (valid_rooms[room_y - 1][room_x])){ + if (rooms[room_y - 1][room_x]->get_doorway(2)){ + rooms[room_y - 1][room_x]->set_doorway(2, false); + }} + if ((opposite(side) != 1) && (valid_rooms[room_y][room_x + 1])){ + if (rooms[room_y][room_x + 1]->get_doorway(3)){ + rooms[room_y][room_x + 1]->set_doorway(3, false); + }} + if ((opposite(side) != 2) && (valid_rooms[room_y + 1][room_x])){ + if (rooms[room_y + 1][room_x]->get_doorway(0)){ + rooms[room_y + 1][room_x]->set_doorway(0, false); + }} + if ((opposite(side) != 3) && (valid_rooms[room_y][room_x - 1])){ + if (rooms[room_y][room_x - 1]->get_doorway(1)){ + rooms[room_y][room_x - 1]->set_doorway(1, false); + }} +} + void game_unload() { for (int i = 0; i < MAX_ROOMS_MAP_X; i++) { @@ -255,11 +269,18 @@ void update_definite_doorways() { - // UP - if (room_y == 1) { + update_definite_doorways_up(); + update_definite_doorways_right(); + update_definite_doorways_down(); + update_definite_doorways_left(); +} + +void update_definite_doorways_up() +{ + if (room_y == 1) { // if room to be generated is on the border, then doorway cannot exist cannot[0] = true; have_to[0] = false; - } else if (valid_rooms[room_y - 1][room_x]){ + } else if (valid_rooms[room_y - 1][room_x]){ // if room to be generated is on the border, then doorway cannot exist if (rooms[room_y - 1][room_x]->get_doorway(2)){ have_to[0] = true; cannot[0] = false; @@ -271,8 +292,9 @@ have_to[0] = false; cannot[0] = false; } - - // RIGHT +} +void update_definite_doorways_right() +{ if (room_x == 10) { cannot[1] = true; have_to[1] = false; @@ -288,8 +310,10 @@ have_to[1] = false; cannot[1] = false; } - - // DOWN +} + +void update_definite_doorways_down() +{ if (room_y == 10) { cannot[2] = true; have_to[2] = false; @@ -305,8 +329,10 @@ have_to[2] = false; cannot[2] = false; } - - // LEFT +} + +void update_definite_doorways_left() +{ if (room_x == 1) { cannot[3] = true; have_to[3] = false;