Mortal Kombat Game ELEC2645

Dependencies:   mbed N5110 ShiftReg Joystick

Revision:
20:4ca04fd0965a
Parent:
3:1d99b6ad4f9e
Child:
21:fad1c9f010d1
--- a/Menu.cpp	Fri Apr 30 03:49:59 2021 +0000
+++ b/Menu.cpp	Fri May 07 16:58:36 2021 +0000
@@ -1,10 +1,41 @@
 #include "Menu.h"
 #include "mbed.h"
 
-
 // This class is responsible for presenting the GUI of the game
 Menu::Menu() {} 
 
+void Menu::menu_render(N5110 &lcd) {
+    main_menu(lcd);
+    wait(3.0f);
+    created_by(lcd);
+    wait(3.0f);
+    homescreen(lcd);
+    wait(3.0f);
+    lcd.refresh();
+}
+
+void Menu::homescreen_select(int user_input, N5110 &lcd, DigitalIn &buttonA, DigitalIn &buttonB, DigitalIn &buttonC, DigitalIn &buttonD) {
+    user_input = get_user_input(buttonA, buttonB, buttonC, buttonD);
+    switch(user_input) {
+        case 1:
+            play(lcd);
+            user_input = 0;
+            break;
+        case 2:
+            tutorial(lcd);
+            user_input = 0;
+            break;
+        case 3:
+            options_menu(lcd, buttonA, buttonB, buttonC, buttonD);
+            user_input = 0;
+            break;
+        default:
+            homescreen(lcd);
+            user_input = 0;
+            break;
+    }
+}
+
 void Menu::draw_logo(N5110 &lcd, int x, int y) {
     // Mortal Kombat Logo
     const int logo[17][19] =   {
@@ -82,106 +113,40 @@
     lcd.refresh();
 }
 
-void Menu::options_menu(N5110 &lcd, DigitalIn &buttonA, DigitalIn &buttonB, DigitalIn &buttonC) {
+void Menu::options_menu(N5110 &lcd, DigitalIn &buttonA, DigitalIn &buttonB, DigitalIn &buttonC, DigitalIn &buttonD) {
     lcd.clear();
     lcd.printString("Select Option: ", 0, 0);
     lcd.printString("A-Sound ON/OFF", 0, 2);
     lcd.printString("B-Brightness", 0, 3);
     lcd.printString("C-Go back", 0, 4);
-    /*
-    while (1) {
-        if (buttonA.read() == 1) {
-            lcd.printString(" Sound turned ON!", 0, 3); // Note: add code for sound ON/OFF after making sound library!
-            break;
-        }
-        if (buttonB.read() == 1) {
-            lcd.printString("Set Brightness to: ", 0, 0);
-            lcd.printString(" A - High", 0, 3);
-            lcd.printString(" B - Medium", 0, 4);
-            lcd.printString(" C - Low", 0, 5);
-            if (buttonA.read() == 1) {lcd.setBrightness(0.2);}
-            if (buttonB.read() == 1) {lcd.setBrightness(0.5);}
-            if (buttonC.read() == 1) {lcd.setBrightness(0.8);}
-            break;
-        }
-        if (buttonC.read() == 1) {
-            homescreen(lcd);
-            break;
-        }
-    */
     
     lcd.refresh();
 }
 
-void Menu::menu_selection(N5110 &lcd, DigitalIn &buttonA, DigitalIn &buttonB, DigitalIn &buttonC, DigitalIn &buttonD) {
-    // this function takes the user input and selects the relevant menu item
-    
-    while (1) {
-        /*
-        int user_input = get_user_input(int input, buttonA, buttonB, buttonC, buttonD);
-        if (user_input == 1) {
-            play(lcd);
-            break;
-        }
-        if (user_input == 2) {
-            tutorial(lcd);
-            break;
-        }
-        if (user_input == 3) {
-            options_menu(lcd, buttonA, buttonB, buttonC);
-            break;
-        }
-        if (user_input == 4) {
-            homescreen(lcd);
-            break;      // Note for possible mistakes: address-of operator or int input in this function  
-        }
-        */
-        // working code
-        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!
-            play(lcd);
-            break;
-        }
-        if (buttonB.read() == 1) {
-            tutorial(lcd);
-            break;
-        }
-        if (buttonC.read() == 1) {
-            options_menu(lcd, buttonA, buttonB, buttonC);
-            break;
-        }
-        if (buttonD.read() == 1) { // user can click button D to return to main menu
-            homescreen(lcd);
-            continue;
-        }
+int Menu::get_user_input(DigitalIn &buttonA, DigitalIn &buttonB, DigitalIn &buttonC, DigitalIn &buttonD) {
+    if (buttonA.read() == 1) {
+        user_input = 1;     // A = 1
+        printf("User input = %i\n", user_input);
+    }
+    else if (buttonB.read() == 1) {
+        user_input = 2;     // B = 2
+        printf("User input = %i\n", user_input);
     }
+    else if (buttonC.read() == 1) {
+        user_input = 3;     // C = 3
+        printf("User input = %i\n", user_input);
+    }
+    else if (buttonD.read() == 1) {
+        user_input = 4;     // D = 4
+        printf("User input = %i\n", user_input);
+    }
+    else {
+        user_input = 0;
+        printf("User input = %i\n", user_input);
+    }
+    return user_input;
 }
 
-// ******************************************************************************************************************************
-/*
-// function - gets user input from buttons A B C D
-int Menu::get_user_input(int &input, DigitalIn &buttonA, DigitalIn &buttonB, DigitalIn &buttonC, DigitalIn &buttonD) {
-    // we use address-of operator for int input to pass the actual reference for the input value not just a copy of it
-    while (1) {
-        if (buttonA.read() == 1) { 
-            input = 1;
-            break;
-        }
-        if (buttonB.read() == 1) {
-            input  = 2;
-            break;
-        }
-        if (buttonC.read() == 1) {
-            input  = 3;
-            break;
-        }
-        if (buttonD.read() == 1) {
-            input  = 4;
-            break;
-        }
-    }
-    printf("input is %i", input);
-    return input;
-}
-*/
 
 
+