Zeyu Feng 201377605

Dependencies:   mbed

On Minerva

Committer:
el19zf
Date:
Mon May 18 15:30:54 2020 +0000
Revision:
17:ba4d9cd1e347
Parent:
16:cf2bfada3adf
Child:
18:93d050e7705d
add the user-defined in menu

Who changed what in which revision?

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