Menu class used as basis for program; running the game and allowing the user to change the style and difficulty of the game via an interface.

Revision:
1:21b7a5edb9c2
Parent:
0:b32f6570a26d
Child:
2:917211a4551b
--- a/Menu.cpp	Sun Apr 02 13:13:29 2017 +0000
+++ b/Menu.cpp	Tue Apr 04 10:30:00 2017 +0000
@@ -1,11 +1,11 @@
 /*
-
-@file Menu.cpp
-
-(c) Max Houghton 02.14.17
-Roller Maze Project, ELEC2645, Univeristy of Leeds
-
-*/
+ 
+ @file Menu.cpp
+ 
+ (c) Max Houghton 02.14.17
+ Roller Maze Project, ELEC2645, Univeristy of Leeds
+ 
+ */
 
 #include "Menu.h"
 
@@ -21,106 +21,12 @@
     
 }
 
-void Menu::main()
+void Menu::main(N5110 &lcd, Gamepad &pad)
 {
     int selected = 0;
     
     while(1) {
         
-        // lcd.printString("Testing", 0, 2);
-        switch (selected) {
-                
-            case 1:
-                
-                lcd.clear();
-                lcd.printString(">Play game", 0, 0);
-                lcd.printString(" Game options", 0, 1);
-                lcd.printString(" LCD settings", 0, 2);
-                lcd.printString(" Sound", 0, 3);
-                
-                lcd.refresh();
-                
-                // either clicking joystick or pressing A selects function
-                if (pad.check_event(Gamepad::A_PRESSED) ||
-                    pad.check_event(Gamepad::JOY_PRESSED)){
-                    
-                    play(); // call the game function
-                }
-                
-                wait_ms(250);    // 1s propogation delay
-                
-                break;
-                
-            case 2:
-                
-                lcd.clear();
-                lcd.printString(" Play game", 0, 0);
-                lcd.printString(">Game options", 0, 1);
-                lcd.printString(" LCD settings", 0, 2);
-                lcd.printString(" Sound", 0, 3);
-                
-                lcd.refresh();
-                
-                
-                if (pad.check_event(Gamepad::A_PRESSED) ||
-                    pad.check_event(Gamepad::JOY_PRESSED)){
-                    
-                    options();
-                }
-                
-                wait_ms(250);    // 1s propogation delay
-                
-                break;
-                
-            case 3:
-                
-                lcd.clear();
-                lcd.printString(" Play game", 0, 0);
-                lcd.printString(" Game options", 0, 1);
-                lcd.printString(">LCD settings", 0, 2);
-                lcd.printString(" Sound", 0, 3);
-                
-                lcd.refresh();
-                
-                
-                if (pad.check_event(Gamepad::A_PRESSED) ||
-                    pad.check_event(Gamepad::JOY_PRESSED)){
-                    
-                    lcdSettings();
-                }
-                
-                wait_ms(250);    // 1s propogation delay
-                
-                break;
-                
-            case 4:
-                
-                lcd.clear();
-                lcd.printString(" Play game", 0, 0);
-                lcd.printString(" Game options", 0, 1);
-                lcd.printString(" LCD settings", 0, 2);
-                lcd.printString(">Sound", 0, 3);
-                
-                lcd.refresh();
-                
-                
-                if (pad.check_event(Gamepad::A_PRESSED) ||
-                    pad.check_event(Gamepad::JOY_PRESSED)){
-                    
-                    soundSettings();
-                }
-                
-                wait_ms(250);    // 1s propogation delay
-                
-                break;
-                
-            default:
-                
-                selected = 1;
-                
-                break;
-        }
-        
         char d = pad.get_direction();
         
         if ((d == NW) ||
@@ -137,19 +43,140 @@
             selected += 1;
         }
         
+        // lcd.printString("Testing", 0, 2);
+        switch (selected) {
+                
+            case 1:
+                
+                lcd.clear();
+                lcd.printString(">Play game", 0, 0);
+                lcd.printString(" Game options", 0, 1);
+                lcd.printString(" LCD settings", 0, 2);
+                lcd.printString(" Sound", 0, 3);
+                
+                lcd.refresh();
+                
+                // either clicking joystick or pressing A selects function
+                if  ((pad.check_event(Gamepad::A_PRESSED)     ||
+                      pad.check_event(Gamepad::JOY_PRESSED))  ||
+                     (d == E)) {
+                    
+                    lcd.clear();
+                    lcd.printString("Playing game", 0, 2);
+                    lcd.refresh();
+                    
+                    wait(2);
+                    
+                    // play(); // call the game function
+                }
+                
+                wait_ms(250);    // 250ms propogation delay
+                
+                break;
+                
+            case 2:
+                
+                lcd.clear();
+                lcd.printString(" Play game", 0, 0);
+                lcd.printString(">Game options", 0, 1);
+                lcd.printString(" LCD settings", 0, 2);
+                lcd.printString(" Sound", 0, 3);
+                
+                lcd.refresh();
+                
+                
+                if  ((pad.check_event(Gamepad::A_PRESSED)     ||
+                      pad.check_event(Gamepad::JOY_PRESSED))  ||
+                     (d == E)) {
+                    
+                    options(lcd, pad);
+                }
+                
+                wait_ms(250);    // 250ms propogation delay
+                
+                break;
+                
+            case 3:
+                
+                lcd.clear();
+                lcd.printString(" Play game", 0, 0);
+                lcd.printString(" Game options", 0, 1);
+                lcd.printString(">LCD settings", 0, 2);
+                lcd.printString(" Sound", 0, 3);
+                
+                lcd.refresh();
+                
+                
+                if  ((pad.check_event(Gamepad::A_PRESSED)     ||
+                      pad.check_event(Gamepad::JOY_PRESSED))  ||
+                     (d == E)) {
+                    
+                    lcdSettings(lcd, pad);
+                }
+                
+                wait_ms(250);    // 250ms propogation delay
+                
+                break;
+                
+            case 4:
+                
+                lcd.clear();
+                lcd.printString(" Play game", 0, 0);
+                lcd.printString(" Game options", 0, 1);
+                lcd.printString(" LCD settings", 0, 2);
+                lcd.printString(">Sound", 0, 3);
+                
+                lcd.refresh();
+                
+                
+                if  ((pad.check_event(Gamepad::A_PRESSED)     ||
+                      pad.check_event(Gamepad::JOY_PRESSED))  ||
+                     (d == E)) {
+                    
+                    soundSettings(lcd, pad);
+                }
+                
+                wait_ms(250);    // 250ms propogation delay
+                
+                break;
+                
+            default:
+                
+                selected = 1;
+                
+                break;
+        }
+        
         // printf("Joystick position = %c \n", d);
         // printf("Selected = %i \n", selected);
         
     }
 }
 
-void Menu::options()
+void Menu::options(N5110 &lcd, Gamepad &pad)
 {
-   int exit = 0;
+    int exit = 0;
     int selected = 0;
     
     while(exit == 0) {
         
+        // get direction of the joystick
+        char d = pad.get_direction();
+        
+        if ((d == NW) ||
+            (d == N)  ||
+            (d == NE)){
+            
+            selected -= 1;
+        }
+        
+        if ((d == SW) ||
+            (d == S)  ||
+            (d == SE)){
+            
+            selected += 1;
+        }
+        
         // printf("While loop 1 \n");
         // printf("Selected = %i \n", selected);
         switch (selected) {
@@ -163,10 +190,11 @@
                 lcd.printString(" Ball Colour", 0, 3);
                 lcd.refresh();
                 
-                if (pad.check_event(Gamepad::A_PRESSED) ||
-                    pad.check_event(Gamepad::JOY_PRESSED)){
+                if  ((pad.check_event(Gamepad::A_PRESSED)     ||
+                      pad.check_event(Gamepad::JOY_PRESSED))  ||
+                     (d == E)) {
                     
-                    difficultyOptions();
+                    difficultyOptions(lcd, pad);
                 }
                 
                 wait_ms(250);
@@ -183,10 +211,11 @@
                 lcd.refresh();
                 
                 // if second option selected
-                if (pad.check_event(Gamepad::A_PRESSED) ||
-                    pad.check_event(Gamepad::JOY_PRESSED)){
+                if  ((pad.check_event(Gamepad::A_PRESSED)     ||
+                      pad.check_event(Gamepad::JOY_PRESSED))  ||
+                     (d == E)) {
                     
-                    colourOptions();
+                    lcdColourOptions(lcd, pad);
                 }
                 
                 wait_ms(250);
@@ -200,6 +229,21 @@
                 break;
         }
         
+        if ((pad.check_event(Gamepad::BACK_PRESSED)) ||
+            (d == W)){
+            
+            exit = 1;
+        }
+    }
+}
+
+void Menu::lcdSettings(N5110 &lcd, Gamepad &pad)
+{
+    int exit = 0;
+    int selected = 0;
+    
+    while(exit == 0) {
+        
         char d = pad.get_direction();
         
         if ((d == NW) ||
@@ -216,30 +260,6 @@
             selected += 1;
         }
         
-        if (pad.check_event(Gamepad::Y_PRESSED)){
-            
-            selected -= 1;
-        }
-        
-        if (pad.check_event(Gamepad::X_PRESSED)){
-            
-            selected += 1;
-        }
-        
-        if (pad.check_event(Gamepad::BACK_PRESSED)){
-            
-            exit = 1;
-        }   
-    }
-}
-
-void lcdSettings()
-{
-   int exit = 0;
-    int selected = 0;
-    
-    while(exit == 0) {
-        
         // printf("While loop 1 \n");
         // printf("Selected = %i \n", selected);
         switch (selected) {
@@ -253,10 +273,12 @@
                 lcd.printString(" Invert Colour", 0, 3);
                 lcd.refresh();
                 
-                if (pad.check_event(Gamepad::A_PRESSED) ||
-                    pad.check_event(Gamepad::JOY_PRESSED)){
+                if  ((pad.check_event(Gamepad::A_PRESSED)     ||
+                      pad.check_event(Gamepad::JOY_PRESSED))  ||
+                     (d == E)) {
+
                     
-                    lcdBackgroundColour();
+                    lcdBackgroundColour(lcd, pad);
                 }
                 
                 wait_ms(250);
@@ -274,10 +296,12 @@
                 
                 
                 // if second option selected
-                if (pad.check_event(Gamepad::A_PRESSED) ||
-                    pad.check_event(Gamepad::JOY_PRESSED)){
+                if  ((pad.check_event(Gamepad::A_PRESSED)     ||
+                      pad.check_event(Gamepad::JOY_PRESSED))  ||
+                     (d == E)) {
+
                     
-                    lcdInverseColour();
+                    lcdInverseColour(lcd, pad);
                 }
                 
                 wait_ms(250);
@@ -291,6 +315,47 @@
                 break;
         }
         
+        if ((pad.check_event(Gamepad::BACK_PRESSED)) ||
+            (d == W)){
+            
+            exit = 1;
+        }
+        
+    }
+    
+    
+}
+
+void Menu::soundSettings(N5110 &lcd, Gamepad &pad)
+{
+    
+    int exit = 0;
+    // pad.tone(750.0,0.1);
+    
+    while (exit == 0){
+        
+        lcd.clear();
+        lcd.printString("Sound settings", 0, 2);
+        lcd.refresh();
+        
+        char d = pad.get_direction();
+        
+        if ((pad.check_event(Gamepad::BACK_PRESSED)) ||
+            (d == W)){
+            
+            exit = 1;
+        }
+    }
+    
+}
+
+void Menu::difficultyOptions(N5110 &lcd, Gamepad &pad)
+{
+    int selected = 0;
+    int exit = 0;
+    
+    while(exit == 0){
+        
         char d = pad.get_direction();
         
         if ((d == NW) ||
@@ -307,53 +372,6 @@
             selected += 1;
         }
         
-        if (pad.check_event(Gamepad::Y_PRESSED)){
-            
-            selected -= 1;
-        }
-        
-        if (pad.check_event(Gamepad::X_PRESSED)){
-            
-            selected += 1;
-        }
-        
-        if (pad.check_event(Gamepad::BACK_PRESSED)){
-            
-            exit = 1;
-        }
-        
-    }
- 
-    
-}
-
-void soundSettings()
-{
-    
-    int exit = 0;
-    // pad.tone(750.0,0.1);
-    
-    while (exit == 0){
-        
-        lcd.clear();
-        lcd.printString("Sound settings", 0, 2);
-        lcd.refresh();
-        
-        if(pad.check_event(Gamepad::BACK_PRESSED)){
-            
-            exit = 1;
-        }
-    }
-
-}
-
-void difficultyOptions()
-{
-    int selected = 0;
-    int exit = 0;
-    
-    while(exit == 0){
-        
         switch(selected){
                 
             case 1:
@@ -364,8 +382,11 @@
                 lcd.printString(" Hard", 0, 3);
                 lcd.refresh();
                 
-                if (pad.check_event(Gamepad::A_PRESSED) ||
-                    pad.check_event(Gamepad::JOY_PRESSED)){
+                wait_ms(250);   // 250ms propogation delay
+                
+                if  ((pad.check_event(Gamepad::A_PRESSED)     ||
+                      pad.check_event(Gamepad::JOY_PRESSED))  ||
+                     (d == E)) {
                     
                     // maze.mazeIndex = 0;
                     lcd.clear();
@@ -386,8 +407,12 @@
                 lcd.printString(">Hard", 0, 3);
                 lcd.refresh();
                 
-                if (pad.check_event(Gamepad::A_PRESSED) ||
-                    pad.check_event(Gamepad::JOY_PRESSED)){
+                wait_ms(250);   // 250ms propogation delay
+                
+                if  ((pad.check_event(Gamepad::A_PRESSED)     ||
+                      pad.check_event(Gamepad::JOY_PRESSED))  ||
+                     (d == E)) {
+
                     
                     // maze.mazeIndex = 1;
                     lcd.clear();
@@ -407,6 +432,25 @@
                 break;
                 
         }
+        
+        if ((pad.check_event(Gamepad::BACK_PRESSED)) ||
+            (d == W)){
+            
+            exit = 1;
+        }
+        
+    }
+    
+    
+}
+
+void Menu::lcdColourOptions(N5110 &lcd, Gamepad &pad)
+{
+    int selected = 0;
+    int exit = 0;
+    
+    while(exit == 0){
+        
         char d = pad.get_direction();
         
         if ((d == NW) ||
@@ -423,23 +467,6 @@
             selected += 1;
         }
         
-        
-        if (pad.check_event(Gamepad::BACK_PRESSED)){
-            
-            exit = 1;
-        }
-        
-    }
-
-    
-}
-
-void lcdColourOptions()
-{
-   int selected = 0;
-    int exit = 0;
-    while(exit == 0){
-        
         switch(selected){
                 
             case 1:
@@ -452,8 +479,11 @@
                 lcd.printString(" Solid", 0, 3);
                 lcd.refresh();
                 
-                if (pad.check_event(Gamepad::A_PRESSED) ||
-                    pad.check_event(Gamepad::JOY_PRESSED)){
+                wait_ms(250);   // 250ms propogation delay
+                
+                if  ((pad.check_event(Gamepad::A_PRESSED)     ||
+                       pad.check_event(Gamepad::JOY_PRESSED))  ||
+                      (d == E)) {
                     
                     // ball.ballColour = 0;
                     lcd.clear();
@@ -476,8 +506,12 @@
                 lcd.printString(">Solid", 0, 3);
                 lcd.refresh();
                 
-                if (pad.check_event(Gamepad::A_PRESSED) ||
-                    pad.check_event(Gamepad::JOY_PRESSED)){
+                wait_ms(250);   // 250ms propogation delay
+
+                
+                if  ((pad.check_event(Gamepad::A_PRESSED)     ||
+                      pad.check_event(Gamepad::JOY_PRESSED))  ||
+                     (d == E)) {
                     
                     // ball.ballColour = 1;
                     lcd.clear();
@@ -497,32 +531,17 @@
                 break;
         }
         
-        char d = pad.get_direction();
-        
-        if ((d == NW) ||
-            (d == N)  ||
-            (d == NE)){
-            
-            selected -= 1;
-        }
-        
-        if ((d == SW) ||
-            (d == S)  ||
-            (d == SE)){
-            
-            selected += 1;
-        }
-        
-        if (pad.check_event(Gamepad::BACK_PRESSED)){
+        if ((pad.check_event(Gamepad::BACK_PRESSED)) ||
+            (d == W)){
             
             exit = 1;
         }
     }
-
+    
     
 }
 
-void lcdInverseColour()
+void Menu::lcdInverseColour(N5110 &lcd, Gamepad &pad)
 {
     int exit = 0;
     
@@ -549,17 +568,21 @@
         
         lcd.refresh();
         
-        if (pad.check_event(Gamepad::BACK_PRESSED)){
+        char d = pad.get_direction();
+        
+        if ((pad.check_event(Gamepad::BACK_PRESSED)) ||
+            (d == W)){
             
             exit = 1;
         }
     }
-
+    
     
 }
 
-void lcdBackgroundColour()
+void Menu::lcdBackgroundColour(N5110 &lcd, Gamepad &pad)
 {
+    // method to change the brightness of the LED backlight
     int exit = 0;
     
     while (exit == 0) {
@@ -582,7 +605,10 @@
         
         wait_ms(10);
         
-        if (pad.check_event(Gamepad::BACK_PRESSED)){
+        char d = pad.get_direction();
+        
+        if ((pad.check_event(Gamepad::BACK_PRESSED)) ||
+            (d == W)){
             
             exit = 1;
         }
@@ -590,3 +616,4 @@
     }
 }
 
+