Zeyu Feng 201377605

Dependencies:   mbed

On Minerva

Revision:
19:5083339b55e8
Parent:
18:93d050e7705d
Child:
20:a36ab1560e73
--- a/Interface/Interface.cpp	Thu May 21 15:20:33 2020 +0000
+++ b/Interface/Interface.cpp	Thu May 21 17:07:46 2020 +0000
@@ -1,12 +1,5 @@
 #include  "Interface.h"
 
-
-State fsm_4[4] = {
-    {0,{2,1}},
-    {1,{0,2}},
-    {2,{1,3}},
-    {3,{2,0}}
-};
 State fsm_5[5] = {
     {0,{2,1}},
     {1,{0,2}},
@@ -14,6 +7,7 @@
     {3,{2,4}},
     {4,{3,0}}
 };
+// point to option
 const int pointer[3][2] = {
     {1,0},
     {1,1},
@@ -32,14 +26,19 @@
 
 void Interface::init()
 {
+    _menu_flag = 0;
+    _defined_rate_flag = 0;
+    _defined_max_flag = 0;
     _gameover_flag = 0;
-    _sim_flag = 0;
+    _count_down = 18;
     _victory_flag = 0;
+    _sim_flag = 0;//simple game flag
 }
 
 
 void Interface::Welcome(N5110 &lcd,Gamepad &pad)
 {
+    // start game after pressing the start botton
     while (!pad.start_pressed()) 
     {
         lcd.clear();
@@ -47,7 +46,7 @@
         lcd.printString("   Game by    ",0,2);
         lcd.printString("   Z. FENG    ",0,3);
         lcd.setContrast( pad.read_pot1());// control the contrast of screen
-        lcd.drawRect(0,44,int(pad.read_pot1()*WIDTH),2,FILL_BLACK);
+        lcd.drawRect(0,44,int(pad.read_pot1()*WIDTH),2,FILL_BLACK);// shows the contrast of gamepad by a black rectangle
         //printf("WIDTH of contrast = %d, contrast = %f\n",(int)pad.read_pot1()*WIDTH,pad.read_pot1());
         lcd.refresh();
         pad.leds_on();
@@ -58,7 +57,7 @@
     _sound.menu_sound(pad);
 }
 
-int Interface::menu(N5110 &lcd,Gamepad &pad,int option_flag)
+void Interface::menu(N5110 &lcd,Gamepad &pad)
 {
     while (!pad.A_pressed())
     {
@@ -70,22 +69,22 @@
         lcd.printString("   Instruction",0,4);
         lcd.printString("         Exit",0,5);
         _d = pad.get_direction();
+        // in order to easily control Joystick, pointer move upward in a large angle
         if(_d == N||_d ==NE||_d==NW){
-            option_flag = fsm_5[option_flag].next_state[0];
+            _menu_flag = fsm_5[_menu_flag].next_state[0];
         } else if(_d == S||_d==SE||_d==SW){
-            option_flag = fsm_5[option_flag].next_state[1];
+            _menu_flag = fsm_5[_menu_flag].next_state[1];
         }
-        lcd.drawSprite(0,8*option_flag+10,3,2,(int*)pointer); 
+        lcd.drawSprite(0,8*_menu_flag+10,3,2,(int*)pointer); 
         lcd.refresh();
         pad.leds_on();   
-        wait(0.25);
+        wait(0.3);
         //printf("A_pressed\n");
     }
-    _sound.begin_sound(pad);
-    return option_flag;         
+    _sound.begin_sound(pad);        
 }
 
-int Interface::undefined_rate(N5110 &lcd,Gamepad &pad,int option_flag)
+void Interface::undefined_rate(N5110 &lcd,Gamepad &pad)
 {
     pad.tone(10,0.05);
     pad.set_bpm(0);
@@ -101,20 +100,19 @@
         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];
+            _defined_rate_flag = fsm_5[_defined_rate_flag].next_state[0];
         } else if(_d == S||_d==SE||_d==SW){
-            option_flag = fsm_5[option_flag].next_state[1];
+            _defined_rate_flag = fsm_5[_defined_rate_flag].next_state[1];
         }
-        lcd.drawSprite(20,8*option_flag+10,3,2,(int*)pointer); 
+        lcd.drawSprite(20,8*_defined_rate_flag+10,3,2,(int*)pointer); 
         lcd.refresh();
         pad.leds_on();   
-        wait(0.25);
+        wait(0.3);
     }
-    return option_flag;
 }
 
 
-int Interface::undefined_max(N5110 &lcd,Gamepad &pad,int option_flag)
+void Interface::undefined_max(N5110 &lcd,Gamepad &pad)
 {
     pad.reset_buttons();
     while (!pad.A_pressed())
@@ -128,17 +126,16 @@
         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];
+            _defined_max_flag = fsm_5[_defined_max_flag].next_state[0];
         } else if(_d == S||_d==SE||_d==SW){
-            option_flag = fsm_5[option_flag].next_state[1];
+            _defined_max_flag = fsm_5[_defined_max_flag].next_state[1];
         }
-        lcd.drawSprite(20,8*option_flag+10,3,2,(int*)pointer); 
+        lcd.drawSprite(20,8*_defined_max_flag+10,3,2,(int*)pointer); 
         lcd.refresh();
         pad.leds_on();   
-        wait(0.25);
+        wait(0.3);
     }
     _sound.begin_sound(pad);
-    return option_flag;
 }
 
 
@@ -158,7 +155,7 @@
     _gameover_flag = 1;
 }
 
-int Interface::check_pause(N5110 &lcd,Gamepad &pad,int paused_flag,float increment, int max)
+int Interface::check_pause(N5110 &lcd,Gamepad &pad,int paused_flag, float increment, int max)
 {
     if(pad.start_pressed()){
         paused_flag = 1;
@@ -180,14 +177,13 @@
     return paused_flag;
 }
 
-int Interface::count_down(N5110 &lcd,int count_flag)
+void Interface::count_down(N5110 &lcd)
 {
     char buffer[6];
-    sprintf(buffer,"%d",int(count_flag/6));
+    sprintf(buffer,"%d",int(_count_down/6));
     lcd.printString(buffer,40,2);
-    //printf("count: %d\n",count_flag);
-    count_flag--;
-    return count_flag;
+    //printf("count: %d\n",_count_flag);
+    _count_down--;
 }
 
 void Interface::exit(N5110 &lcd,Gamepad &pad)
@@ -235,6 +231,26 @@
     _sound.count_sound(pad);
 }
 
+void Interface::set_count_down(int count_down)
+{
+    _count_down = count_down;
+}
+
+int Interface::get_menu_flag()
+{
+    return _menu_flag;
+}
+
+int Interface::get_rate_flag()
+{
+    return _defined_rate_flag;
+}
+
+int Interface::get_max_flag()
+{
+    return _defined_max_flag;
+}
+
 int Interface::get_sim_flag()
 {
     //printf("Get simple_flag %d\n",_sim_flag);
@@ -249,4 +265,4 @@
 int Interface::get_victory_flag()
 {
     return _victory_flag;
-}
\ No newline at end of file
+}