![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Adam Baker 201166301
Dependencies: mbed Gamepad N5110
Diff: main.cpp
- Revision:
- 36:6f452777b9ce
- Parent:
- 34:911d7d05a8d2
- Child:
- 37:23b6312c8315
--- a/main.cpp Fri May 03 12:30:08 2019 +0000 +++ b/main.cpp Sun May 05 14:58:20 2019 +0000 @@ -5,27 +5,30 @@ #include "Levels.h" #include "Animation.h" #include "BlockheadEngine.h" +#include "Menu.h" N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); Gamepad pad; BlockheadEngine blockhead; Ticker ticker; - +Menu menu; volatile int timer_flag = 0; void timer_isr(); void init(); + void main_menu(N5110 &lcd, Gamepad &pad); -void print_main_menu(N5110 &lcd); -int user_input(Gamepad &pad); -void select_main_menu_item(N5110 &lcd, Gamepad &pad, int input); +int select_menu_item(Gamepad &pad, N5110 &lcd); +void go_to_main_menu_item(N5110 &lcd, Gamepad &pad, int input); void menu_playgame(N5110 &lcd, Gamepad &pad); -void menu_setcontrast(N5110 &lcd, Gamepad &pad); +void menu_highscore(N5110 &lcd, Gamepad &pad); +void menu_settings(N5110 &lcd, Gamepad &pad); +void menu_quit(N5110 &lcd, Gamepad &pad); void select_continue_menu_item(N5110 &lcd, Gamepad &pad, int input); -void print_continue_menu(N5110 &lcd); +void print_continue_menu(N5110 &lcd); // void menu_continue(N5110 &lcd, Gamepad &pad); @@ -35,7 +38,7 @@ int fps = 6; //6 init(); ticker.attach(&timer_isr,1.0f/fps); - + lcd.setContrast(0.55); main_menu(lcd, pad); @@ -45,60 +48,50 @@ void timer_isr() { - timer_flag = 1; // set flag in ISR + timer_flag = 1; // set flag in ISR } void init() { - pad.init(); - lcd.init(); + pad.init(); //intialise Gamepad class variables + lcd.init(); + menu.init(); //intialise N5110 class variables } void main_menu(N5110 &lcd, Gamepad &pad) { - blockhead.init(); - - print_main_menu(lcd); - int input = user_input(pad); - select_main_menu_item(lcd, pad, input); -} - -void print_main_menu(N5110 &lcd) -{ - lcd.clear(); - - lcd.printString("Menu",0,0); - lcd.printString("A for game!",0,1); - lcd.printString("B for contrast",0,2); - lcd.refresh(); - + blockhead.init(); //intialise blockhead engine variables for new game + //intialse menu variables + int input = select_menu_item(pad, lcd); //reads input and prints the main menu + go_to_main_menu_item(lcd, pad, input); //peforms what ever input is chosen } -int user_input(Gamepad &pad) -{ - int input = 0; + - do { - if (pad.check_event(Gamepad::A_PRESSED)) { - input = 1; - } else if (pad.check_event(Gamepad::B_PRESSED)) { - input = 2; - } - } while (input == 0); +int select_menu_item(Gamepad &pad, N5110 &lcd) +{ + int input = 0; + do { //ADD TRICKR AND ANIMATION + input = menu.select_input(pad, lcd); //prints menu and toggles cursor depending on input, + } while (input == 0); //repeats untill an input is chosen return input; } -void select_main_menu_item(N5110 &lcd, Gamepad &pad, int input) +void go_to_main_menu_item(N5110 &lcd, Gamepad &pad, int input) { - switch (input) { + switch (input) { //depending on input, performes following menu items case 1: menu_playgame(lcd, pad); break; case 2: - menu_setcontrast(lcd, pad); + menu_highscore(lcd, pad); break; + case 3: + menu_settings(lcd, pad); + case 4: + menu_quit(lcd, pad); default: exit(1); break; @@ -109,45 +102,44 @@ { int gameover = 0; - // blockhead.init(); - do { - - if (timer_flag == true) { + if (timer_flag == true) { //only run when timer flag is true (6fps) - timer_flag = 0; // if it has, clear the flag - - lcd.clear(); + timer_flag = 0; //if it has, clear the flag - gameover = blockhead.playgame(lcd, pad); - - lcd.refresh(); + gameover = blockhead.playgame(lcd, pad); //run game untill gameover } else { - sleep(); + sleep(); //sleep when timer_flag not true in order to conserve energy } } while (gameover == 0); - menu_continue(lcd, pad); + menu_continue(lcd, pad); //once gameover occurs, go to continue menu (LETS TRY GET LIVES INVOLVED MAYBE!!!))) } -void menu_setcontrast(N5110 &lcd, Gamepad &pad) +void menu_highscore(N5110 &lcd, Gamepad &pad) { int goback = 0; - + do { if (timer_flag == true) { timer_flag = 0; + int highscore = blockhead.highscore(); + lcd.clear(); - lcd.printString("contrast",0,0); + lcd.printString(" Highscore.. ", 0,1); + + char buffer[14]; + sprintf(buffer,"%i", highscore); + lcd.printString(buffer,35,5); lcd.refresh(); @@ -161,10 +153,47 @@ } } while (goback == 0); + + main_menu(lcd, pad); +} +void menu_settings(N5110 &lcd, Gamepad &pad) +{ + + int goback = 0; + + do { + + if (timer_flag == true) { + + timer_flag = 0; + + lcd.clear(); + + lcd.printString(" settings ", 0,1); + + lcd.refresh(); + + if (pad.check_event(Gamepad::B_PRESSED)) { + goback = 1; + } + + } else { + + sleep(); + + } + } while (goback == 0); main_menu(lcd, pad); } +void menu_quit(N5110 &lcd, Gamepad &pad) +{ + lcd.turnOff(); + sleep(); + +} + void select_continue_menu_item(N5110 &lcd, Gamepad &pad, int input) { @@ -195,10 +224,22 @@ void menu_continue(N5110 &lcd, Gamepad &pad) { blockhead.continueInit(); - + print_menu_continue(lcd); - int input = user_input(pad); - select_continue_menu_item(lcd, pad, input); + + int input = 0; + do{ + + if (pad.check_event(Gamepad::A_PRESSED)) { + input = 1; + } + + if (pad.check_event(Gamepad::B_PRESSED)) { + input = 2; + } + + } while (input ==0); + select_continue_menu_item(lcd, pad, input); }