Zeyu Feng 201377605

Dependencies:   mbed

On Minerva

Committer:
el19zf
Date:
Fri May 22 03:54:22 2020 +0000
Revision:
20:a36ab1560e73
Parent:
19:5083339b55e8
Child:
22:cded0cd8e1c9
add the Doxygen comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el19zf 11:494cc44777fe 1 #include "Interface.h"
el19zf 11:494cc44777fe 2
el19zf 17:ba4d9cd1e347 3 State fsm_5[5] = {
el19zf 20:a36ab1560e73 4 {0,{4,1}},
el19zf 17:ba4d9cd1e347 5 {1,{0,2}},
el19zf 17:ba4d9cd1e347 6 {2,{1,3}},
el19zf 17:ba4d9cd1e347 7 {3,{2,4}},
el19zf 17:ba4d9cd1e347 8 {4,{3,0}}
el19zf 11:494cc44777fe 9 };
el19zf 19:5083339b55e8 10 // point to option
el19zf 11:494cc44777fe 11 const int pointer[3][2] = {
el19zf 11:494cc44777fe 12 {1,0},
el19zf 11:494cc44777fe 13 {1,1},
el19zf 11:494cc44777fe 14 {1,0}
el19zf 11:494cc44777fe 15 };
el19zf 11:494cc44777fe 16
el19zf 11:494cc44777fe 17 Interface::Interface()
el19zf 11:494cc44777fe 18 {
el19zf 11:494cc44777fe 19
el19zf 11:494cc44777fe 20 }
el19zf 11:494cc44777fe 21
el19zf 11:494cc44777fe 22 Interface::~Interface()
el19zf 11:494cc44777fe 23 {
el19zf 11:494cc44777fe 24
el19zf 11:494cc44777fe 25 }
el19zf 11:494cc44777fe 26
el19zf 11:494cc44777fe 27 void Interface::init()
el19zf 11:494cc44777fe 28 {
el19zf 19:5083339b55e8 29 _menu_flag = 0;
el19zf 19:5083339b55e8 30 _defined_rate_flag = 0;
el19zf 19:5083339b55e8 31 _defined_max_flag = 0;
el19zf 12:009895f6b6e4 32 _gameover_flag = 0;
el19zf 19:5083339b55e8 33 _count_down = 18;
el19zf 12:009895f6b6e4 34 _victory_flag = 0;
el19zf 19:5083339b55e8 35 _sim_flag = 0;//simple game flag
el19zf 11:494cc44777fe 36 }
el19zf 11:494cc44777fe 37
el19zf 11:494cc44777fe 38
el19zf 11:494cc44777fe 39 void Interface::Welcome(N5110 &lcd,Gamepad &pad)
el19zf 11:494cc44777fe 40 {
el19zf 19:5083339b55e8 41 // start game after pressing the start botton
el19zf 11:494cc44777fe 42 while (!pad.start_pressed())
el19zf 11:494cc44777fe 43 {
el19zf 13:eb60628db8bf 44 lcd.clear();
el19zf 13:eb60628db8bf 45 lcd.printString(" Welcome! ",0,1);
el19zf 13:eb60628db8bf 46 lcd.printString(" Game by ",0,2);
el19zf 13:eb60628db8bf 47 lcd.printString(" Z. FENG ",0,3);
el19zf 17:ba4d9cd1e347 48 lcd.setContrast( pad.read_pot1());// control the contrast of screen
el19zf 19:5083339b55e8 49 lcd.drawRect(0,44,int(pad.read_pot1()*WIDTH),2,FILL_BLACK);// shows the contrast of gamepad by a black rectangle
el19zf 13:eb60628db8bf 50 //printf("WIDTH of contrast = %d, contrast = %f\n",(int)pad.read_pot1()*WIDTH,pad.read_pot1());
el19zf 13:eb60628db8bf 51 lcd.refresh();
el19zf 11:494cc44777fe 52 pad.leds_on();
el19zf 11:494cc44777fe 53 wait(0.1);
el19zf 11:494cc44777fe 54 pad.leds_off();
el19zf 11:494cc44777fe 55 wait(0.1);
el19zf 11:494cc44777fe 56 }
el19zf 16:cf2bfada3adf 57 _sound.menu_sound(pad);
el19zf 11:494cc44777fe 58 }
el19zf 11:494cc44777fe 59
el19zf 19:5083339b55e8 60 void Interface::menu(N5110 &lcd,Gamepad &pad)
el19zf 11:494cc44777fe 61 {
el19zf 11:494cc44777fe 62 while (!pad.A_pressed())
el19zf 11:494cc44777fe 63 {
el19zf 11:494cc44777fe 64 lcd.clear();
el19zf 16:cf2bfada3adf 65 lcd.printString(" MENU",0,0);
el19zf 18:93d050e7705d 66 lcd.printString(" Start",0,1);
el19zf 18:93d050e7705d 67 lcd.printString(" Start(Hell)",0,2);
el19zf 18:93d050e7705d 68 lcd.printString(" user-defined",0,3);
el19zf 18:93d050e7705d 69 lcd.printString(" Instruction",0,4);
el19zf 17:ba4d9cd1e347 70 lcd.printString(" Exit",0,5);
el19zf 11:494cc44777fe 71 _d = pad.get_direction();
el19zf 19:5083339b55e8 72 // in order to easily control Joystick, pointer move upward in a large angle
el19zf 12:009895f6b6e4 73 if(_d == N||_d ==NE||_d==NW){
el19zf 19:5083339b55e8 74 _menu_flag = fsm_5[_menu_flag].next_state[0];
el19zf 12:009895f6b6e4 75 } else if(_d == S||_d==SE||_d==SW){
el19zf 19:5083339b55e8 76 _menu_flag = fsm_5[_menu_flag].next_state[1];
el19zf 11:494cc44777fe 77 }
el19zf 19:5083339b55e8 78 lcd.drawSprite(0,8*_menu_flag+10,3,2,(int*)pointer);
el19zf 17:ba4d9cd1e347 79 lcd.refresh();
el19zf 17:ba4d9cd1e347 80 pad.leds_on();
el19zf 19:5083339b55e8 81 wait(0.3);
el19zf 17:ba4d9cd1e347 82 //printf("A_pressed\n");
el19zf 14:42b8a91e463c 83 }
el19zf 19:5083339b55e8 84 _sound.begin_sound(pad);
el19zf 11:494cc44777fe 85 }
el19zf 11:494cc44777fe 86
el19zf 19:5083339b55e8 87 void Interface::undefined_rate(N5110 &lcd,Gamepad &pad)
el19zf 17:ba4d9cd1e347 88 {
el19zf 17:ba4d9cd1e347 89 pad.tone(10,0.05);
el19zf 17:ba4d9cd1e347 90 pad.set_bpm(0);
el19zf 17:ba4d9cd1e347 91 pad.reset_buttons();
el19zf 17:ba4d9cd1e347 92 while (!pad.A_pressed())
el19zf 17:ba4d9cd1e347 93 {
el19zf 17:ba4d9cd1e347 94 lcd.clear();
el19zf 18:93d050e7705d 95 lcd.printString(" shots/frames",0,0);
el19zf 17:ba4d9cd1e347 96 lcd.printString(" 0.3",0,1);
el19zf 17:ba4d9cd1e347 97 lcd.printString(" 0.4",0,2);
el19zf 17:ba4d9cd1e347 98 lcd.printString(" 0.5",0,3);
el19zf 17:ba4d9cd1e347 99 lcd.printString(" 0.6",0,4);
el19zf 17:ba4d9cd1e347 100 lcd.printString(" 0.7",0,5);
el19zf 17:ba4d9cd1e347 101 _d = pad.get_direction();
el19zf 17:ba4d9cd1e347 102 if(_d == N||_d ==NE||_d==NW){
el19zf 19:5083339b55e8 103 _defined_rate_flag = fsm_5[_defined_rate_flag].next_state[0];
el19zf 17:ba4d9cd1e347 104 } else if(_d == S||_d==SE||_d==SW){
el19zf 19:5083339b55e8 105 _defined_rate_flag = fsm_5[_defined_rate_flag].next_state[1];
el19zf 17:ba4d9cd1e347 106 }
el19zf 19:5083339b55e8 107 lcd.drawSprite(20,8*_defined_rate_flag+10,3,2,(int*)pointer);
el19zf 17:ba4d9cd1e347 108 lcd.refresh();
el19zf 17:ba4d9cd1e347 109 pad.leds_on();
el19zf 19:5083339b55e8 110 wait(0.3);
el19zf 17:ba4d9cd1e347 111 }
el19zf 17:ba4d9cd1e347 112 }
el19zf 17:ba4d9cd1e347 113
el19zf 17:ba4d9cd1e347 114
el19zf 19:5083339b55e8 115 void Interface::undefined_max(N5110 &lcd,Gamepad &pad)
el19zf 17:ba4d9cd1e347 116 {
el19zf 17:ba4d9cd1e347 117 pad.reset_buttons();
el19zf 17:ba4d9cd1e347 118 while (!pad.A_pressed())
el19zf 17:ba4d9cd1e347 119 {
el19zf 17:ba4d9cd1e347 120 lcd.clear();
el19zf 18:93d050e7705d 121 lcd.printString(" Max.shots",0,0);
el19zf 17:ba4d9cd1e347 122 lcd.printString(" 15",0,1);
el19zf 17:ba4d9cd1e347 123 lcd.printString(" 20",0,2);
el19zf 17:ba4d9cd1e347 124 lcd.printString(" 25",0,3);
el19zf 17:ba4d9cd1e347 125 lcd.printString(" 30",0,4);
el19zf 17:ba4d9cd1e347 126 lcd.printString(" 35",0,5);
el19zf 17:ba4d9cd1e347 127 _d = pad.get_direction();
el19zf 17:ba4d9cd1e347 128 if(_d == N||_d ==NE||_d==NW){
el19zf 19:5083339b55e8 129 _defined_max_flag = fsm_5[_defined_max_flag].next_state[0];
el19zf 17:ba4d9cd1e347 130 } else if(_d == S||_d==SE||_d==SW){
el19zf 19:5083339b55e8 131 _defined_max_flag = fsm_5[_defined_max_flag].next_state[1];
el19zf 17:ba4d9cd1e347 132 }
el19zf 19:5083339b55e8 133 lcd.drawSprite(20,8*_defined_max_flag+10,3,2,(int*)pointer);
el19zf 17:ba4d9cd1e347 134 lcd.refresh();
el19zf 17:ba4d9cd1e347 135 pad.leds_on();
el19zf 19:5083339b55e8 136 wait(0.3);
el19zf 17:ba4d9cd1e347 137 }
el19zf 17:ba4d9cd1e347 138 _sound.begin_sound(pad);
el19zf 17:ba4d9cd1e347 139 }
el19zf 17:ba4d9cd1e347 140
el19zf 17:ba4d9cd1e347 141
el19zf 11:494cc44777fe 142 void Interface::game_over(N5110 &lcd,Gamepad &pad)
el19zf 11:494cc44777fe 143 {
el19zf 16:cf2bfada3adf 144 _sound.over_sound(pad);
el19zf 11:494cc44777fe 145 lcd.clear();
el19zf 13:eb60628db8bf 146 pad.init();
el19zf 11:494cc44777fe 147 while(!pad.B_pressed()){
el19zf 11:494cc44777fe 148 lcd.printString(" Game over ",0,1);
el19zf 11:494cc44777fe 149 lcd.printString(" Press B to ",0,2);
el19zf 11:494cc44777fe 150 lcd.printString(" try again? ",0,3);
el19zf 11:494cc44777fe 151 lcd.refresh();
el19zf 11:494cc44777fe 152 wait(0.1);
el19zf 11:494cc44777fe 153 //printf("Not press B\n");
el19zf 11:494cc44777fe 154 }
el19zf 12:009895f6b6e4 155 _gameover_flag = 1;
el19zf 11:494cc44777fe 156 }
el19zf 11:494cc44777fe 157
el19zf 19:5083339b55e8 158 int Interface::check_pause(N5110 &lcd,Gamepad &pad,int paused_flag, float increment, int max)
el19zf 11:494cc44777fe 159 {
el19zf 16:cf2bfada3adf 160 if(pad.start_pressed()){
el19zf 11:494cc44777fe 161 paused_flag = 1;
el19zf 16:cf2bfada3adf 162 sprintf(_buffer1," %.1f shots/s",increment*6);
el19zf 16:cf2bfada3adf 163 sprintf(_buffer2," with Max.%d ",max);
el19zf 16:cf2bfada3adf 164 }
el19zf 11:494cc44777fe 165 //printf("start press\n");
el19zf 11:494cc44777fe 166 while(paused_flag == 1){
el19zf 16:cf2bfada3adf 167 lcd.clear();
el19zf 11:494cc44777fe 168 _timer.stop();
el19zf 16:cf2bfada3adf 169 lcd.printString("Paused",23,0);
el19zf 16:cf2bfada3adf 170 lcd.printString(_buffer1,0,2);
el19zf 16:cf2bfada3adf 171 lcd.printString(_buffer2,0,3);
el19zf 11:494cc44777fe 172 lcd.refresh();
el19zf 11:494cc44777fe 173 if(pad.start_pressed())
el19zf 11:494cc44777fe 174 paused_flag = 0;
el19zf 11:494cc44777fe 175 }
el19zf 11:494cc44777fe 176 _timer.start();
el19zf 11:494cc44777fe 177 return paused_flag;
el19zf 11:494cc44777fe 178 }
el19zf 11:494cc44777fe 179
el19zf 19:5083339b55e8 180 void Interface::count_down(N5110 &lcd)
el19zf 11:494cc44777fe 181 {
el19zf 11:494cc44777fe 182 char buffer[6];
el19zf 19:5083339b55e8 183 sprintf(buffer,"%d",int(_count_down/6));
el19zf 11:494cc44777fe 184 lcd.printString(buffer,40,2);
el19zf 19:5083339b55e8 185 //printf("count: %d\n",_count_flag);
el19zf 19:5083339b55e8 186 _count_down--;
el19zf 11:494cc44777fe 187 }
el19zf 11:494cc44777fe 188
el19zf 11:494cc44777fe 189 void Interface::exit(N5110 &lcd,Gamepad &pad)
el19zf 11:494cc44777fe 190 {
el19zf 11:494cc44777fe 191 lcd.clear();
el19zf 13:eb60628db8bf 192 pad.init();
el19zf 14:42b8a91e463c 193 pad.tone(10,0.05);
el19zf 14:42b8a91e463c 194 pad.set_bpm(0);
el19zf 11:494cc44777fe 195 while(!pad.B_pressed()){
el19zf 11:494cc44777fe 196 lcd.printString(" Press B back ",0,2);
el19zf 11:494cc44777fe 197 lcd.printString(" to menu ",0,3);
el19zf 11:494cc44777fe 198 lcd.refresh();
el19zf 11:494cc44777fe 199 wait(0.1);
el19zf 11:494cc44777fe 200 }
el19zf 11:494cc44777fe 201 }
el19zf 11:494cc44777fe 202
el19zf 11:494cc44777fe 203 void Interface::victory(N5110 &lcd,Gamepad &pad)
el19zf 11:494cc44777fe 204 {
el19zf 16:cf2bfada3adf 205 _sound.vict_sound(pad);
el19zf 11:494cc44777fe 206 lcd.clear();
el19zf 13:eb60628db8bf 207 pad.init();
el19zf 11:494cc44777fe 208 while(!pad.B_pressed()){
el19zf 11:494cc44777fe 209 lcd.printString(" Victory! ",0,1);
el19zf 11:494cc44777fe 210 lcd.printString(" Press B back ",0,2);
el19zf 11:494cc44777fe 211 lcd.printString(" to menu ",0,3);
el19zf 11:494cc44777fe 212 lcd.refresh();
el19zf 11:494cc44777fe 213 wait(0.1);
el19zf 11:494cc44777fe 214 }
el19zf 12:009895f6b6e4 215 _victory_flag = 1;
el19zf 12:009895f6b6e4 216 }
el19zf 12:009895f6b6e4 217
el19zf 12:009895f6b6e4 218 void Interface::simple_game(N5110 &lcd,Gamepad &pad)
el19zf 12:009895f6b6e4 219 {
el19zf 12:009895f6b6e4 220 lcd.clear();
el19zf 12:009895f6b6e4 221 pad.init();
el19zf 12:009895f6b6e4 222 while(!pad.A_pressed()){
el19zf 12:009895f6b6e4 223 lcd.printString(" DO YOU WANT ",0,1);
el19zf 12:009895f6b6e4 224 lcd.printString(" MAKE IT EASY? ",0,2);
el19zf 12:009895f6b6e4 225 lcd.printString(" PRESS A to",0,3);
el19zf 12:009895f6b6e4 226 lcd.printString(" try again! ",0,4);
el19zf 12:009895f6b6e4 227 lcd.refresh();
el19zf 12:009895f6b6e4 228 wait(0.1);
el19zf 12:009895f6b6e4 229 }
el19zf 12:009895f6b6e4 230 _sim_flag = 1;
el19zf 16:cf2bfada3adf 231 _sound.count_sound(pad);
el19zf 12:009895f6b6e4 232 }
el19zf 12:009895f6b6e4 233
el19zf 19:5083339b55e8 234 void Interface::set_count_down(int count_down)
el19zf 19:5083339b55e8 235 {
el19zf 19:5083339b55e8 236 _count_down = count_down;
el19zf 19:5083339b55e8 237 }
el19zf 19:5083339b55e8 238
el19zf 19:5083339b55e8 239 int Interface::get_menu_flag()
el19zf 19:5083339b55e8 240 {
el19zf 19:5083339b55e8 241 return _menu_flag;
el19zf 19:5083339b55e8 242 }
el19zf 19:5083339b55e8 243
el19zf 19:5083339b55e8 244 int Interface::get_rate_flag()
el19zf 19:5083339b55e8 245 {
el19zf 19:5083339b55e8 246 return _defined_rate_flag;
el19zf 19:5083339b55e8 247 }
el19zf 19:5083339b55e8 248
el19zf 19:5083339b55e8 249 int Interface::get_max_flag()
el19zf 19:5083339b55e8 250 {
el19zf 19:5083339b55e8 251 return _defined_max_flag;
el19zf 19:5083339b55e8 252 }
el19zf 19:5083339b55e8 253
el19zf 12:009895f6b6e4 254 int Interface::get_sim_flag()
el19zf 12:009895f6b6e4 255 {
el19zf 12:009895f6b6e4 256 //printf("Get simple_flag %d\n",_sim_flag);
el19zf 12:009895f6b6e4 257 return _sim_flag;
el19zf 12:009895f6b6e4 258 }
el19zf 12:009895f6b6e4 259
el19zf 12:009895f6b6e4 260 int Interface::get_gameover_flag()
el19zf 12:009895f6b6e4 261 {
el19zf 12:009895f6b6e4 262 return _gameover_flag;
el19zf 12:009895f6b6e4 263 }
el19zf 12:009895f6b6e4 264
el19zf 12:009895f6b6e4 265 int Interface::get_victory_flag()
el19zf 12:009895f6b6e4 266 {
el19zf 12:009895f6b6e4 267 return _victory_flag;
el19zf 19:5083339b55e8 268 }