Mortal Kombat Game ELEC2645

Dependencies:   mbed N5110 ShiftReg Joystick

Committer:
ozy
Date:
Sat Apr 17 12:35:18 2021 +0000
Revision:
2:1703eb2a68f8
Parent:
1:3bdadf6f6dbd
Child:
3:1d99b6ad4f9e
Code AFTER interrupts (not very efficient)

Who changed what in which revision?

UserRevisionLine numberNew 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 2:1703eb2a68f8 85 void Menu::options_menu(N5110 &lcd, InterruptIn &buttonA, InterruptIn &buttonB, InterruptIn &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 2:1703eb2a68f8 116 void Menu::menu_selection(N5110 &lcd, InterruptIn &buttonA, InterruptIn &buttonB, InterruptIn &buttonC, InterruptIn &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