ELEC2645 (2017/18) / Mbed OS el16ajm
Committer:
Andrew_M
Date:
Sun May 06 22:42:49 2018 +0000
Revision:
10:279d3775d52c
Parent:
9:fe86ddbf7799
Child:
11:b25874e7efe4
Menu now has sub menus, still no impact on game although menu variables are ready to be used

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 10:279d3775d52c 34 void transition();
Andrew_M 1:a14415de3ad5 35
Andrew_M 1:a14415de3ad5 36 ///////////// functions ////////////////
Andrew_M 1:a14415de3ad5 37 int main()
Andrew_M 10:279d3775d52c 38 {
Andrew_M 1:a14415de3ad5 39 init();
Andrew_M 1:a14415de3ad5 40 welcome();
Andrew_M 8:9d01fd4a63ad 41
Andrew_M 10:279d3775d52c 42 transition();
Andrew_M 10:279d3775d52c 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 10:279d3775d52c 46 if (!mainMenu.started()) { //menu logic and rendering
Andrew_M 10:279d3775d52c 47 mainMenu.read_input(pad);
Andrew_M 10:279d3775d52c 48 mainMenu.update();
Andrew_M 10:279d3775d52c 49 renderMenu();
Andrew_M 10:279d3775d52c 50 } else { //game logic and rendering
Andrew_M 9:fe86ddbf7799 51 gameEngine.read_input(pad);
Andrew_M 9:fe86ddbf7799 52 gameEngine.update(pad);
Andrew_M 9:fe86ddbf7799 53 renderGame();
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 10:279d3775d52c 86
Andrew_M 9:fe86ddbf7799 87 int fps = 8; // frames per second
Andrew_M 10:279d3775d52c 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
Andrew_M 10:279d3775d52c 105 void transition()
Andrew_M 10:279d3775d52c 106 { //transition animation between modes to stop 'ghosting' of inputs
Andrew_M 10:279d3775d52c 107 for (int i = 0; i <= 11; i++) {
Andrew_M 10:279d3775d52c 108 for (int j = 0; j <= 21; j++) {
Andrew_M 10:279d3775d52c 109 lcd.drawRect(j*4,i*4,4,4,FILL_BLACK);
Andrew_M 10:279d3775d52c 110 wait(0.005);
Andrew_M 10:279d3775d52c 111 lcd.refresh();
Andrew_M 10:279d3775d52c 112 }
Andrew_M 10:279d3775d52c 113 }
Andrew_M 10:279d3775d52c 114
Andrew_M 10:279d3775d52c 115 }
Andrew_M 10:279d3775d52c 116