Adam Baker 201166301

Dependencies:   mbed Gamepad N5110

Revision:
36:6f452777b9ce
Parent:
34:911d7d05a8d2
Child:
37:23b6312c8315
diff -r 7d69c0822ea9 -r 6f452777b9ce main.cpp
--- 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);
 }