Mortal Kombat Game ELEC2645
Dependencies: mbed N5110 ShiftReg Joystick
Menu.cpp@1:3bdadf6f6dbd, 2021-04-17 (annotated)
- Committer:
- ozy
- Date:
- Sat Apr 17 11:38:39 2021 +0000
- Revision:
- 1:3bdadf6f6dbd
- Parent:
- 0:99b49fd71085
- Child:
- 2:1703eb2a68f8
Code Before adding interrupts
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ozy | 0:99b49fd71085 | 1 | #include "Menu.h" |
ozy | 0:99b49fd71085 | 2 | #include "mbed.h" |
ozy | 0:99b49fd71085 | 3 | |
ozy | 0:99b49fd71085 | 4 | |
ozy | 0:99b49fd71085 | 5 | // This class is responsible for presenting the GUI of the game |
ozy | 0:99b49fd71085 | 6 | Menu::Menu() {} |
ozy | 0:99b49fd71085 | 7 | |
ozy | 0:99b49fd71085 | 8 | void Menu::draw_logo(N5110 &lcd, int x, int y) { |
ozy | 0:99b49fd71085 | 9 | // Mortal Kombat Logo |
ozy | 0:99b49fd71085 | 10 | const int logo[17][19] = { |
ozy | 0:99b49fd71085 | 11 | { 1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1 }, |
ozy | 0:99b49fd71085 | 12 | { 0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0 }, |
ozy | 0:99b49fd71085 | 13 | { 0,0,0,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0,0 }, |
ozy | 0:99b49fd71085 | 14 | { 0,0,0,0,1,0,1,1,1,1,1,0,0,0,0,1,0,0,0 }, |
ozy | 0:99b49fd71085 | 15 | { 0,0,0,1,0,1,1,0,0,1,1,1,1,0,0,0,1,0,0 }, |
ozy | 0:99b49fd71085 | 16 | { 0,0,1,0,1,1,1,0,1,1,1,1,1,1,0,0,0,1,0 }, |
ozy | 0:99b49fd71085 | 17 | { 0,0,1,0,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0 }, |
ozy | 0:99b49fd71085 | 18 | { 0,0,1,0,1,1,1,0,0,0,1,1,1,1,1,0,0,1,0 }, |
ozy | 0:99b49fd71085 | 19 | { 0,0,1,0,1,1,1,1,0,0,0,0,0,1,1,1,0,1,0 }, |
ozy | 0:99b49fd71085 | 20 | { 0,0,1,0,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0 }, |
ozy | 0:99b49fd71085 | 21 | { 0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,0 }, |
ozy | 0:99b49fd71085 | 22 | { 0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0 }, |
ozy | 0:99b49fd71085 | 23 | { 0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0 }, |
ozy | 0:99b49fd71085 | 24 | { 0,0,0,0,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0 }, |
ozy | 0:99b49fd71085 | 25 | { 0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0 }, |
ozy | 0:99b49fd71085 | 26 | { 0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0 }, |
ozy | 0:99b49fd71085 | 27 | { 1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1 }, |
ozy | 0:99b49fd71085 | 28 | }; |
ozy | 0:99b49fd71085 | 29 | // draw the MK Logo |
ozy | 0:99b49fd71085 | 30 | // (x, y, rows, cols, sprite) |
ozy | 0:99b49fd71085 | 31 | lcd.drawSprite(x,y,17,19,(int *)logo); |
ozy | 0:99b49fd71085 | 32 | } |
ozy | 0:99b49fd71085 | 33 | |
ozy | 0:99b49fd71085 | 34 | void Menu::main_menu(N5110 &lcd) { |
ozy | 0:99b49fd71085 | 35 | // Printing the first menu screen |
ozy | 0:99b49fd71085 | 36 | lcd.printString("MORTAL KOMBAT",3,1); |
ozy | 0:99b49fd71085 | 37 | lcd.printString("LEEDS EDITION",3,2); |
ozy | 0:99b49fd71085 | 38 | lcd.refresh(); |
ozy | 0:99b49fd71085 | 39 | draw_logo(lcd, 30, 28); // draw logo on (30,28) |
ozy | 0:99b49fd71085 | 40 | // draw menu frame using the whole dimensions of the screen |
ozy | 0:99b49fd71085 | 41 | lcd.drawRect(0,0,84,48,FILL_TRANSPARENT); |
ozy | 0:99b49fd71085 | 42 | lcd.refresh(); // refresh the LCD so the pixels appear |
ozy | 0:99b49fd71085 | 43 | } |
ozy | 0:99b49fd71085 | 44 | |
ozy | 0:99b49fd71085 | 45 | void Menu::created_by(N5110 &lcd) { |
ozy | 0:99b49fd71085 | 46 | lcd.clear(); |
ozy | 0:99b49fd71085 | 47 | lcd.drawRect(0,0,84,48,FILL_TRANSPARENT); |
ozy | 0:99b49fd71085 | 48 | lcd.printString("Created by:",2,1); |
ozy | 0:99b49fd71085 | 49 | lcd.printString("OSMAN",25,2); |
ozy | 0:99b49fd71085 | 50 | lcd.printString("FADL ALI",20,3); |
ozy | 0:99b49fd71085 | 51 | lcd.printString("201337691",18,4); |
ozy | 0:99b49fd71085 | 52 | lcd.refresh(); |
ozy | 0:99b49fd71085 | 53 | } |
ozy | 0:99b49fd71085 | 54 | void Menu::A_to_start(N5110 &lcd) { |
ozy | 0:99b49fd71085 | 55 | lcd.clear(); |
ozy | 0:99b49fd71085 | 56 | lcd.drawRect(0,0,84,48,FILL_TRANSPARENT); |
ozy | 0:99b49fd71085 | 57 | lcd.printString(" Press A ",15,2); |
ozy | 0:99b49fd71085 | 58 | lcd.printString(" to ",20,3); |
ozy | 0:99b49fd71085 | 59 | lcd.printString(" Start! ",15,4); |
ozy | 0:99b49fd71085 | 60 | lcd.refresh(); |
ozy | 0:99b49fd71085 | 61 | } |
ozy | 0:99b49fd71085 | 62 | |
ozy | 0:99b49fd71085 | 63 | void Menu::homescreen(N5110 &lcd) { |
ozy | 0:99b49fd71085 | 64 | lcd.clear(); |
ozy | 0:99b49fd71085 | 65 | lcd.printString(" Press Button ", 0, 0); |
ozy | 0:99b49fd71085 | 66 | lcd.printString(" to Select: ", 0, 1); |
ozy | 0:99b49fd71085 | 67 | lcd.printString(" A - Play", 0, 3); |
ozy | 0:99b49fd71085 | 68 | lcd.printString(" B - Tutorial", 0, 4); |
ozy | 0:99b49fd71085 | 69 | lcd.printString(" C - Options", 0, 5); |
ozy | 0:99b49fd71085 | 70 | lcd.refresh(); |
ozy | 0:99b49fd71085 | 71 | } |
ozy | 0:99b49fd71085 | 72 | |
ozy | 0:99b49fd71085 | 73 | void Menu::play(N5110 &lcd) { |
ozy | 1:3bdadf6f6dbd | 74 | lcd.clear(); |
ozy | 0:99b49fd71085 | 75 | lcd.printString("Play", 0, 0); |
ozy | 1:3bdadf6f6dbd | 76 | lcd.refresh(); |
ozy | 0:99b49fd71085 | 77 | } |
ozy | 0:99b49fd71085 | 78 | |
ozy | 0:99b49fd71085 | 79 | void Menu::tutorial(N5110 &lcd) { |
ozy | 1:3bdadf6f6dbd | 80 | lcd.clear(); |
ozy | 1:3bdadf6f6dbd | 81 | lcd.printString("Tutorial", 0, 0); // mention that to select in-game options, you can click the joystick? |
ozy | 1:3bdadf6f6dbd | 82 | lcd.refresh(); |
ozy | 1:3bdadf6f6dbd | 83 | } |
ozy | 1:3bdadf6f6dbd | 84 | |
ozy | 1:3bdadf6f6dbd | 85 | void Menu::options_menu(N5110 &lcd, DigitalIn &buttonA, DigitalIn &buttonB, DigitalIn &buttonC) { |
ozy | 1:3bdadf6f6dbd | 86 | lcd.clear(); |
ozy | 1:3bdadf6f6dbd | 87 | lcd.printString("Select Option: ", 0, 0); |
ozy | 1:3bdadf6f6dbd | 88 | lcd.printString("A-Sound ON/OFF", 0, 2); |
ozy | 1:3bdadf6f6dbd | 89 | lcd.printString("B-Brightness", 0, 3); |
ozy | 1:3bdadf6f6dbd | 90 | lcd.printString("C-Go back", 0, 4); |
ozy | 1:3bdadf6f6dbd | 91 | /* |
ozy | 1:3bdadf6f6dbd | 92 | while (1) { |
ozy | 1:3bdadf6f6dbd | 93 | if (buttonA.read() == 1) { |
ozy | 1:3bdadf6f6dbd | 94 | lcd.printString(" Sound turned ON!", 0, 3); // Note: add code for sound ON/OFF after making sound library! |
ozy | 1:3bdadf6f6dbd | 95 | break; |
ozy | 1:3bdadf6f6dbd | 96 | } |
ozy | 1:3bdadf6f6dbd | 97 | if (buttonB.read() == 1) { |
ozy | 1:3bdadf6f6dbd | 98 | lcd.printString("Set Brightness to: ", 0, 0); |
ozy | 1:3bdadf6f6dbd | 99 | lcd.printString(" A - High", 0, 3); |
ozy | 1:3bdadf6f6dbd | 100 | lcd.printString(" B - Medium", 0, 4); |
ozy | 1:3bdadf6f6dbd | 101 | lcd.printString(" C - Low", 0, 5); |
ozy | 1:3bdadf6f6dbd | 102 | if (buttonA.read() == 1) {lcd.setBrightness(0.2);} |
ozy | 1:3bdadf6f6dbd | 103 | if (buttonB.read() == 1) {lcd.setBrightness(0.5);} |
ozy | 1:3bdadf6f6dbd | 104 | if (buttonC.read() == 1) {lcd.setBrightness(0.8);} |
ozy | 1:3bdadf6f6dbd | 105 | break; |
ozy | 1:3bdadf6f6dbd | 106 | } |
ozy | 1:3bdadf6f6dbd | 107 | if (buttonC.read() == 1) { |
ozy | 1:3bdadf6f6dbd | 108 | homescreen(lcd); |
ozy | 1:3bdadf6f6dbd | 109 | break; |
ozy | 1:3bdadf6f6dbd | 110 | } |
ozy | 1:3bdadf6f6dbd | 111 | */ |
ozy | 1:3bdadf6f6dbd | 112 | |
ozy | 1:3bdadf6f6dbd | 113 | lcd.refresh(); |
ozy | 0:99b49fd71085 | 114 | } |
ozy | 0:99b49fd71085 | 115 | |
ozy | 1:3bdadf6f6dbd | 116 | void Menu::menu_selection(N5110 &lcd, DigitalIn &buttonA, DigitalIn &buttonB, DigitalIn &buttonC, DigitalIn &buttonD) { |
ozy | 1:3bdadf6f6dbd | 117 | // this function takes the user input and selects the relevant menu item |
ozy | 1:3bdadf6f6dbd | 118 | |
ozy | 1:3bdadf6f6dbd | 119 | while (1) { |
ozy | 1:3bdadf6f6dbd | 120 | /* |
ozy | 1:3bdadf6f6dbd | 121 | int user_input = get_user_input(int input, buttonA, buttonB, buttonC, buttonD); |
ozy | 1:3bdadf6f6dbd | 122 | if (user_input == 1) { |
ozy | 1:3bdadf6f6dbd | 123 | play(lcd); |
ozy | 1:3bdadf6f6dbd | 124 | break; |
ozy | 1:3bdadf6f6dbd | 125 | } |
ozy | 1:3bdadf6f6dbd | 126 | if (user_input == 2) { |
ozy | 1:3bdadf6f6dbd | 127 | tutorial(lcd); |
ozy | 1:3bdadf6f6dbd | 128 | break; |
ozy | 1:3bdadf6f6dbd | 129 | } |
ozy | 1:3bdadf6f6dbd | 130 | if (user_input == 3) { |
ozy | 1:3bdadf6f6dbd | 131 | options_menu(lcd, buttonA, buttonB, buttonC); |
ozy | 1:3bdadf6f6dbd | 132 | break; |
ozy | 1:3bdadf6f6dbd | 133 | } |
ozy | 1:3bdadf6f6dbd | 134 | if (user_input == 4) { |
ozy | 1:3bdadf6f6dbd | 135 | homescreen(lcd); |
ozy | 1:3bdadf6f6dbd | 136 | break; // Note for possible mistakes: address-of operator or int input in this function |
ozy | 1:3bdadf6f6dbd | 137 | } |
ozy | 1:3bdadf6f6dbd | 138 | */ |
ozy | 1:3bdadf6f6dbd | 139 | // working code |
ozy | 1:3bdadf6f6dbd | 140 | if (buttonA.read() == 1) { // we use if statement instead of while loop so that button input do not interfere with the next menu, only this one! |
ozy | 1:3bdadf6f6dbd | 141 | play(lcd); |
ozy | 1:3bdadf6f6dbd | 142 | break; |
ozy | 1:3bdadf6f6dbd | 143 | } |
ozy | 1:3bdadf6f6dbd | 144 | if (buttonB.read() == 1) { |
ozy | 1:3bdadf6f6dbd | 145 | tutorial(lcd); |
ozy | 1:3bdadf6f6dbd | 146 | break; |
ozy | 1:3bdadf6f6dbd | 147 | } |
ozy | 1:3bdadf6f6dbd | 148 | if (buttonC.read() == 1) { |
ozy | 1:3bdadf6f6dbd | 149 | options_menu(lcd, buttonA, buttonB, buttonC); |
ozy | 1:3bdadf6f6dbd | 150 | break; |
ozy | 1:3bdadf6f6dbd | 151 | } |
ozy | 1:3bdadf6f6dbd | 152 | if (buttonD.read() == 1) { // user can click button D to return to main menu |
ozy | 1:3bdadf6f6dbd | 153 | homescreen(lcd); |
ozy | 1:3bdadf6f6dbd | 154 | continue; |
ozy | 1:3bdadf6f6dbd | 155 | } |
ozy | 1:3bdadf6f6dbd | 156 | } |
ozy | 0:99b49fd71085 | 157 | } |
ozy | 1:3bdadf6f6dbd | 158 | |
ozy | 1:3bdadf6f6dbd | 159 | // ****************************************************************************************************************************** |
ozy | 0:99b49fd71085 | 160 | /* |
ozy | 1:3bdadf6f6dbd | 161 | // function - gets user input from buttons A B C D |
ozy | 1:3bdadf6f6dbd | 162 | int Menu::get_user_input(int &input, DigitalIn &buttonA, DigitalIn &buttonB, DigitalIn &buttonC, DigitalIn &buttonD) { |
ozy | 1:3bdadf6f6dbd | 163 | // we use address-of operator for int input to pass the actual reference for the input value not just a copy of it |
ozy | 1:3bdadf6f6dbd | 164 | while (1) { |
ozy | 1:3bdadf6f6dbd | 165 | if (buttonA.read() == 1) { |
ozy | 1:3bdadf6f6dbd | 166 | input = 1; |
ozy | 1:3bdadf6f6dbd | 167 | break; |
ozy | 1:3bdadf6f6dbd | 168 | } |
ozy | 1:3bdadf6f6dbd | 169 | if (buttonB.read() == 1) { |
ozy | 1:3bdadf6f6dbd | 170 | input = 2; |
ozy | 1:3bdadf6f6dbd | 171 | break; |
ozy | 1:3bdadf6f6dbd | 172 | } |
ozy | 1:3bdadf6f6dbd | 173 | if (buttonC.read() == 1) { |
ozy | 1:3bdadf6f6dbd | 174 | input = 3; |
ozy | 1:3bdadf6f6dbd | 175 | break; |
ozy | 1:3bdadf6f6dbd | 176 | } |
ozy | 1:3bdadf6f6dbd | 177 | if (buttonD.read() == 1) { |
ozy | 1:3bdadf6f6dbd | 178 | input = 4; |
ozy | 1:3bdadf6f6dbd | 179 | break; |
ozy | 1:3bdadf6f6dbd | 180 | } |
ozy | 1:3bdadf6f6dbd | 181 | } |
ozy | 1:3bdadf6f6dbd | 182 | printf("input is %i", input); |
ozy | 1:3bdadf6f6dbd | 183 | return input; |
ozy | 0:99b49fd71085 | 184 | } |
ozy | 0:99b49fd71085 | 185 | */ |
ozy | 1:3bdadf6f6dbd | 186 | |
ozy | 1:3bdadf6f6dbd | 187 |