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:
2:917211a4551b
Parent:
1:21b7a5edb9c2
Child:
3:a79daa7c2b55
--- a/Menu.cpp	Tue Apr 04 10:30:00 2017 +0000
+++ b/Menu.cpp	Fri Apr 07 10:28:49 2017 +0000
@@ -21,7 +21,28 @@
     
 }
 
-void Menu::main(N5110 &lcd, Gamepad &pad)
+void Menu::init(int mazeIndex)
+{
+    _mazeIndex = mazeIndex;
+    
+    _engine.init(_mazeIndex, 4, 4, 4);
+    
+    /*
+    if ((_mazeIndex == 0) ||
+        (_mazeIndex == 1)) {
+        
+        _engine.init(_mazeIndex, 4, 4, 4);
+    }
+    
+    else {
+        _engine.init(_mazeIndex, 2, 2, 2);
+    }
+     */
+}
+
+/// MAIN MENU METHOD ///
+
+void Menu::main(N5110 &lcd, Gamepad &pad, FXOS8700CQ &device)
 {
     int selected = 0;
     
@@ -61,13 +82,7 @@
                       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
+                    playGame(_mazeIndex, lcd, pad, device); // call the game function
                 }
                 
                 wait_ms(250);    // 250ms propogation delay
@@ -153,6 +168,187 @@
     }
 }
 
+/// INTRO LOOP ///
+
+void intro(N5110 &lcd, Gamepad &pad)
+{
+    
+    // printf("intro started \n");
+    while (pad.check_event(Gamepad::START_PRESSED) == false){
+        
+        // animation sequence
+        // lcd.drawCircle(x, y, radius, type);
+        
+        // DRAW FIRST SEQUENCE OF CIRLCES MOVING ACROSS LCD //
+        for (int i = 0; i < 61; i++){
+            
+            lcd.clear();
+            lcd.printString("  Welcome to  ", 0, 1);
+            lcd.printString("  Roller Maze ", 0, 2);
+            // printf("loop \n");
+            lcd.drawLine(56, 40, 68, 40, FILL_BLACK);
+            lcd.drawLine(56, 41, 68, 41, FILL_BLACK);
+            lcd.refresh();
+            
+            if (i < 57){
+                lcd.drawCircle(i, 36, 4, FILL_BLACK);
+                lcd.refresh();
+                wait_ms(50);
+                
+            }
+            
+            else if (i == 57){
+                
+                lcd.clear();
+                lcd.printString("  Welcome to  ", 0, 1);
+                lcd.printString("  Roller Maze ", 0, 2);
+                // printf("loop \n");
+                lcd.drawLine(56, 40, 68, 40, FILL_BLACK);
+                lcd.drawLine(56, 41, 68, 41, FILL_BLACK);
+                lcd.drawCircle(i, 37, 4, FILL_BLACK);
+                
+                wait_ms(25);
+                
+                for (int c = 55; c < 68; c++){
+                    for (int d = 42; d < 47; d++){
+                        
+                        lcd.clearPixel(c, 42);
+                        lcd.clearPixel(c, 43);
+                        lcd.clearPixel(c, 44);
+                        lcd.clearPixel(c, 45);
+                        lcd.clearPixel(c, 46);
+                        lcd.clearPixel(c, 47);
+                        lcd.refresh();
+                        
+                    }
+                }
+                
+                lcd.refresh();
+            }
+            else if (i == 58){
+                
+                lcd.clear();
+                lcd.printString("  Welcome to  ", 0, 1);
+                lcd.printString("  Roller Maze ", 0, 2);
+                // printf("loop \n");
+                lcd.drawLine(56, 40, 68, 40, FILL_BLACK);
+                lcd.drawLine(56, 41, 68, 41, FILL_BLACK);
+                lcd.drawCircle(i, 38, 4, FILL_BLACK);
+                
+                wait_ms(25);
+                
+                for (int c = 55; c < 68; c++){
+                    for (int d = 42; d < 47; d++){
+                        
+                        lcd.clearPixel(c, 42);
+                        lcd.clearPixel(c, 43);
+                        lcd.clearPixel(c, 44);
+                        lcd.clearPixel(c, 45);
+                        lcd.clearPixel(c, 46);
+                        lcd.clearPixel(c, 47);
+                        lcd.refresh();
+                        
+                    }
+                }
+                
+                lcd.refresh();
+                
+            }
+            else if (i == 59){
+                
+                lcd.clear();
+                lcd.printString("  Welcome to  ", 0, 1);
+                lcd.printString("  Roller Maze ", 0, 2);
+                // printf("loop \n");
+                lcd.drawLine(56, 40, 68, 40, FILL_BLACK);
+                lcd.drawLine(56, 41, 68, 41, FILL_BLACK);
+                lcd.drawCircle(i, 39, 4, FILL_BLACK);
+                
+                wait_ms(25);
+                
+                for (int c = 55; c < 68; c++){
+                    for (int d = 42; d < 47; d++){
+                        
+                        lcd.clearPixel(c, 42);
+                        lcd.clearPixel(c, 43);
+                        lcd.clearPixel(c, 44);
+                        lcd.clearPixel(c, 45);
+                        lcd.clearPixel(c, 46);
+                        lcd.clearPixel(c, 47);
+                        lcd.refresh();
+                        
+                    }
+                }
+                
+                lcd.refresh();
+                
+            }
+            else {
+                
+                for (int j = 40; j < 48; j++){
+                    
+                    lcd.clear();
+                    lcd.printString("  Welcome to  ", 0, 1);
+                    lcd.printString("  Roller Maze ", 0, 2);
+                    // printf("loop \n");
+                    lcd.drawLine(56, 40, 68, 40, FILL_BLACK);
+                    lcd.drawLine(56, 41, 68, 41, FILL_BLACK);
+                    lcd.drawCircle(i, j, 4, FILL_BLACK);
+                    
+                    wait_ms(125);
+                    
+                    for (int c = 55; c < 68; c++){
+                        for (int d = 42; d < 47; d++){
+                            
+                            lcd.clearPixel(c, 42);
+                            lcd.clearPixel(c, 43);
+                            lcd.clearPixel(c, 44);
+                            lcd.clearPixel(c, 45);
+                            lcd.clearPixel(c, 46);
+                            lcd.clearPixel(c, 47);
+                        }
+                    }
+                    
+                }
+                
+                lcd.refresh();
+            }
+            
+            // printf("%i \n", i);
+        }
+    }
+    
+    
+}
+
+/// GAME LOOP ///
+void playGame(N5110 &lcd, Gamepad &pad, FXOS8700CQ &device)
+{
+    int exit = 0;
+    
+    while (exit == 0){
+        
+        _engine.readInput(pad, device);
+        _engine.update(pad);
+        // rendering screen
+        lcd.clear();
+        _engine.draw(lcd);
+        lcd.refresh();
+        
+        wait_ms(100);
+        
+        // get direction of the joystick
+        char d = pad.get_direction();
+        if ((pad.check_event(Gamepad::BACK_PRESSED)) ||
+            (d == W)){
+            
+            exit = 1;
+        }
+    }
+}
+
+/// MENU FUNCTIONS ///
+
 void Menu::options(N5110 &lcd, Gamepad &pad)
 {
     int exit = 0;
@@ -276,7 +472,7 @@
                 if  ((pad.check_event(Gamepad::A_PRESSED)     ||
                       pad.check_event(Gamepad::JOY_PRESSED))  ||
                      (d == E)) {
-
+                    
                     
                     lcdBackgroundColour(lcd, pad);
                 }
@@ -299,7 +495,7 @@
                 if  ((pad.check_event(Gamepad::A_PRESSED)     ||
                       pad.check_event(Gamepad::JOY_PRESSED))  ||
                      (d == E)) {
-
+                    
                     
                     lcdInverseColour(lcd, pad);
                 }
@@ -349,6 +545,91 @@
     
 }
 
+void Menu::controlOptions(N5110 &lcd, Gamepad &pad)
+{
+    int selected = 0;
+    int exit = 0;
+    
+    while (exit == 0){
+        char d = pad.get_direction();
+        
+        if (d == W){
+            
+            selected -= 1;
+        }
+        
+        if (d == E){
+            
+            selected += 1;
+        }
+        
+        switch(selected){
+                
+            case 1:
+                
+                while (selected == 0){
+                    
+                    lcd.clear();
+                    lcd.printString("Control: ", 0, 0);
+                    lcd.printString("   Joystick", 0, 2);
+                    
+                    lcd.refresh();
+                    wait_ms(250);   // 250ms propogation delay
+                    
+                    if (pad.check_event(Gamepad::A_PRESSED)||
+                        pad.check_event(Gamepad::JOY_PRESSED)){
+                        
+                        CONTROL = true;
+                    }
+                    
+                    break;
+                    
+                }
+                
+                
+            case 2:
+                
+                lcd.clear();
+                lcd.printString("Difficulty: ", 0, 0);
+                lcd.printString(" Easy", 0, 2);
+                lcd.printString(">Hard", 0, 3);
+                lcd.refresh();
+                
+                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();
+                    lcd.printString("Hard mode", 0, 1);
+                    lcd.refresh();
+                    wait(2);
+                    
+                    exit = 1;
+                }
+                
+                break;
+                
+            default:
+                
+                selected = 1;
+                
+                break;
+                
+        }
+        
+        if (pad.check_event(Gamepad::BACK_PRESSED)){
+            
+            exit = 1;
+        }
+        
+    }
+}
+
+
 void Menu::difficultyOptions(N5110 &lcd, Gamepad &pad)
 {
     int selected = 0;
@@ -388,7 +669,8 @@
                       pad.check_event(Gamepad::JOY_PRESSED))  ||
                      (d == E)) {
                     
-                    // maze.mazeIndex = 0;
+                    _mazeIndex = 0;
+                    
                     lcd.clear();
                     lcd.printString("Easy mode", 0, 1);
                     lcd.refresh();
@@ -412,7 +694,8 @@
                 if  ((pad.check_event(Gamepad::A_PRESSED)     ||
                       pad.check_event(Gamepad::JOY_PRESSED))  ||
                      (d == E)) {
-
+                    
+                    _mazeIndex = 1;
                     
                     // maze.mazeIndex = 1;
                     lcd.clear();
@@ -475,19 +758,19 @@
                 
                 lcd.clear();
                 lcd.printString("Ball colour: ", 0, 0);
-                lcd.printString(">Transparent", 0, 2);
+                lcd.printString(">Outline", 0, 2);
                 lcd.printString(" Solid", 0, 3);
                 lcd.refresh();
                 
                 wait_ms(250);   // 250ms propogation delay
                 
                 if  ((pad.check_event(Gamepad::A_PRESSED)     ||
-                       pad.check_event(Gamepad::JOY_PRESSED))  ||
-                      (d == E)) {
+                      pad.check_event(Gamepad::JOY_PRESSED))  ||
+                     (d == E)) {
                     
                     // ball.ballColour = 0;
                     lcd.clear();
-                    lcd.printString("Transparent", 0, 1);
+                    lcd.printString("Outline", 0, 1);
                     lcd.refresh();
                     wait(2);
                     
@@ -502,12 +785,12 @@
                 
                 lcd.clear();
                 lcd.printString("Ball colour: ", 0, 0);
-                lcd.printString(" Transparent", 0, 2);
+                lcd.printString(" Outline", 0, 2);
                 lcd.printString(">Solid", 0, 3);
                 lcd.refresh();
                 
                 wait_ms(250);   // 250ms propogation delay
-
+                
                 
                 if  ((pad.check_event(Gamepad::A_PRESSED)     ||
                       pad.check_event(Gamepad::JOY_PRESSED))  ||
@@ -616,4 +899,66 @@
     }
 }
 
+void Menu::animateJoystick(N5110 &lcd)
+{
+    drawVerticalJoystick(lcd);
+    
+}
 
+
+void Menu::drawVerticalJoystick(N5110 &lcd)
+{
+    /* Drawing a vertical joystick image
+     
+     33             ####
+     34         ############
+     35       ################
+     36              ##
+     37              ##
+     38           ########
+     39       ################
+     40    ######################
+     41   ########################
+     42  ##########################
+     43  ##########################
+     44  23456789012345678901234567
+     3       4         5
+     
+     */
+    
+    for (int i = 32; i < 58; i++){
+        lcd.setPixel(i, 43);
+        lcd.setPixel(i, 42);
+    }
+    for (int i = 33; i < 57; i++){
+        lcd.setPixel(i, 41);
+    }
+    for (int i = 34; i < 56; i++){
+        lcd.setPixel(i, 40);
+    }
+    for (int i = 37; i < 54; i++){
+        lcd.setPixel(i, 39);
+    }
+    for (int i = 41; i < 49; i++){
+        lcd.setPixel(i, 38);
+    }
+    
+    lcd.setPixel(44, 37);
+    lcd.setPixel(45, 37);
+    lcd.setPixel(44, 36);
+    lcd.setPixel(45, 36);
+    
+    for (int i = 37; i < 54; i++){
+        lcd.setPixel(i, 35);
+    }
+    for (int i = 39; i < 52; i++){
+        lcd.setPixel(i, 34);
+    }
+    for (int i = 43; i < 47; i++){
+        lcd.setPixel(i, 33);
+    }
+}
+
+
+
+