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:
- 2:917211a4551b
- Parent:
- 1:21b7a5edb9c2
- Child:
- 3:a79daa7c2b55
diff -r 21b7a5edb9c2 -r 917211a4551b Menu.cpp --- 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); + } +} + + + +