ELEC2645 (2017/18) / Mbed OS el16ajm
Committer:
Andrew_M
Date:
Sun May 06 20:17:50 2018 +0000
Revision:
8:9d01fd4a63ad
Parent:
3:6253a2d374fa
Child:
9:fe86ddbf7799
Started basic framework for a main menu, non functional. Menu has it's own class

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Andrew_M 0:66e5b37c127e 1 /*
Andrew_M 0:66e5b37c127e 2 ELEC2645 Embedded Systems Project
Andrew_M 0:66e5b37c127e 3 School of Electronic & Electrical Engineering
Andrew_M 0:66e5b37c127e 4 University of Leeds
Andrew_M 2:9ca5e1c221c3 5 Name: Andrew Moore
Andrew_M 2:9ca5e1c221c3 6 Username: el16ajm
Andrew_M 2:9ca5e1c221c3 7 Student ID Number: 201042893
Andrew_M 8:9d01fd4a63ad 8 Date:
Andrew_M 0:66e5b37c127e 9 */
Andrew_M 0:66e5b37c127e 10
Andrew_M 0:66e5b37c127e 11 #include "mbed.h"
Andrew_M 1:a14415de3ad5 12 #include "Gamepad.h"
Andrew_M 1:a14415de3ad5 13 #include "N5110.h"
Andrew_M 1:a14415de3ad5 14 #include "Engine.h"
Andrew_M 0:66e5b37c127e 15
Andrew_M 1:a14415de3ad5 16 /////////////// structs /////////////////
Andrew_M 1:a14415de3ad5 17 struct UserInput {
Andrew_M 1:a14415de3ad5 18 Direction d;
Andrew_M 1:a14415de3ad5 19 };
Andrew_M 1:a14415de3ad5 20
Andrew_M 1:a14415de3ad5 21 /////////////// objects ///////////////
Andrew_M 1:a14415de3ad5 22 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
Andrew_M 1:a14415de3ad5 23 Gamepad pad;
Andrew_M 1:a14415de3ad5 24 Engine gameEngine;
Andrew_M 0:66e5b37c127e 25
Andrew_M 1:a14415de3ad5 26 ///////////// prototypes ///////////////
Andrew_M 1:a14415de3ad5 27 void init();
Andrew_M 1:a14415de3ad5 28 void update_game(UserInput input);
Andrew_M 1:a14415de3ad5 29 void render();
Andrew_M 1:a14415de3ad5 30 void welcome();
Andrew_M 8:9d01fd4a63ad 31 void menu();
Andrew_M 1:a14415de3ad5 32
Andrew_M 1:a14415de3ad5 33 ///////////// functions ////////////////
Andrew_M 1:a14415de3ad5 34 int main()
Andrew_M 1:a14415de3ad5 35 {
Andrew_M 2:9ca5e1c221c3 36 int fps = 8; // frames per second
Andrew_M 8:9d01fd4a63ad 37
Andrew_M 1:a14415de3ad5 38 init();
Andrew_M 1:a14415de3ad5 39 welcome();
Andrew_M 8:9d01fd4a63ad 40
Andrew_M 2:9ca5e1c221c3 41 wait(1.0f/fps); // and wait for one frame period
Andrew_M 2:9ca5e1c221c3 42
Andrew_M 2:9ca5e1c221c3 43
Andrew_M 2:9ca5e1c221c3 44 // game loop - read input, update the game state and render the display
Andrew_M 2:9ca5e1c221c3 45 while (1) {
Andrew_M 2:9ca5e1c221c3 46 gameEngine.read_input(pad);
Andrew_M 2:9ca5e1c221c3 47 gameEngine.update(pad);
Andrew_M 2:9ca5e1c221c3 48 render();
Andrew_M 2:9ca5e1c221c3 49 wait(1.0f/fps);
Andrew_M 2:9ca5e1c221c3 50 }
Andrew_M 1:a14415de3ad5 51 }
Andrew_M 1:a14415de3ad5 52
Andrew_M 1:a14415de3ad5 53 void welcome()
Andrew_M 1:a14415de3ad5 54 {
Andrew_M 8:9d01fd4a63ad 55 lcd.printString(" Snake! ",0,1);
Andrew_M 1:a14415de3ad5 56 lcd.printString(" Press Start ",0,4);
Andrew_M 1:a14415de3ad5 57 lcd.refresh();
Andrew_M 8:9d01fd4a63ad 58
Andrew_M 8:9d01fd4a63ad 59 // wait flashing LEDs until start button is pressed
Andrew_M 1:a14415de3ad5 60 while ( pad.check_event(Gamepad::START_PRESSED) == false) {
Andrew_M 1:a14415de3ad5 61 pad.leds_on();
Andrew_M 1:a14415de3ad5 62 wait(0.1);
Andrew_M 1:a14415de3ad5 63 pad.leds_off();
Andrew_M 1:a14415de3ad5 64 wait(0.1);
Andrew_M 0:66e5b37c127e 65 }
Andrew_M 8:9d01fd4a63ad 66
Andrew_M 8:9d01fd4a63ad 67 menu();
Andrew_M 0:66e5b37c127e 68 }
Andrew_M 0:66e5b37c127e 69
Andrew_M 1:a14415de3ad5 70 void init()
Andrew_M 1:a14415de3ad5 71 {
Andrew_M 8:9d01fd4a63ad 72 // need to initialise LCD and Gamepad
Andrew_M 3:6253a2d374fa 73 gameEngine.init();
Andrew_M 1:a14415de3ad5 74 lcd.init();
Andrew_M 8:9d01fd4a63ad 75 pad.init();
Andrew_M 1:a14415de3ad5 76
Andrew_M 1:a14415de3ad5 77 }
Andrew_M 2:9ca5e1c221c3 78
Andrew_M 2:9ca5e1c221c3 79 void render()
Andrew_M 2:9ca5e1c221c3 80 {
Andrew_M 2:9ca5e1c221c3 81 // clear screen, re-draw and refresh
Andrew_M 8:9d01fd4a63ad 82 lcd.clear();
Andrew_M 2:9ca5e1c221c3 83 gameEngine.draw(lcd);
Andrew_M 2:9ca5e1c221c3 84 lcd.refresh();
Andrew_M 2:9ca5e1c221c3 85 }
Andrew_M 8:9d01fd4a63ad 86