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
- Committer:
- el17sm
- Date:
- 2019-05-07
- Revision:
- 41:0697508a28ba
- Parent:
- 40:cbcbf6fc1421
- Child:
- 42:cdcda895cb1b
File content as of revision 41:0697508a28ba:
/*
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];
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(0, 3);
}
}
// 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;
}
}