A rouge-like rpg, heavily inspired on the binding of isaac. Running on a FRDM-K64F Mbed board. C++.
Dependencies: mbed MotionSensor
main.cpp
- Committer:
- el17sm
- Date:
- 2019-05-08
- Revision:
- 45:8725b4171646
- Parent:
- 44:cc4cecfc639f
- Child:
- 46:f09711580d4a
File content as of revision 45:8725b4171646:
/* ELEC2645 Embedded Systems Project School of Electronic & Electrical Engineering University of Leeds Name: Steven Mahasin Username: el17sm Student ID Number: 201192939 Date: 11/04/2019 */ // Pre-Processor #include "mbed.h" #include "Gamepad.h" #include "N5110.h" #include "math.h" #include "sprites.h" #include "Entity.h" #include "Player.h" #include "Headless.h" #include "Snake.h" #include "RoomEngine.h" #include "Title.h" #define INSIDE 4 #define MAX_ROOMS_MAP_X 11 #define MAX_ROOMS_MAP_Y 11 // Variables float global_contrast = 0.5; Player *player; Room *rooms[MAX_ROOMS_MAP_Y][MAX_ROOMS_MAP_X]; bool valid_rooms[MAX_ROOMS_MAP_Y][MAX_ROOMS_MAP_X]; RoomEngine *room_engine; // Objects N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); Gamepad gamepad; Title title; // Prototypes void game_loop(); void game_over(); int main() { // Initialize lcd.init(); lcd.setContrast(global_contrast); gamepad.init(); while(1) { // Gameloop title.main(lcd, gamepad, global_contrast); srand(title.get_seed()); player = new Player(39, 27); room_engine = new RoomEngine(global_contrast); game_loop(); game_over(); for (int i = 0; i < MAX_ROOMS_MAP_X; i++) { for (int j = 0; j < MAX_ROOMS_MAP_Y; j++) { delete rooms[j][i]; } } delete room_engine; delete player; } } void game_loop() { while(1) { // Floor Loop for (int i = 0; i < MAX_ROOMS_MAP_X; i++) { for (int j = 0; j < MAX_ROOMS_MAP_Y; j++) { rooms[j][i] = new Room(rand() % 1, 10); } } rooms[7][6]->set_boss_doorway(true); delete rooms[8][6]; rooms[8][6] = new Room(0,10); // Rooms Generation while(1) { // Room Loop rooms[room_engine->get_room_y()][room_engine->get_room_x()]->load(); room_engine->load(player, rooms[room_engine->get_room_y()][room_engine->get_room_x()]); room_engine->entrance_scene(lcd, gamepad); while(room_engine->check_player_room_position() == INSIDE) { // Room actions room_engine->read_input(gamepad); room_engine->update(); room_engine->render(lcd, gamepad); if (player->get_hp() <= 0) { goto gameover; } } room_engine->exit_scene(lcd, gamepad); rooms[room_engine->get_room_y()][room_engine->get_room_x()]->unload(); player->delete_bullets(); room_engine->update_current_room(); } } gameover : { game_over(); } } void game_over() { while(1){ // Game Over Screen Loop lcd.clear(); lcd.setContrast(global_contrast); lcd.printString("Game Over", 0, 0); lcd.printString("Retry?", 0, 1); lcd.refresh(); while(!gamepad.check_event(Gamepad::A_PRESSED)) { } wait(0.05); while(gamepad.check_event(Gamepad::A_PRESSED)) { } break; } }