A rouge-like rpg, heavily inspired on the binding of isaac. Running on a FRDM-K64F Mbed board. C++.
Dependencies: mbed MotionSensor
main.cpp@42:cdcda895cb1b, 2019-05-07 (annotated)
- Committer:
- el17sm
- Date:
- Tue May 07 18:16:42 2019 +0000
- Revision:
- 42:cdcda895cb1b
- Parent:
- 41:0697508a28ba
- Child:
- 43:63f5c9d9689c
Boss death crash
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 | 1:1fa7ecca8dfb | 10 | |
el17sm | 27:a1b41626f57c | 11 | // Pre-Processor |
el17sm | 7:4aaa37a711a1 | 12 | #include "mbed.h" |
el17sm | 7:4aaa37a711a1 | 13 | #include "Gamepad.h" |
el17sm | 7:4aaa37a711a1 | 14 | #include "N5110.h" |
el17sm | 7:4aaa37a711a1 | 15 | #include "math.h" |
el17sm | 7:4aaa37a711a1 | 16 | #include "sprites.h" |
el17sm | 7:4aaa37a711a1 | 17 | #include "Entity.h" |
el17sm | 7:4aaa37a711a1 | 18 | #include "Player.h" |
el17sm | 10:1a3499f6b583 | 19 | #include "Headless.h" |
el17sm | 17:99e533f7f2fb | 20 | #include "Snake.h" |
el17sm | 27:a1b41626f57c | 21 | #include "RoomEngine.h" |
el17sm | 32:fe6359ef9916 | 22 | #include "Title.h" |
el17sm | 7:4aaa37a711a1 | 23 | |
el17sm | 28:98848e6a77a2 | 24 | #define INSIDE 4 |
el17sm | 29:6b8411bb040a | 25 | #define MAX_ROOMS_MAP_X 11 |
el17sm | 29:6b8411bb040a | 26 | #define MAX_ROOMS_MAP_Y 11 |
el17sm | 28:98848e6a77a2 | 27 | |
el17sm | 31:ab24d028ddfd | 28 | // Variables |
el17sm | 31:ab24d028ddfd | 29 | float global_contrast = 0.5; |
el17sm | 32:fe6359ef9916 | 30 | Player *player; |
el17sm | 32:fe6359ef9916 | 31 | Room *rooms[MAX_ROOMS_MAP_Y][MAX_ROOMS_MAP_X]; |
el17sm | 32:fe6359ef9916 | 32 | RoomEngine *room_engine; |
el17sm | 31:ab24d028ddfd | 33 | |
el17sm | 27:a1b41626f57c | 34 | // Objects |
el17sm | 7:4aaa37a711a1 | 35 | N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); |
el17sm | 7:4aaa37a711a1 | 36 | Gamepad gamepad; |
el17sm | 32:fe6359ef9916 | 37 | Title title; |
el17sm | 7:4aaa37a711a1 | 38 | |
el17sm | 27:a1b41626f57c | 39 | // Prototypes |
el17sm | 31:ab24d028ddfd | 40 | void game_loop(); |
el17sm | 31:ab24d028ddfd | 41 | void game_over(); |
el17sm | 10:1a3499f6b583 | 42 | |
el17sm | 1:1fa7ecca8dfb | 43 | int main() |
el17sm | 1:1fa7ecca8dfb | 44 | { |
el17sm | 29:6b8411bb040a | 45 | // Initialize |
el17sm | 1:1fa7ecca8dfb | 46 | lcd.init(); |
el17sm | 30:ec915d24d3e9 | 47 | lcd.setContrast(global_contrast); |
el17sm | 3:359a49bace1b | 48 | gamepad.init(); |
el17sm | 28:98848e6a77a2 | 49 | |
el17sm | 29:6b8411bb040a | 50 | while(1) { // Gameloop |
el17sm | 31:ab24d028ddfd | 51 | |
el17sm | 32:fe6359ef9916 | 52 | title.main(lcd, gamepad, global_contrast); |
el17sm | 31:ab24d028ddfd | 53 | |
el17sm | 32:fe6359ef9916 | 54 | srand(title.get_seed()); |
el17sm | 31:ab24d028ddfd | 55 | player = new Player(39, 27); |
el17sm | 41:0697508a28ba | 56 | room_engine = new RoomEngine(global_contrast); |
el17sm | 31:ab24d028ddfd | 57 | |
el17sm | 31:ab24d028ddfd | 58 | game_loop(); |
el17sm | 31:ab24d028ddfd | 59 | game_over(); |
el17sm | 40:cbcbf6fc1421 | 60 | for (int i = 0; i < MAX_ROOMS_MAP_X; i++) { |
el17sm | 40:cbcbf6fc1421 | 61 | for (int j = 0; j < MAX_ROOMS_MAP_Y; j++) { |
el17sm | 40:cbcbf6fc1421 | 62 | delete rooms[j][i]; |
el17sm | 40:cbcbf6fc1421 | 63 | } |
el17sm | 40:cbcbf6fc1421 | 64 | } |
el17sm | 31:ab24d028ddfd | 65 | delete room_engine; |
el17sm | 31:ab24d028ddfd | 66 | delete player; |
el17sm | 31:ab24d028ddfd | 67 | } |
el17sm | 31:ab24d028ddfd | 68 | } |
el17sm | 31:ab24d028ddfd | 69 | |
el17sm | 31:ab24d028ddfd | 70 | void game_loop() |
el17sm | 31:ab24d028ddfd | 71 | { |
el17sm | 31:ab24d028ddfd | 72 | while(1) { // Floor Loop |
el17sm | 31:ab24d028ddfd | 73 | for (int i = 0; i < MAX_ROOMS_MAP_X; i++) { |
el17sm | 31:ab24d028ddfd | 74 | for (int j = 0; j < MAX_ROOMS_MAP_Y; j++) { |
el17sm | 42:cdcda895cb1b | 75 | rooms[j][i] = new Room(0, 0); |
el17sm | 30:ec915d24d3e9 | 76 | } |
el17sm | 30:ec915d24d3e9 | 77 | } |
el17sm | 31:ab24d028ddfd | 78 | |
el17sm | 31:ab24d028ddfd | 79 | // Rooms Generation |
el17sm | 31:ab24d028ddfd | 80 | while(1) { // Room Loop |
el17sm | 31:ab24d028ddfd | 81 | rooms[room_engine->get_room_y()][room_engine->get_room_x()]->load(); |
el17sm | 31:ab24d028ddfd | 82 | room_engine->load(player, rooms[room_engine->get_room_y()][room_engine->get_room_x()]); |
el17sm | 31:ab24d028ddfd | 83 | |
el17sm | 31:ab24d028ddfd | 84 | room_engine->entrance_scene(lcd, gamepad); |
el17sm | 31:ab24d028ddfd | 85 | while(room_engine->check_player_room_position() == INSIDE) { // Room actions |
el17sm | 31:ab24d028ddfd | 86 | room_engine->read_input(gamepad); |
el17sm | 31:ab24d028ddfd | 87 | room_engine->update(); |
el17sm | 31:ab24d028ddfd | 88 | room_engine->render(lcd, gamepad); |
el17sm | 31:ab24d028ddfd | 89 | if (player->get_hp() <= 0) { |
el17sm | 31:ab24d028ddfd | 90 | goto gameover; |
el17sm | 29:6b8411bb040a | 91 | } |
el17sm | 29:6b8411bb040a | 92 | } |
el17sm | 31:ab24d028ddfd | 93 | room_engine->exit_scene(lcd, gamepad); |
el17sm | 31:ab24d028ddfd | 94 | rooms[room_engine->get_room_y()][room_engine->get_room_x()]->unload(); |
el17sm | 31:ab24d028ddfd | 95 | player->delete_bullets(); |
el17sm | 31:ab24d028ddfd | 96 | room_engine->update_current_room(); |
el17sm | 31:ab24d028ddfd | 97 | } |
el17sm | 31:ab24d028ddfd | 98 | } |
el17sm | 31:ab24d028ddfd | 99 | gameover : { |
el17sm | 31:ab24d028ddfd | 100 | game_over(); |
el17sm | 31:ab24d028ddfd | 101 | } |
el17sm | 31:ab24d028ddfd | 102 | } |
el17sm | 29:6b8411bb040a | 103 | |
el17sm | 31:ab24d028ddfd | 104 | void game_over() |
el17sm | 31:ab24d028ddfd | 105 | { |
el17sm | 31:ab24d028ddfd | 106 | while(1){ // Game Over Screen Loop |
el17sm | 30:ec915d24d3e9 | 107 | lcd.clear(); |
el17sm | 30:ec915d24d3e9 | 108 | lcd.setContrast(global_contrast); |
el17sm | 30:ec915d24d3e9 | 109 | lcd.printString("Game Over", 0, 0); |
el17sm | 30:ec915d24d3e9 | 110 | lcd.printString("Retry?", 0, 1); |
el17sm | 30:ec915d24d3e9 | 111 | lcd.refresh(); |
el17sm | 30:ec915d24d3e9 | 112 | while(!gamepad.check_event(Gamepad::A_PRESSED)) { |
el17sm | 30:ec915d24d3e9 | 113 | } |
el17sm | 30:ec915d24d3e9 | 114 | wait(0.05); |
el17sm | 30:ec915d24d3e9 | 115 | while(gamepad.check_event(Gamepad::A_PRESSED)) { |
el17sm | 30:ec915d24d3e9 | 116 | } |
el17sm | 30:ec915d24d3e9 | 117 | break; |
el17sm | 30:ec915d24d3e9 | 118 | } |
el17sm | 10:1a3499f6b583 | 119 | } |