ELEC2645 (2018/19) / Mbed 2 deprecated el17lw

Dependencies:   mbed

Committer:
lewisgw
Date:
Fri Apr 12 11:30:25 2019 +0000
Revision:
18:304700b5d8f8
Parent:
14:9861fe85c803
Child:
19:f35887b14c23
Added a large menu artwork and re-named variables and functions to make the code more readable

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lewisgw 9:fff2009f826e 1 #include "Menu.h"
lewisgw 9:fff2009f826e 2
lewisgw 18:304700b5d8f8 3 // Define sprite arrays.
lewisgw 18:304700b5d8f8 4 int menu_sprite[23][80] = {
lewisgw 18:304700b5d8f8 5 { 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 },
lewisgw 18:304700b5d8f8 6 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1 },
lewisgw 18:304700b5d8f8 7 { 0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0 },
lewisgw 18:304700b5d8f8 8 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0 },
lewisgw 18:304700b5d8f8 9 { 0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,1,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0 },
lewisgw 18:304700b5d8f8 10 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0 },
lewisgw 18:304700b5d8f8 11 { 0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 },
lewisgw 18:304700b5d8f8 12 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
lewisgw 18:304700b5d8f8 13 { 0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
lewisgw 18:304700b5d8f8 14 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
lewisgw 18:304700b5d8f8 15 { 0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
lewisgw 18:304700b5d8f8 16 { 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
lewisgw 18:304700b5d8f8 17 { 0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
lewisgw 18:304700b5d8f8 18 { 0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
lewisgw 18:304700b5d8f8 19 { 0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
lewisgw 18:304700b5d8f8 20 { 0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
lewisgw 18:304700b5d8f8 21 { 0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
lewisgw 18:304700b5d8f8 22 { 0,0,1,0,0,0,1,0,0,0,1,0,0,1,1,1,0,0,1,0,0,0,1,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
lewisgw 18:304700b5d8f8 23 { 0,0,1,0,0,0,0,0,1,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
lewisgw 18:304700b5d8f8 24 { 0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
lewisgw 18:304700b5d8f8 25 { 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
lewisgw 18:304700b5d8f8 26 { 0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
lewisgw 18:304700b5d8f8 27 { 0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }
lewisgw 18:304700b5d8f8 28 };
lewisgw 18:304700b5d8f8 29
lewisgw 14:9861fe85c803 30 // Define the finite state machine for three different states: running game, display
lewisgw 14:9861fe85c803 31 // menu and display controls, {ouput,{a,b,c,d}} where a,b,c,d are inputs.
lewisgw 14:9861fe85c803 32 // The ouputs have been assigned to 0,1,2.
lewisgw 14:9861fe85c803 33 // There are four different relevent input combinations that have been assigned to
lewisgw 14:9861fe85c803 34 // 0,1,2,3.
lewisgw 12:ebaefda53dd0 35 State _fsm[3] = {
lewisgw 13:bcf6bb69c597 36 {0,{0,1,0,0}},
lewisgw 12:ebaefda53dd0 37 {1,{1,1,0,2}},
lewisgw 13:bcf6bb69c597 38 {2,{2,1,2,0}}
lewisgw 12:ebaefda53dd0 39 };
lewisgw 11:b66170249a26 40
lewisgw 14:9861fe85c803 41 // Constructor and distructor
lewisgw 9:fff2009f826e 42 Menu::Menu() {}
lewisgw 9:fff2009f826e 43
lewisgw 9:fff2009f826e 44 Menu::~Menu() {}
lewisgw 9:fff2009f826e 45
lewisgw 9:fff2009f826e 46 void Menu::init() {
lewisgw 14:9861fe85c803 47 // Initialise at the highest level, starting state is the menu.
lewisgw 12:ebaefda53dd0 48 _state = 1;
lewisgw 12:ebaefda53dd0 49 _controller.init();
lewisgw 12:ebaefda53dd0 50 }
lewisgw 12:ebaefda53dd0 51
lewisgw 12:ebaefda53dd0 52 void Menu::run(N5110 &lcd, Gamepad &gamepad) {
lewisgw 12:ebaefda53dd0 53 set_input(gamepad.check_event(Gamepad::START_PRESSED),
lewisgw 13:bcf6bb69c597 54 gamepad.check_event(Gamepad::BACK_PRESSED),
lewisgw 13:bcf6bb69c597 55 gamepad.check_event(Gamepad::X_PRESSED));
lewisgw 14:9861fe85c803 56 // Select the current output, execute that output via the output function
lewisgw 14:9861fe85c803 57 // and update to the next state depending on the input.
lewisgw 12:ebaefda53dd0 58 _output = _fsm[_state].output;
lewisgw 12:ebaefda53dd0 59 output(lcd, gamepad);
lewisgw 12:ebaefda53dd0 60 _state = _fsm[_state].next_state[_menu_input];
lewisgw 12:ebaefda53dd0 61 }
lewisgw 12:ebaefda53dd0 62
lewisgw 12:ebaefda53dd0 63 void Menu::output(N5110 &lcd, Gamepad &gamepad) {
lewisgw 14:9861fe85c803 64 // 0, 1 and 2 have been assigned to the output of each state respectivley.
lewisgw 12:ebaefda53dd0 65 if (_output == 0) {
lewisgw 12:ebaefda53dd0 66 run_game(lcd, gamepad);
lewisgw 12:ebaefda53dd0 67 } else if (_output == 1) {
lewisgw 12:ebaefda53dd0 68 display_menu(lcd, gamepad);
lewisgw 12:ebaefda53dd0 69 } else {
lewisgw 12:ebaefda53dd0 70 display_controls(lcd, gamepad);
lewisgw 12:ebaefda53dd0 71 }
lewisgw 9:fff2009f826e 72 }
lewisgw 9:fff2009f826e 73
lewisgw 13:bcf6bb69c597 74 void Menu::set_input(bool start, bool back, bool x) {
lewisgw 14:9861fe85c803 75 // 0, 1, 2, 3 have been assigned to each relevent input combination:
lewisgw 14:9861fe85c803 76 // if nothing is pressed, input = 0.
lewisgw 14:9861fe85c803 77 // if only back is pressed, input = 1.
lewisgw 14:9861fe85c803 78 // if only start is pressed, input = 2.
lewisgw 14:9861fe85c803 79 // if only X is pressed, input = 3.
lewisgw 13:bcf6bb69c597 80 if (!start && !back && !x) {
lewisgw 12:ebaefda53dd0 81 _menu_input = 0;
lewisgw 12:ebaefda53dd0 82 } else if (!start && back) {
lewisgw 12:ebaefda53dd0 83 _menu_input = 1;
lewisgw 12:ebaefda53dd0 84 } else if (start && !back) {
lewisgw 12:ebaefda53dd0 85 _menu_input = 2;
lewisgw 13:bcf6bb69c597 86 } else if (x) {
lewisgw 12:ebaefda53dd0 87 _menu_input = 3;
lewisgw 12:ebaefda53dd0 88 }
lewisgw 12:ebaefda53dd0 89 }
lewisgw 12:ebaefda53dd0 90
lewisgw 12:ebaefda53dd0 91 void Menu::run_game(N5110 &lcd, Gamepad &gamepad) {
lewisgw 12:ebaefda53dd0 92 _controller.run_game_engine(lcd, gamepad);
lewisgw 11:b66170249a26 93 }
lewisgw 11:b66170249a26 94
lewisgw 13:bcf6bb69c597 95 void Menu::display_controls(N5110 &lcd, Gamepad &gamepad) {
lewisgw 13:bcf6bb69c597 96 lcd.printString("JOYSTICK:",0,0);
lewisgw 13:bcf6bb69c597 97 lcd.printString("-Move left",0,1);
lewisgw 13:bcf6bb69c597 98 lcd.printString("-Move right",0,2);
lewisgw 13:bcf6bb69c597 99 lcd.printString("-Duck",0,3);
lewisgw 13:bcf6bb69c597 100 lcd.printString("A:",0,4);
lewisgw 13:bcf6bb69c597 101 lcd.printString("-Jump (back)",0,5);
lewisgw 13:bcf6bb69c597 102 }
lewisgw 12:ebaefda53dd0 103
lewisgw 12:ebaefda53dd0 104 void Menu::display_menu(N5110 &lcd, Gamepad &gamepad) {
lewisgw 14:9861fe85c803 105 // Displays the menu and resets the controller to ensure a new game is
lewisgw 14:9861fe85c803 106 // ready to start when the state is switched to run game.
lewisgw 13:bcf6bb69c597 107 _controller.init();
lewisgw 18:304700b5d8f8 108 lcd.printString("SKATER",24,0);
lewisgw 13:bcf6bb69c597 109 lcd.printString("START- Play!",0,1);
lewisgw 18:304700b5d8f8 110 lcd.printString("X- Controls",0,2);
lewisgw 18:304700b5d8f8 111 lcd.drawSprite(1,25,23,80,(int*)menu_sprite);
lewisgw 9:fff2009f826e 112 }