ELEC2645 (2017/18) / Mbed OS el16ajm
Committer:
Andrew_M
Date:
Sun May 06 20:49:48 2018 +0000
Revision:
9:fe86ddbf7799
Parent:
8:9d01fd4a63ad
Child:
10:279d3775d52c
Menu is functional but lacks any substance

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 9:fe86ddbf7799 15 #include "Menu.h"
Andrew_M 0:66e5b37c127e 16
Andrew_M 1:a14415de3ad5 17 /////////////// structs /////////////////
Andrew_M 1:a14415de3ad5 18 struct UserInput {
Andrew_M 1:a14415de3ad5 19 Direction d;
Andrew_M 1:a14415de3ad5 20 };
Andrew_M 1:a14415de3ad5 21
Andrew_M 1:a14415de3ad5 22 /////////////// objects ///////////////
Andrew_M 1:a14415de3ad5 23 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
Andrew_M 1:a14415de3ad5 24 Gamepad pad;
Andrew_M 1:a14415de3ad5 25 Engine gameEngine;
Andrew_M 9:fe86ddbf7799 26 Menu mainMenu;
Andrew_M 0:66e5b37c127e 27
Andrew_M 1:a14415de3ad5 28 ///////////// prototypes ///////////////
Andrew_M 1:a14415de3ad5 29 void init();
Andrew_M 1:a14415de3ad5 30 void update_game(UserInput input);
Andrew_M 9:fe86ddbf7799 31 void renderGame();
Andrew_M 9:fe86ddbf7799 32 void renderMenu();
Andrew_M 1:a14415de3ad5 33 void welcome();
Andrew_M 1:a14415de3ad5 34
Andrew_M 1:a14415de3ad5 35 ///////////// functions ////////////////
Andrew_M 1:a14415de3ad5 36 int main()
Andrew_M 9:fe86ddbf7799 37 {
Andrew_M 1:a14415de3ad5 38 init();
Andrew_M 1:a14415de3ad5 39 welcome();
Andrew_M 8:9d01fd4a63ad 40
Andrew_M 9:fe86ddbf7799 41 wait(1.0f/8); // 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 9:fe86ddbf7799 46 if (mainMenu.started()) {
Andrew_M 9:fe86ddbf7799 47 gameEngine.read_input(pad);
Andrew_M 9:fe86ddbf7799 48 gameEngine.update(pad);
Andrew_M 9:fe86ddbf7799 49 renderGame();
Andrew_M 9:fe86ddbf7799 50 } else {
Andrew_M 9:fe86ddbf7799 51 mainMenu.read_input(pad);
Andrew_M 9:fe86ddbf7799 52 mainMenu.update(); //draws the main menu before the game fully starts
Andrew_M 9:fe86ddbf7799 53 renderMenu();
Andrew_M 9:fe86ddbf7799 54 }
Andrew_M 2:9ca5e1c221c3 55 }
Andrew_M 1:a14415de3ad5 56 }
Andrew_M 1:a14415de3ad5 57
Andrew_M 1:a14415de3ad5 58 void welcome()
Andrew_M 1:a14415de3ad5 59 {
Andrew_M 8:9d01fd4a63ad 60 lcd.printString(" Snake! ",0,1);
Andrew_M 1:a14415de3ad5 61 lcd.printString(" Press Start ",0,4);
Andrew_M 1:a14415de3ad5 62 lcd.refresh();
Andrew_M 8:9d01fd4a63ad 63
Andrew_M 8:9d01fd4a63ad 64 // wait flashing LEDs until start button is pressed
Andrew_M 1:a14415de3ad5 65 while ( pad.check_event(Gamepad::START_PRESSED) == false) {
Andrew_M 1:a14415de3ad5 66 pad.leds_on();
Andrew_M 1:a14415de3ad5 67 wait(0.1);
Andrew_M 1:a14415de3ad5 68 pad.leds_off();
Andrew_M 1:a14415de3ad5 69 wait(0.1);
Andrew_M 0:66e5b37c127e 70 }
Andrew_M 9:fe86ddbf7799 71
Andrew_M 0:66e5b37c127e 72 }
Andrew_M 0:66e5b37c127e 73
Andrew_M 1:a14415de3ad5 74 void init()
Andrew_M 1:a14415de3ad5 75 {
Andrew_M 8:9d01fd4a63ad 76 // need to initialise LCD and Gamepad
Andrew_M 3:6253a2d374fa 77 gameEngine.init();
Andrew_M 1:a14415de3ad5 78 lcd.init();
Andrew_M 8:9d01fd4a63ad 79 pad.init();
Andrew_M 9:fe86ddbf7799 80 mainMenu.init();
Andrew_M 1:a14415de3ad5 81
Andrew_M 1:a14415de3ad5 82 }
Andrew_M 2:9ca5e1c221c3 83
Andrew_M 9:fe86ddbf7799 84 void renderGame()
Andrew_M 2:9ca5e1c221c3 85 {
Andrew_M 9:fe86ddbf7799 86
Andrew_M 9:fe86ddbf7799 87 int fps = 8; // frames per second
Andrew_M 9:fe86ddbf7799 88
Andrew_M 2:9ca5e1c221c3 89 // clear screen, re-draw and refresh
Andrew_M 8:9d01fd4a63ad 90 lcd.clear();
Andrew_M 2:9ca5e1c221c3 91 gameEngine.draw(lcd);
Andrew_M 2:9ca5e1c221c3 92 lcd.refresh();
Andrew_M 9:fe86ddbf7799 93 wait(1.0f/fps);
Andrew_M 2:9ca5e1c221c3 94 }
Andrew_M 8:9d01fd4a63ad 95
Andrew_M 9:fe86ddbf7799 96 void renderMenu()
Andrew_M 9:fe86ddbf7799 97 {
Andrew_M 9:fe86ddbf7799 98 // clear screen, re-draw and refresh
Andrew_M 9:fe86ddbf7799 99 lcd.clear();
Andrew_M 9:fe86ddbf7799 100 mainMenu.draw(lcd);
Andrew_M 9:fe86ddbf7799 101 lcd.refresh();
Andrew_M 9:fe86ddbf7799 102 wait(1.0f/8);
Andrew_M 9:fe86ddbf7799 103 }
Andrew_M 9:fe86ddbf7799 104