Zeyu Feng 201377605

Dependencies:   mbed

On Minerva

Revision:
17:ba4d9cd1e347
Parent:
16:cf2bfada3adf
Child:
18:93d050e7705d
--- a/Interface/Interface.cpp	Mon May 18 08:56:17 2020 +0000
+++ b/Interface/Interface.cpp	Mon May 18 15:30:54 2020 +0000
@@ -1,10 +1,18 @@
 #include  "Interface.h"
 
 
-State fsm[3] = {
+State fsm_4[4] = {
     {0,{2,1}},
     {1,{0,2}},
-    {2,{1,0}},
+    {2,{1,3}},
+    {3,{2,0}}
+};
+State fsm_5[5] = {
+    {0,{2,1}},
+    {1,{0,2}},
+    {2,{1,3}},
+    {3,{2,4}},
+    {4,{3,0}}
 };
 const int pointer[3][2] = {
     {1,0},
@@ -38,7 +46,7 @@
         lcd.printString("   Welcome!   ",0,1);
         lcd.printString("   Game by    ",0,2);
         lcd.printString("   Z. FENG    ",0,3);
-        lcd.setContrast( pad.read_pot1());
+        lcd.setContrast( pad.read_pot1());// control the contrast of screen
         lcd.drawRect(0,44,int(pad.read_pot1()*WIDTH),2,FILL_BLACK);
         //printf("WIDTH of contrast = %d, contrast = %f\n",(int)pad.read_pot1()*WIDTH,pad.read_pot1());
         lcd.refresh();
@@ -58,23 +66,81 @@
         lcd.printString("     MENU",0,0);
         lcd.printString("        Start",0,2);
         lcd.printString("   Start(Hell)",0,3);
-        lcd.printString("         Exit",0,4);
+        lcd.printString("  user-defined",0,4);
+        lcd.printString("         Exit",0,5);
         _d = pad.get_direction();
         if(_d == N||_d ==NE||_d==NW){
-            option_flag = fsm[option_flag].next_state[0];
+            option_flag = fsm_4[option_flag].next_state[0];
         } else if(_d == S||_d==SE||_d==SW){
-            option_flag = fsm[option_flag].next_state[1];
+            option_flag = fsm_4[option_flag].next_state[1];
         }
-    lcd.drawSprite(0,8*option_flag+18,3,2,(int*)pointer); 
-    lcd.refresh();
-    pad.leds_on();   
-    wait(0.3);
-    //printf("A_pressed\n");
+        lcd.drawSprite(0,8*option_flag+18,3,2,(int*)pointer); 
+        lcd.refresh();
+        pad.leds_on();   
+        wait(0.25);
+        //printf("A_pressed\n");
     }
     _sound.begin_sound(pad);
     return option_flag;         
 }
 
+int Interface::undefined_rate(N5110 &lcd,Gamepad &pad,int option_flag)
+{
+    pad.tone(10,0.05);
+    pad.set_bpm(0);
+    pad.reset_buttons();
+    while (!pad.A_pressed())
+    {
+        lcd.clear();
+        lcd.printString(" shots/frames",0,0);
+        lcd.printString("       0.3",0,1);
+        lcd.printString("       0.4",0,2);
+        lcd.printString("       0.5",0,3);
+        lcd.printString("       0.6",0,4);
+        lcd.printString("       0.7",0,5);
+        _d = pad.get_direction();
+        if(_d == N||_d ==NE||_d==NW){
+            option_flag = fsm_5[option_flag].next_state[0];
+        } else if(_d == S||_d==SE||_d==SW){
+            option_flag = fsm_5[option_flag].next_state[1];
+        }
+        lcd.drawSprite(10,8*option_flag+10,3,2,(int*)pointer); 
+        lcd.refresh();
+        pad.leds_on();   
+        wait(0.2);
+    }
+    return option_flag;
+}
+
+
+int Interface::undefined_max(N5110 &lcd,Gamepad &pad,int option_flag)
+{
+    pad.reset_buttons();
+    while (!pad.A_pressed())
+    {
+        lcd.clear();
+        lcd.printString(" shots/frames",0,0);
+        lcd.printString("       15",0,1);
+        lcd.printString("       20",0,2);
+        lcd.printString("       25",0,3);
+        lcd.printString("       30",0,4);
+        lcd.printString("       35",0,5);
+        _d = pad.get_direction();
+        if(_d == N||_d ==NE||_d==NW){
+            option_flag = fsm_5[option_flag].next_state[0];
+        } else if(_d == S||_d==SE||_d==SW){
+            option_flag = fsm_5[option_flag].next_state[1];
+        }
+        lcd.drawSprite(10,8*option_flag+10,3,2,(int*)pointer); 
+        lcd.refresh();
+        pad.leds_on();   
+        wait(0.2);
+    }
+    _sound.begin_sound(pad);
+    return option_flag;
+}
+
+
 void Interface::game_over(N5110 &lcd,Gamepad &pad)
 {
     _sound.over_sound(pad);