Josh Davy / Mbed 2 deprecated Flip

Dependencies:   mbed el17jd

Revision:
9:96969b1c6bde
Parent:
8:21b6d4dbce44
Child:
10:58cf89dd878c
--- a/main.cpp	Fri Apr 19 17:54:09 2019 +0000
+++ b/main.cpp	Wed Apr 24 10:18:45 2019 +0000
@@ -7,9 +7,6 @@
 Student ID Number: 201148379
 Date: 12/03/2019
 */
-const int fps = 15;
-
-
 
 
 ///////// pre-processor directives ////////
@@ -22,6 +19,8 @@
 #include "SoundData.h"
 #include "SplashScreen.h"
 #include "MenuScreen.h"
+#include "WinScreen.h"
+
 Timer game_timer;
 Timer music_timer;
 
@@ -34,14 +33,17 @@
 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
 Gamepad pad;
 Game game;
-Music play;
+Music music;
 
 
 
 ///////////// prototypes ///////////////
 void init();
 void welcome();
-
+void menu();
+void how_to_play();
+void you_win();
+int main();
 // initialies all classes and libraries
 void init()
 
@@ -51,60 +53,97 @@
     lcd.init();
     lcd.setContrast(0.4);
     pad.init();
-    play.init(data1,NUM_ELEMENTS);
+    // Initalises Music with data from SoundData.h and game
+    music.init(data1,NUM_ELEMENTS);
     game.init();
 
-
-
 }
 // simple splash screen displayed on start-up
 void welcome()
 {
 
-
+    // Draws Splash Screen
     lcd.drawSprite(0,0,48,84, (int *) splashScreen);
     lcd.refresh();
 
     // wait flashing LEDs until start button is pressed
-    while ( pad.check_event(Gamepad::START_PRESSED) == false) {
+    while (!pad.check_event(Gamepad::START_PRESSED)) {
+        pad.leds_on();
+        wait(0.1);
+        pad.leds_off();
+        wait(0.1);
+    }
+
+}
+
+void you_win()
+{
+
+    // Draws Win Screen
+    lcd.drawSprite(0,0,48,84, (int *) winScreen);
+    lcd.refresh();
+
+    // wait flashing LEDs until A button is pressed
+    while (!pad.check_event(Gamepad::A_PRESSED)) {
         pad.leds_on();
         wait(0.1);
         pad.leds_off();
         wait(0.1);
-        printf("Welcome\n");
     }
+    
+    main();
 
 }
 
+
 void how_to_play()
 {
-
+    // Gives instructions on how to play
+    lcd.clear();
+    lcd.printString("Use the joy -",0,0);
+    lcd.printString("stick to move.",0,1);
+    lcd.printString("Press A to ",0,2);
+    lcd.printString("flip gravity.",0,3);
+    lcd.printString("Get the flags",0,4);
+    lcd.printString("to win!",0,5);
+    lcd.refresh();
+    
+    // Loop until A button pressed
+    while ( !pad.check_event(Gamepad::A_PRESSED) ) {}
+    
+    // Return to menu
+    menu();
 
 }
 
 void menu()
 {
+    // Main Menu
     int menu_option = 1;
-
-
     while ( !pad.check_event(Gamepad::A_PRESSED) ) {
-               
-        if (pad.get_coord().y> 0.7f) {
+          
+       // Read the joystick value and relate it to a menu option        
+        if (pad.get_coord().y > 0.7f) {
             menu_option = 1;
         }
         if (pad.get_coord().y < -0.7f) {
             menu_option = 0;
         }
+        // Draws main menu background image
         lcd.drawSprite(0,0,48,84, (int *) menuScreen);
+        
+        // Draws the arrow on the menu
         if (menu_option == 1) {
             lcd.drawSprite(40,10,7,4, (int *)  arrow);
         } else {
             lcd.drawSprite(40,25,7,4, (int *)  arrow);
         }
+        
         lcd.refresh();
 
     }
-    if (menu_option == 1) {
+    // If the "how to play" option is selected run its display function
+    if (menu_option == 0) {
         how_to_play();
     }
 }
@@ -121,24 +160,32 @@
 
     game.init();
     
+    // Resets and starts the timers responsible for the game and music loop
     game_timer.reset();
     music_timer.reset();
     game_timer.start();
     music_timer.start();
-
+    
+    // The tick times for both timers
     const int MUSIC_TICK_TIME = 100; //125 microseconds
     const int GAME_TICK_TIME = 100; // 100 millieconds
     
-    while (1) {
+    while (true) {
+        
+        // If the game timer is above the game tick time then main game process
+        // is ran 
         if (game_timer.read_ms() > GAME_TICK_TIME) {
-            game.read_input(pad);
             game.update(pad);
             game.draw(lcd);
             game_timer.reset();
+            if (game.game_won()) {
+                you_win();
+            }
         }
-
+        
+        // If the music timer is above the music tick time update the music object
         if (music_timer.read_us() > MUSIC_TICK_TIME) {
-                play.play_next();
+                music.play_next();
                 music_timer.reset();
             }