ELEC2645 (2017/18) / Mbed OS el16ajm
Committer:
Andrew_M
Date:
Sun Apr 29 14:19:38 2018 +0000
Revision:
3:6253a2d374fa
Parent:
2:9ca5e1c221c3
Child:
8:9d01fd4a63ad
Snake head now moves across screen, remembers the direction it moved in before so it continues moving without user input

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 2:9ca5e1c221c3 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 1:a14415de3ad5 31
Andrew_M 1:a14415de3ad5 32 ///////////// functions ////////////////
Andrew_M 1:a14415de3ad5 33 int main()
Andrew_M 1:a14415de3ad5 34 {
Andrew_M 2:9ca5e1c221c3 35 int fps = 8; // frames per second
Andrew_M 2:9ca5e1c221c3 36
Andrew_M 1:a14415de3ad5 37 init();
Andrew_M 1:a14415de3ad5 38 welcome();
Andrew_M 2:9ca5e1c221c3 39
Andrew_M 2:9ca5e1c221c3 40 wait(1.0f/fps); // and wait for one frame period
Andrew_M 2:9ca5e1c221c3 41
Andrew_M 2:9ca5e1c221c3 42
Andrew_M 2:9ca5e1c221c3 43 // game loop - read input, update the game state and render the display
Andrew_M 2:9ca5e1c221c3 44 while (1) {
Andrew_M 2:9ca5e1c221c3 45 gameEngine.read_input(pad);
Andrew_M 2:9ca5e1c221c3 46 gameEngine.update(pad);
Andrew_M 2:9ca5e1c221c3 47 render();
Andrew_M 2:9ca5e1c221c3 48 wait(1.0f/fps);
Andrew_M 2:9ca5e1c221c3 49 }
Andrew_M 1:a14415de3ad5 50 }
Andrew_M 1:a14415de3ad5 51
Andrew_M 1:a14415de3ad5 52 void welcome()
Andrew_M 1:a14415de3ad5 53 {
Andrew_M 1:a14415de3ad5 54 lcd.printString(" Snake! ",0,1);
Andrew_M 1:a14415de3ad5 55 lcd.printString(" Press Start ",0,4);
Andrew_M 1:a14415de3ad5 56 lcd.refresh();
Andrew_M 1:a14415de3ad5 57
Andrew_M 1:a14415de3ad5 58 // wait flashing LEDs until start button is pressed
Andrew_M 1:a14415de3ad5 59 while ( pad.check_event(Gamepad::START_PRESSED) == false) {
Andrew_M 1:a14415de3ad5 60 pad.leds_on();
Andrew_M 1:a14415de3ad5 61 wait(0.1);
Andrew_M 1:a14415de3ad5 62 pad.leds_off();
Andrew_M 1:a14415de3ad5 63 wait(0.1);
Andrew_M 0:66e5b37c127e 64 }
Andrew_M 0:66e5b37c127e 65 }
Andrew_M 0:66e5b37c127e 66
Andrew_M 1:a14415de3ad5 67 void init()
Andrew_M 1:a14415de3ad5 68 {
Andrew_M 1:a14415de3ad5 69 // need to initialise LCD and Gamepad
Andrew_M 3:6253a2d374fa 70 gameEngine.init();
Andrew_M 1:a14415de3ad5 71 lcd.init();
Andrew_M 1:a14415de3ad5 72 pad.init();
Andrew_M 1:a14415de3ad5 73
Andrew_M 1:a14415de3ad5 74 }
Andrew_M 2:9ca5e1c221c3 75
Andrew_M 2:9ca5e1c221c3 76 void render()
Andrew_M 2:9ca5e1c221c3 77 {
Andrew_M 2:9ca5e1c221c3 78 // clear screen, re-draw and refresh
Andrew_M 2:9ca5e1c221c3 79 lcd.clear();
Andrew_M 2:9ca5e1c221c3 80 gameEngine.draw(lcd);
Andrew_M 2:9ca5e1c221c3 81 lcd.refresh();
Andrew_M 2:9ca5e1c221c3 82 }