ELEC2645 (2017/18) / Mbed OS el16ajm
Committer:
Andrew_M
Date:
Tue May 08 13:15:41 2018 +0000
Revision:
14:a57a40ff9430
Parent:
13:81573be8fac6
Child:
15:130900e5c268
Minor restructuring and removal of unneeded functions. Doxygen has been utilised

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Andrew_M 8:9d01fd4a63ad 1 #include "Menu.h"
Andrew_M 8:9d01fd4a63ad 2
Andrew_M 8:9d01fd4a63ad 3 // nothing doing in the constructor and destructor
Andrew_M 8:9d01fd4a63ad 4 Menu::Menu()
Andrew_M 8:9d01fd4a63ad 5 {
Andrew_M 8:9d01fd4a63ad 6
Andrew_M 8:9d01fd4a63ad 7 }
Andrew_M 8:9d01fd4a63ad 8
Andrew_M 8:9d01fd4a63ad 9 Menu::~Menu()
Andrew_M 8:9d01fd4a63ad 10 {
Andrew_M 8:9d01fd4a63ad 11
Andrew_M 8:9d01fd4a63ad 12 }
Andrew_M 8:9d01fd4a63ad 13
Andrew_M 8:9d01fd4a63ad 14 void Menu::init()
Andrew_M 8:9d01fd4a63ad 15 {
Andrew_M 9:fe86ddbf7799 16 _start = false;
Andrew_M 8:9d01fd4a63ad 17
Andrew_M 10:279d3775d52c 18 _mainSelection = 1;
Andrew_M 10:279d3775d52c 19
Andrew_M 10:279d3775d52c 20 _difficulty = 2;
Andrew_M 10:279d3775d52c 21
Andrew_M 10:279d3775d52c 22 _difSelection = _difficulty;
Andrew_M 10:279d3775d52c 23
Andrew_M 10:279d3775d52c 24 _level = 1;
Andrew_M 10:279d3775d52c 25
Andrew_M 10:279d3775d52c 26 _lvlSelection = _level;
Andrew_M 10:279d3775d52c 27
Andrew_M 10:279d3775d52c 28 _buttonPressed = false;
Andrew_M 10:279d3775d52c 29
Andrew_M 10:279d3775d52c 30 _menuScreen = "main";
Andrew_M 9:fe86ddbf7799 31 }
Andrew_M 8:9d01fd4a63ad 32
Andrew_M 9:fe86ddbf7799 33 void Menu::update()
Andrew_M 9:fe86ddbf7799 34 {
Andrew_M 10:279d3775d52c 35 //moves arrow around menus
Andrew_M 14:a57a40ff9430 36 moveArrow();
Andrew_M 14:a57a40ff9430 37
Andrew_M 14:a57a40ff9430 38 //selects item in menu
Andrew_M 14:a57a40ff9430 39 if (_buttonPressed) {
Andrew_M 14:a57a40ff9430 40 selectItem();
Andrew_M 14:a57a40ff9430 41 }
Andrew_M 14:a57a40ff9430 42 }
Andrew_M 14:a57a40ff9430 43
Andrew_M 14:a57a40ff9430 44 void Menu::moveArrow()
Andrew_M 14:a57a40ff9430 45 {
Andrew_M 10:279d3775d52c 46 if (_menuScreen == "main" ) {
Andrew_M 10:279d3775d52c 47 if (_d == N && _mainSelection > 1) { //checks the menu arrow location
Andrew_M 10:279d3775d52c 48 _mainSelection -= 1;
Andrew_M 10:279d3775d52c 49 } else if (_d == S && _mainSelection < 3) {
Andrew_M 10:279d3775d52c 50 _mainSelection += 1;
Andrew_M 10:279d3775d52c 51 }
Andrew_M 10:279d3775d52c 52 } else if (_menuScreen == "dif" ) {
Andrew_M 10:279d3775d52c 53 if (_d == N && _difSelection > 1) {
Andrew_M 10:279d3775d52c 54 _difSelection -= 1;
Andrew_M 11:b25874e7efe4 55 } else if (_d == S && _difSelection < 4) {
Andrew_M 10:279d3775d52c 56 _difSelection += 1;
Andrew_M 10:279d3775d52c 57 }
Andrew_M 10:279d3775d52c 58 } else if (_menuScreen == "lvl" ) {
Andrew_M 10:279d3775d52c 59 if (_d == N && _lvlSelection > 1) {
Andrew_M 10:279d3775d52c 60 _lvlSelection -= 1;
Andrew_M 10:279d3775d52c 61 } else if (_d == S && _lvlSelection < 3) {
Andrew_M 10:279d3775d52c 62 _lvlSelection += 1;
Andrew_M 10:279d3775d52c 63 }
Andrew_M 9:fe86ddbf7799 64 }
Andrew_M 14:a57a40ff9430 65 }
Andrew_M 8:9d01fd4a63ad 66
Andrew_M 14:a57a40ff9430 67 void Menu::selectItem()
Andrew_M 14:a57a40ff9430 68 {
Andrew_M 14:a57a40ff9430 69 if (_menuScreen == "main" ) {
Andrew_M 14:a57a40ff9430 70 if (_mainSelection == 1) {
Andrew_M 14:a57a40ff9430 71 _start = true;
Andrew_M 14:a57a40ff9430 72 } else if (_mainSelection == 2) {
Andrew_M 14:a57a40ff9430 73 _menuScreen = "lvl";
Andrew_M 14:a57a40ff9430 74 } else if (_mainSelection == 3) {
Andrew_M 14:a57a40ff9430 75 _menuScreen = "dif";
Andrew_M 14:a57a40ff9430 76 }
Andrew_M 14:a57a40ff9430 77 } else {
Andrew_M 14:a57a40ff9430 78 if (_menuScreen == "dif" ) {
Andrew_M 14:a57a40ff9430 79 if (_difSelection == 1) {
Andrew_M 14:a57a40ff9430 80 _difficulty = 1;
Andrew_M 14:a57a40ff9430 81 } else if (_difSelection == 2) {
Andrew_M 14:a57a40ff9430 82 _difficulty = 2;
Andrew_M 14:a57a40ff9430 83 } else if (_difSelection == 3) {
Andrew_M 14:a57a40ff9430 84 _difficulty = 3;
Andrew_M 14:a57a40ff9430 85 } else if (_difSelection == 4) {
Andrew_M 14:a57a40ff9430 86 _difficulty = 4;
Andrew_M 10:279d3775d52c 87 }
Andrew_M 14:a57a40ff9430 88 } else if (_menuScreen == "lvl" ) {
Andrew_M 14:a57a40ff9430 89 if (_lvlSelection == 1) {
Andrew_M 14:a57a40ff9430 90 _level = 1;
Andrew_M 14:a57a40ff9430 91 } else if (_lvlSelection == 2) {
Andrew_M 14:a57a40ff9430 92 _level = 2;
Andrew_M 14:a57a40ff9430 93 } else if (_lvlSelection == 3) {
Andrew_M 14:a57a40ff9430 94 _level = 3;
Andrew_M 10:279d3775d52c 95 }
Andrew_M 14:a57a40ff9430 96 }
Andrew_M 9:fe86ddbf7799 97
Andrew_M 14:a57a40ff9430 98 _menuScreen = "main";
Andrew_M 10:279d3775d52c 99
Andrew_M 10:279d3775d52c 100 }
Andrew_M 8:9d01fd4a63ad 101 }
Andrew_M 8:9d01fd4a63ad 102
Andrew_M 9:fe86ddbf7799 103 void Menu::read_input(Gamepad &pad)
Andrew_M 9:fe86ddbf7799 104 {
Andrew_M 10:279d3775d52c 105 _buttonPressed = false;
Andrew_M 10:279d3775d52c 106
Andrew_M 11:b25874e7efe4 107 if ( pad.check_event(Gamepad::START_PRESSED) || pad.check_event(Gamepad::A_PRESSED) || pad.check_event(Gamepad::B_PRESSED) || pad.check_event(Gamepad::X_PRESSED) || pad.check_event(Gamepad::Y_PRESSED) ||pad.check_event(Gamepad::BACK_PRESSED)) {
Andrew_M 10:279d3775d52c 108 _buttonPressed = true;
Andrew_M 13:81573be8fac6 109 pad.tone(750.0,0.1);
Andrew_M 10:279d3775d52c 110 wait(0.1);
Andrew_M 10:279d3775d52c 111 }
Andrew_M 12:d3eef5ea3f43 112 _d = pad.get_direction();
Andrew_M 10:279d3775d52c 113
Andrew_M 9:fe86ddbf7799 114 }
Andrew_M 9:fe86ddbf7799 115
Andrew_M 9:fe86ddbf7799 116 void Menu::draw(N5110 &lcd)
Andrew_M 9:fe86ddbf7799 117 {
Andrew_M 11:b25874e7efe4 118 lcd.drawRect(0,0,84,48,FILL_TRANSPARENT);
Andrew_M 10:279d3775d52c 119 if (_menuScreen == "main" ) {
Andrew_M 10:279d3775d52c 120
Andrew_M 11:b25874e7efe4 121 lcd.printString(" Start",2,1);
Andrew_M 11:b25874e7efe4 122 lcd.printString(" Level Select",2,2);
Andrew_M 11:b25874e7efe4 123 lcd.printString(" Difficulty",2,3);
Andrew_M 10:279d3775d52c 124
Andrew_M 11:b25874e7efe4 125 lcd.printString(">",2,_mainSelection);
Andrew_M 10:279d3775d52c 126
Andrew_M 12:d3eef5ea3f43 127 int _snake[8][40] = {
Andrew_M 12:d3eef5ea3f43 128 { 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},
Andrew_M 12:d3eef5ea3f43 129 { 0,0,0,0,0,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},
Andrew_M 12:d3eef5ea3f43 130 { 0,0,0,0,1,0,1,1,0,0,0,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},
Andrew_M 12:d3eef5ea3f43 131 { 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,0},
Andrew_M 12:d3eef5ea3f43 132 { 0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0},
Andrew_M 12:d3eef5ea3f43 133 { 0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0},
Andrew_M 12:d3eef5ea3f43 134 { 0,0,0,0,0,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},
Andrew_M 14:a57a40ff9430 135 { 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}
Andrew_M 12:d3eef5ea3f43 136
Andrew_M 12:d3eef5ea3f43 137 };
Andrew_M 14:a57a40ff9430 138
Andrew_M 12:d3eef5ea3f43 139 lcd.drawSprite(10,35,8,40,(int *)_snake);
Andrew_M 12:d3eef5ea3f43 140
Andrew_M 10:279d3775d52c 141 } else if ( _menuScreen == "dif") {
Andrew_M 9:fe86ddbf7799 142
Andrew_M 11:b25874e7efe4 143 lcd.printString(" Easy",2,1);
Andrew_M 11:b25874e7efe4 144 lcd.printString(" Normal",2,2);
Andrew_M 11:b25874e7efe4 145 lcd.printString(" Hard",2,3);
Andrew_M 11:b25874e7efe4 146 lcd.printString(" Adaptive",2,4);
Andrew_M 10:279d3775d52c 147
Andrew_M 11:b25874e7efe4 148 lcd.printString(">",2,_difSelection);
Andrew_M 10:279d3775d52c 149
Andrew_M 10:279d3775d52c 150 } else if ( _menuScreen == "lvl") {
Andrew_M 10:279d3775d52c 151
Andrew_M 11:b25874e7efe4 152 lcd.printString(" 1",2,1);
Andrew_M 11:b25874e7efe4 153 lcd.printString(" 2",2,2);
Andrew_M 11:b25874e7efe4 154 lcd.printString(" 3",2,3);
Andrew_M 10:279d3775d52c 155
Andrew_M 11:b25874e7efe4 156 lcd.printString(">",2,_lvlSelection);
Andrew_M 10:279d3775d52c 157 }
Andrew_M 9:fe86ddbf7799 158 }
Andrew_M 9:fe86ddbf7799 159
Andrew_M 9:fe86ddbf7799 160 bool Menu::started()
Andrew_M 9:fe86ddbf7799 161 {
Andrew_M 9:fe86ddbf7799 162 return _start;
Andrew_M 9:fe86ddbf7799 163 }
Andrew_M 10:279d3775d52c 164
Andrew_M 10:279d3775d52c 165 int Menu::getDif()
Andrew_M 10:279d3775d52c 166 {
Andrew_M 10:279d3775d52c 167 return _difficulty;
Andrew_M 10:279d3775d52c 168 }
Andrew_M 12:d3eef5ea3f43 169
Andrew_M 12:d3eef5ea3f43 170 int Menu::getLvl()
Andrew_M 12:d3eef5ea3f43 171 {
Andrew_M 12:d3eef5ea3f43 172 return _level;
Andrew_M 12:d3eef5ea3f43 173 }