Max Houghton
/
MazeGame_el15mh
el15mh 200929957
Diff: main.cpp
- Revision:
- 0:d7701c5c20e6
- Child:
- 1:8ce2586b5965
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Mar 30 12:20:02 2017 +0000 @@ -0,0 +1,440 @@ +#include "mbed.h" +#include "N5110.h" +#include "Gamepad.h" + +// CREATE OBJECTS // +N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); +Gamepad pad; + +// FUNCTION PROTOTYPES // +void init(); +void play(); +void menu(); +void options(); +void lcdSettings(); +void soundSettings(); +void drawBox(); + +int main() +{ + init(); // initialise devices + + while(1){ + + menu(); + + } +} + +void init() +{ + lcd.init(); + pad.init(); +} + +void play() +{ + int exit = 0; + + while(exit == 0){ + + // coordinates for centre of lcd + float x = 41.0; + float y = 23.0; + + lcd.clear(); + + double size = pad.read_pot() * 10.0; + + if (pad.check_event(Gamepad::A_PRESSED)){ + pad.leds_on(); + } + if (pad.check_event(Gamepad::B_PRESSED)){ + pad.leds_off(); + } + + // check four sides of ball (+x, -x, +y, -y) + float leftSide = x - size; + float rightSide = x + size; + float topSide = y - size; + float bottomSide = y + size; + + // default values for bool values are true + bool MOVE_X = true; + bool MOVE_Y = true; + + if (leftSide == 1) { + MOVE_X = false; // only set bool values false if circle on the edge + } + + if (rightSide == 82) { + MOVE_X = false; + } + + if (topSide == 1) { + MOVE_Y = false; + } + + if (bottomSide == 46){ + MOVE_Y = false; + } + + drawBox(); + lcd.drawCircle(x, y, size, FILL_TRANSPARENT); + lcd.refresh(); + + Vector2D position = pad.get_mapped_coord(); + + if (MOVE_X == true){ + x += position.x; + } + if (MOVE_Y == true){ + y -= position.y; + } + + // printf("x = %f, y = %f \n", position.x, position.y); + // printf("ball X = %f, ball Y = %f \n\n", x, y); + + wait_ms(20); + + if (pad.check_event(Gamepad::BACK_PRESSED)){ + + exit = 1; + } + } +} + +void drawBox() +{ + for (int i = 0; i < WIDTH; i++){ + lcd.setPixel(i, 0); + lcd.setPixel(i, HEIGHT - 1); + } + + for (int j = 0; j < HEIGHT; j++){ + lcd.setPixel(0, j); + lcd.setPixel(WIDTH - 1, j); + } + + lcd.refresh(); +} + + +void menu() +{ + 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 = 0; + + break; + } + + // menuSelector(selector); + + char d = pad.get_direction(); + + if ((d == NW) || + (d == N) || + (d == NE)){ + + selected -= 1; + } + + if ((d == SW) || + (d == S) || + (d == SE)){ + + selected += 1; + } + + // printf("Joystick position = %c \n", d); + // printf("Selected = %i \n", selected); + + } +} + +void options() +{ + int selected = 0; + int exit = 0; + + while(exit == 0){ + + int back = 0; + + switch (selected) { + + case 1: + + lcd.clear(); + // displays options page with indicator on first + lcd.printString("Game Options:", 0, 0); + lcd.printString(">Difficulty", 0, 2); + lcd.printString(" Ball Colour", 0, 3); + lcd.refresh(); + + while (back == 0){ + + // if first option selected + if (pad.check_event(Gamepad::A_PRESSED) || + pad.check_event(Gamepad::JOY_PRESSED)){ + + switch(selected){ + + case 1: + + lcd.clear(); + lcd.printString("Difficulty: ", 0, 0); + lcd.printString(">Easy", 0, 2); + lcd.printString(" Hard", 0, 3); + lcd.refresh(); + + if (pad.check_event(Gamepad::A_PRESSED) || + pad.check_event(Gamepad::JOY_PRESSED)){ + + // maze.mazeIndex = 0; + } + + wait_ms(250); + + break; + + case 2: + + lcd.clear(); + lcd.printString("Difficulty: ", 0, 0); + lcd.printString(" Easy", 0, 2); + lcd.printString(">Hard", 0, 3); + lcd.refresh(); + + if (pad.check_event(Gamepad::A_PRESSED) || + pad.check_event(Gamepad::JOY_PRESSED)){ + + // maze.mazeIndex = 1; + lcd.printString("Hard selected", 0, 1); + lcd.refresh(); + } + + wait_ms(250); + + break; + + default: + + selected = 0; + + break; + + } + } + + if (pad.check_event(Gamepad::BACK_PRESSED)){ + + back = 1; + } + } + + wait(1); // 1s propogation delay + + case 2: + + lcd.clear(); + // displays options page with indicator on second + lcd.printString("Game Options:", 0, 0); + lcd.printString(" Difficulty", 0, 2); + lcd.printString(">Ball Colour", 0, 3); + lcd.refresh(); + + while (back == 0){ + + // if second option selected + if (pad.check_event(Gamepad::A_PRESSED) || + pad.check_event(Gamepad::JOY_PRESSED)){ + + switch (selected){ + + case 1: + + lcd.clear(); + lcd.printString("Ball colour: ", 0, 0); + lcd.printString(">Transparent", 0, 2); + lcd.printString(" Solid", 0, 3); + lcd.refresh(); + + if (pad.check_event(Gamepad::A_PRESSED) || + pad.check_event(Gamepad::JOY_PRESSED)){ + + // ball.ballColour = 0; + lcd.clear(); + lcd.printString("Transparent", 0, 1); + lcd.refresh(); + + wait(2); + } + + break; + + case 2: + + lcd.printString("Ball colour: ", 0, 0); + lcd.printString(" Transparent", 0, 2); + lcd.printString(">Solid", 0, 3); + lcd.refresh(); + + if (pad.check_event(Gamepad::A_PRESSED) || + pad.check_event(Gamepad::JOY_PRESSED)){ + + // ball.ballColour = 1; + lcd.clear(); + lcd.printString("Solid", 0, 1); + lcd.refresh(); + + wait(2); + } + + break; + + default: + + selected = 0; + break; + } + + if (pad.check_event(Gamepad::BACK_PRESSED)){ + + back = 1; + } + } + + wait(1); // 1s propogation delay + + } + + if (pad.check_event(Gamepad::BACK_PRESSED)){ + + exit = 1; + } + } + } +} + + +void soundSettings() +{ + pad.tone(750.0,0.1); + lcd.clear(); + lcd.printString("Sound settings", 0, 2); + lcd.refresh(); + + wait(2); +} + +void lcdSettings() +{ + int exit = 0; + + while(exit == 0){ + + lcd.clear(); + lcd.printString("LCD Settings", 0, 2); + lcd.refresh(); + + if(pad.check_event(Gamepad::BACK_PRESSED)){ + + exit = 1; + } + } +} +