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.
Diff: Menu.cpp
- Revision:
- 1:21b7a5edb9c2
- Parent:
- 0:b32f6570a26d
- Child:
- 2:917211a4551b
diff -r b32f6570a26d -r 21b7a5edb9c2 Menu.cpp --- 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 @@ } } +