Adam Baker 201166301
Dependencies: mbed Gamepad N5110
main.cpp
- Committer:
- adambakerwa
- Date:
- 2019-05-02
- Revision:
- 34:911d7d05a8d2
- Parent:
- 31:bf765e3961f1
- Child:
- 36:6f452777b9ce
File content as of revision 34:911d7d05a8d2:
#include "mbed.h" #include "Gamepad.h" #include "N5110.h" #include "Runner.h" #include "Levels.h" #include "Animation.h" #include "BlockheadEngine.h" N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); Gamepad pad; BlockheadEngine blockhead; Ticker ticker; 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); void menu_playgame(N5110 &lcd, Gamepad &pad); void menu_setcontrast(N5110 &lcd, Gamepad &pad); void select_continue_menu_item(N5110 &lcd, Gamepad &pad, int input); void print_continue_menu(N5110 &lcd); void menu_continue(N5110 &lcd, Gamepad &pad); int main() { int fps = 6; //6 init(); ticker.attach(&timer_isr,1.0f/fps); lcd.setContrast(0.55); main_menu(lcd, pad); } void timer_isr() { timer_flag = 1; // set flag in ISR } void init() { pad.init(); lcd.init(); } 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(); } 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); return input; } void select_main_menu_item(N5110 &lcd, Gamepad &pad, int input) { switch (input) { case 1: menu_playgame(lcd, pad); break; case 2: menu_setcontrast(lcd, pad); break; default: exit(1); break; } } void menu_playgame(N5110 &lcd, Gamepad &pad) { int gameover = 0; // blockhead.init(); do { if (timer_flag == true) { timer_flag = 0; // if it has, clear the flag lcd.clear(); gameover = blockhead.playgame(lcd, pad); lcd.refresh(); } else { sleep(); } } while (gameover == 0); menu_continue(lcd, pad); } void menu_setcontrast(N5110 &lcd, Gamepad &pad) { int goback = 0; do { if (timer_flag == true) { timer_flag = 0; lcd.clear(); lcd.printString("contrast",0,0); lcd.refresh(); if (pad.check_event(Gamepad::B_PRESSED)) { goback = 1; } } else { sleep(); } } while (goback == 0); main_menu(lcd, pad); } void select_continue_menu_item(N5110 &lcd, Gamepad &pad, int input) { switch (input) { case 1: menu_playgame(lcd, pad); break; case 2: main_menu(lcd, pad); break; default: exit(1); break; } } void print_menu_continue(N5110 &lcd) { lcd.clear(); lcd.printString("Continue??",0,0); lcd.printString("A for hell yeh",0,1); lcd.printString("B for back",0,2); lcd.refresh(); } 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); } //rtos /** char buffer[14]; sprintf(buffer,"%i", gameover); lcd.printString(buffer,0,0); */ //NEED TO RESET POS CORDS EACH NEW LEVEL TO PREVENT UNNECERSARRY GAME OVER (have fun x)