A rouge-like rpg, heavily inspired on the binding of isaac. Running on a FRDM-K64F Mbed board. C++.
Dependencies: mbed MotionSensor
main.cpp@32:fe6359ef9916, 2019-05-06 (annotated)
- Committer:
- el17sm
- Date:
- Mon May 06 08:56:48 2019 +0000
- Revision:
- 32:fe6359ef9916
- Parent:
- 31:ab24d028ddfd
- Child:
- 36:92d131695e7c
A bit of code cleanup;; Draw functions are now inside the classes;; Moved classes into it's folders;
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 | delete player; |
el17sm | 31:ab24d028ddfd | 54 | |
el17sm | 32:fe6359ef9916 | 55 | srand(title.get_seed()); |
el17sm | 31:ab24d028ddfd | 56 | player = new Player(39, 27); |
el17sm | 31:ab24d028ddfd | 57 | room_engine = new RoomEngine(global_contrast); |
el17sm | 31:ab24d028ddfd | 58 | |
el17sm | 31:ab24d028ddfd | 59 | game_loop(); |
el17sm | 31:ab24d028ddfd | 60 | game_over(); |
el17sm | 31:ab24d028ddfd | 61 | delete room_engine; |
el17sm | 31:ab24d028ddfd | 62 | delete player; |
el17sm | 31:ab24d028ddfd | 63 | } |
el17sm | 31:ab24d028ddfd | 64 | } |
el17sm | 31:ab24d028ddfd | 65 | |
el17sm | 31:ab24d028ddfd | 66 | void game_loop() |
el17sm | 31:ab24d028ddfd | 67 | { |
el17sm | 31:ab24d028ddfd | 68 | while(1) { // Floor Loop |
el17sm | 31:ab24d028ddfd | 69 | for (int i = 0; i < MAX_ROOMS_MAP_X; i++) { |
el17sm | 31:ab24d028ddfd | 70 | for (int j = 0; j < MAX_ROOMS_MAP_Y; j++) { |
el17sm | 31:ab24d028ddfd | 71 | rooms[j][i] = new Room(2); |
el17sm | 30:ec915d24d3e9 | 72 | } |
el17sm | 30:ec915d24d3e9 | 73 | } |
el17sm | 31:ab24d028ddfd | 74 | |
el17sm | 31:ab24d028ddfd | 75 | // Rooms Generation |
el17sm | 31:ab24d028ddfd | 76 | while(1) { // Room Loop |
el17sm | 31:ab24d028ddfd | 77 | rooms[room_engine->get_room_y()][room_engine->get_room_x()]->load(); |
el17sm | 31:ab24d028ddfd | 78 | room_engine->load(player, rooms[room_engine->get_room_y()][room_engine->get_room_x()]); |
el17sm | 31:ab24d028ddfd | 79 | |
el17sm | 31:ab24d028ddfd | 80 | room_engine->entrance_scene(lcd, gamepad); |
el17sm | 31:ab24d028ddfd | 81 | while(room_engine->check_player_room_position() == INSIDE) { // Room actions |
el17sm | 31:ab24d028ddfd | 82 | room_engine->read_input(gamepad); |
el17sm | 31:ab24d028ddfd | 83 | room_engine->update(); |
el17sm | 31:ab24d028ddfd | 84 | room_engine->render(lcd, gamepad); |
el17sm | 31:ab24d028ddfd | 85 | if (player->get_hp() <= 0) { |
el17sm | 31:ab24d028ddfd | 86 | goto gameover; |
el17sm | 29:6b8411bb040a | 87 | } |
el17sm | 29:6b8411bb040a | 88 | } |
el17sm | 31:ab24d028ddfd | 89 | room_engine->exit_scene(lcd, gamepad); |
el17sm | 31:ab24d028ddfd | 90 | rooms[room_engine->get_room_y()][room_engine->get_room_x()]->unload(); |
el17sm | 31:ab24d028ddfd | 91 | player->delete_bullets(); |
el17sm | 31:ab24d028ddfd | 92 | room_engine->update_current_room(); |
el17sm | 31:ab24d028ddfd | 93 | } |
el17sm | 31:ab24d028ddfd | 94 | } |
el17sm | 31:ab24d028ddfd | 95 | gameover : { |
el17sm | 31:ab24d028ddfd | 96 | game_over(); |
el17sm | 31:ab24d028ddfd | 97 | } |
el17sm | 31:ab24d028ddfd | 98 | } |
el17sm | 29:6b8411bb040a | 99 | |
el17sm | 31:ab24d028ddfd | 100 | void game_over() |
el17sm | 31:ab24d028ddfd | 101 | { |
el17sm | 31:ab24d028ddfd | 102 | while(1){ // Game Over Screen Loop |
el17sm | 30:ec915d24d3e9 | 103 | lcd.clear(); |
el17sm | 30:ec915d24d3e9 | 104 | lcd.setContrast(global_contrast); |
el17sm | 30:ec915d24d3e9 | 105 | lcd.printString("Game Over", 0, 0); |
el17sm | 30:ec915d24d3e9 | 106 | lcd.printString("Retry?", 0, 1); |
el17sm | 30:ec915d24d3e9 | 107 | lcd.refresh(); |
el17sm | 30:ec915d24d3e9 | 108 | wait(0.05); |
el17sm | 30:ec915d24d3e9 | 109 | while(!gamepad.check_event(Gamepad::A_PRESSED)) { |
el17sm | 30:ec915d24d3e9 | 110 | } |
el17sm | 30:ec915d24d3e9 | 111 | wait(0.05); |
el17sm | 30:ec915d24d3e9 | 112 | while(gamepad.check_event(Gamepad::A_PRESSED)) { |
el17sm | 30:ec915d24d3e9 | 113 | } |
el17sm | 30:ec915d24d3e9 | 114 | break; |
el17sm | 30:ec915d24d3e9 | 115 | } |
el17sm | 10:1a3499f6b583 | 116 | } |