Ellis Blackford Stroud 201155309
Dependencies: mbed FATFileSystem
Diff: main.cpp
- Revision:
- 12:7f7fadb5c106
- Parent:
- 10:9f54a6366e94
- Child:
- 13:681192091568
--- a/main.cpp Thu Apr 25 15:16:38 2019 +0000 +++ b/main.cpp Fri May 03 09:39:24 2019 +0000 @@ -19,70 +19,84 @@ Gamepad pad; Menu menu; GolfEngine golf; +Ticker ticker_frame; //functions void init(); void inverseFlash(); -// -int frame_rate; +void frame_isr(); + +int frame_rate; //frame rate got from menu class - can be changed in settings +//flag set in isr +volatile int g_frame_flag = 0; int main() { init(); lcd.clear(); - menu.print_welcome(lcd); + menu.print_welcome(lcd); lcd.clear(); bool start_game = false; while(start_game == false) { //menu loop navigates menu until game started - menu.menu_screen(pad, lcd); start_game = menu.menu_change(lcd, pad); //changes menu screen to selected screen the returns true when start game } + lcd.clear(); golf.printLevel(lcd); lcd.refresh(); wait(1); frame_rate = menu.get_frame_rate(); //changes frame rate to the value chosen in settings golf.init(frame_rate); //resets variables for game and sets frame rate + ticker_frame.attach(&frame_isr,1.0f/frame_rate); //calls isr code - //game loop to run game - while(1){ + + //Game Loop - + if(g_frame_flag) { //Causes game loop code to run at frame rate - if(golf.get_hole_flag() == false) { //if ball not in hole + g_frame_flag = 0; //reset flag + + if(golf.get_hole_flag() == false) { //if ball not in hole run game loop - lcd.clear(); - golf.read_input(pad); - golf.update_ball(pad); - golf.drawGame(lcd, pad); - lcd.refresh(); - wait(1.0f/frame_rate); //time between loops/frames (at lower frame rates ball may be harder to get in hole) + lcd.clear(); + golf.read_input(pad); //reads input from gamepad + golf.update_ball(pad); //moves ball and checks for bounces/shots/holes + golf.drawGame(lcd, pad); //draws ball, walls etc. + lcd.refresh(); //updates lc display + sleep(); //sleeps mcu until ticker wakes it up - } else if(golf.get_hole_flag() == true) { //if ball goes in hole end level and start new level + } else if(golf.get_hole_flag() == true) { //if ball in hole then end level - inverseFlash(); //flashes screen pixels on and off - inverseFlash(); - lcd.clear(); - golf.new_level(); //moves ball to new level position and increments level - golf.reset_hole_flag(); //so that the game loop can continue - golf.printLevel(lcd); //notifying user of start of new level - lcd.refresh(); - wait(1); + inverseFlash(); //flashes screen pixels on and off to indicate end of level + inverseFlash(); + lcd.clear(); + golf.new_level(); //moves ball to new level position and increments level + golf.reset_hole_flag(); //so that the game loop can continue + golf.printLevel(lcd); //prints level number + lcd.refresh(); + wait(1); + } } } } -void init() +void frame_isr() //called by ticker at rate of frame rate { + g_frame_flag = 1; // set flag in ISR +} + +void init() //initialises lcd and pad peripherals +{ lcd.init(); pad.init(); menu.init(); - lcd.setContrast(0.5f); + lcd.setContrast(0.5f); //can alter this in settings } -void inverseFlash() -{ +void inverseFlash() // at end of level to indicate ball in hole +{ lcd.inverseMode(); lcd.refresh(); wait(0.25);