Zeyu Feng 201377605

Dependencies:   mbed

On Minerva

Committer:
el19zf
Date:
Fri May 15 08:04:39 2020 +0000
Revision:
14:42b8a91e463c
Parent:
13:eb60628db8bf
Child:
16:cf2bfada3adf
add a sound class include sound data and sound duration

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 11:494cc44777fe 4 State fsm[3] = {
el19zf 11:494cc44777fe 5 {0,{2,1}},
el19zf 11:494cc44777fe 6 {1,{0,2}},
el19zf 11:494cc44777fe 7 {2,{1,0}},
el19zf 11:494cc44777fe 8 };
el19zf 11:494cc44777fe 9 const int pointer[3][2] = {
el19zf 11:494cc44777fe 10 {1,0},
el19zf 11:494cc44777fe 11 {1,1},
el19zf 11:494cc44777fe 12 {1,0}
el19zf 11:494cc44777fe 13 };
el19zf 11:494cc44777fe 14
el19zf 11:494cc44777fe 15 Interface::Interface()
el19zf 11:494cc44777fe 16 {
el19zf 11:494cc44777fe 17
el19zf 11:494cc44777fe 18 }
el19zf 11:494cc44777fe 19
el19zf 11:494cc44777fe 20 Interface::~Interface()
el19zf 11:494cc44777fe 21 {
el19zf 11:494cc44777fe 22
el19zf 11:494cc44777fe 23 }
el19zf 11:494cc44777fe 24
el19zf 11:494cc44777fe 25 void Interface::init()
el19zf 11:494cc44777fe 26 {
el19zf 12:009895f6b6e4 27 _gameover_flag = 0;
el19zf 12:009895f6b6e4 28 _sim_flag = 0;
el19zf 12:009895f6b6e4 29 _victory_flag = 0;
el19zf 11:494cc44777fe 30 }
el19zf 11:494cc44777fe 31
el19zf 11:494cc44777fe 32
el19zf 11:494cc44777fe 33 void Interface::Welcome(N5110 &lcd,Gamepad &pad)
el19zf 11:494cc44777fe 34 {
el19zf 11:494cc44777fe 35 while (!pad.start_pressed())
el19zf 11:494cc44777fe 36 {
el19zf 13:eb60628db8bf 37 lcd.clear();
el19zf 13:eb60628db8bf 38 lcd.printString(" Welcome! ",0,1);
el19zf 13:eb60628db8bf 39 lcd.printString(" Game by ",0,2);
el19zf 13:eb60628db8bf 40 lcd.printString(" Z. FENG ",0,3);
el19zf 13:eb60628db8bf 41 lcd.setContrast( pad.read_pot1());
el19zf 13:eb60628db8bf 42 lcd.drawRect(0,44,int(pad.read_pot1()*WIDTH),2,FILL_BLACK);
el19zf 13:eb60628db8bf 43 //printf("WIDTH of contrast = %d, contrast = %f\n",(int)pad.read_pot1()*WIDTH,pad.read_pot1());
el19zf 13:eb60628db8bf 44 lcd.refresh();
el19zf 11:494cc44777fe 45 pad.leds_on();
el19zf 11:494cc44777fe 46 wait(0.1);
el19zf 11:494cc44777fe 47 pad.leds_off();
el19zf 11:494cc44777fe 48 wait(0.1);
el19zf 11:494cc44777fe 49 }
el19zf 14:42b8a91e463c 50 pad.play_melody(5,sound_data_menu,sound_dur_menu,180,0);
el19zf 11:494cc44777fe 51 }
el19zf 11:494cc44777fe 52
el19zf 11:494cc44777fe 53 int Interface::menu(N5110 &lcd,Gamepad &pad,int option_flag)
el19zf 11:494cc44777fe 54 {
el19zf 11:494cc44777fe 55 while (!pad.A_pressed())
el19zf 11:494cc44777fe 56 {
el19zf 11:494cc44777fe 57 lcd.clear();
el19zf 11:494cc44777fe 58 lcd.printString(" MENU",0,0);
el19zf 11:494cc44777fe 59 lcd.printString(" Start",0,2);
el19zf 11:494cc44777fe 60 lcd.printString(" Start(Hell)",0,3);
el19zf 11:494cc44777fe 61 lcd.printString(" Exit",0,4);
el19zf 11:494cc44777fe 62 _d = pad.get_direction();
el19zf 12:009895f6b6e4 63 if(_d == N||_d ==NE||_d==NW){
el19zf 11:494cc44777fe 64 option_flag = fsm[option_flag].next_state[0];
el19zf 12:009895f6b6e4 65 } else if(_d == S||_d==SE||_d==SW){
el19zf 11:494cc44777fe 66 option_flag = fsm[option_flag].next_state[1];
el19zf 11:494cc44777fe 67 }
el19zf 11:494cc44777fe 68 lcd.drawSprite(0,8*option_flag+18,3,2,(int*)pointer);
el19zf 11:494cc44777fe 69 lcd.refresh();
el19zf 11:494cc44777fe 70 pad.leds_on();
el19zf 11:494cc44777fe 71 wait(0.3);
el19zf 11:494cc44777fe 72 //printf("A_pressed\n");
el19zf 14:42b8a91e463c 73 }
el19zf 14:42b8a91e463c 74 //count down, each duration 0.5s and 60 beats per minute(1s)
el19zf 14:42b8a91e463c 75 pad.play_melody(3,sound_data_begin,sound_dur_begin,60,0);
el19zf 14:42b8a91e463c 76 return option_flag;
el19zf 11:494cc44777fe 77 }
el19zf 11:494cc44777fe 78
el19zf 11:494cc44777fe 79 void Interface::game_over(N5110 &lcd,Gamepad &pad)
el19zf 11:494cc44777fe 80 {
el19zf 11:494cc44777fe 81 lcd.clear();
el19zf 13:eb60628db8bf 82 pad.init();
el19zf 11:494cc44777fe 83 while(!pad.B_pressed()){
el19zf 11:494cc44777fe 84 lcd.printString(" Game over ",0,1);
el19zf 11:494cc44777fe 85 lcd.printString(" Press B to ",0,2);
el19zf 11:494cc44777fe 86 lcd.printString(" try again? ",0,3);
el19zf 11:494cc44777fe 87 lcd.refresh();
el19zf 11:494cc44777fe 88 wait(0.1);
el19zf 11:494cc44777fe 89 //printf("Not press B\n");
el19zf 11:494cc44777fe 90 }
el19zf 12:009895f6b6e4 91 _gameover_flag = 1;
el19zf 11:494cc44777fe 92 }
el19zf 11:494cc44777fe 93
el19zf 11:494cc44777fe 94 int Interface::check_pause(N5110 &lcd,Gamepad &pad,int paused_flag)
el19zf 11:494cc44777fe 95 {
el19zf 11:494cc44777fe 96 if(pad.start_pressed())
el19zf 11:494cc44777fe 97 paused_flag = 1;
el19zf 11:494cc44777fe 98 //printf("start press\n");
el19zf 11:494cc44777fe 99 while(paused_flag == 1){
el19zf 11:494cc44777fe 100 _timer.stop();
el19zf 11:494cc44777fe 101 lcd.printString("Paused",23,2);
el19zf 11:494cc44777fe 102 lcd.refresh();
el19zf 11:494cc44777fe 103 if(pad.start_pressed())
el19zf 11:494cc44777fe 104 paused_flag = 0;
el19zf 11:494cc44777fe 105 }
el19zf 11:494cc44777fe 106 _timer.start();
el19zf 11:494cc44777fe 107 return paused_flag;
el19zf 11:494cc44777fe 108 }
el19zf 11:494cc44777fe 109
el19zf 11:494cc44777fe 110 int Interface::count_down(N5110 &lcd,int count_flag)
el19zf 11:494cc44777fe 111 {
el19zf 11:494cc44777fe 112 char buffer[6];
el19zf 13:eb60628db8bf 113 sprintf(buffer,"%d",int(count_flag/6));
el19zf 11:494cc44777fe 114 lcd.printString(buffer,40,2);
el19zf 11:494cc44777fe 115 //printf("count: %d\n",count_flag);
el19zf 11:494cc44777fe 116 count_flag--;
el19zf 11:494cc44777fe 117 return count_flag;
el19zf 11:494cc44777fe 118 }
el19zf 11:494cc44777fe 119
el19zf 11:494cc44777fe 120 void Interface::exit(N5110 &lcd,Gamepad &pad)
el19zf 11:494cc44777fe 121 {
el19zf 11:494cc44777fe 122 lcd.clear();
el19zf 13:eb60628db8bf 123 pad.init();
el19zf 14:42b8a91e463c 124 pad.tone(10,0.05);
el19zf 14:42b8a91e463c 125 pad.set_bpm(0);
el19zf 11:494cc44777fe 126 while(!pad.B_pressed()){
el19zf 11:494cc44777fe 127 lcd.printString(" Press B back ",0,2);
el19zf 11:494cc44777fe 128 lcd.printString(" to menu ",0,3);
el19zf 11:494cc44777fe 129 lcd.refresh();
el19zf 11:494cc44777fe 130 wait(0.1);
el19zf 11:494cc44777fe 131 }
el19zf 11:494cc44777fe 132 }
el19zf 11:494cc44777fe 133
el19zf 11:494cc44777fe 134 void Interface::victory(N5110 &lcd,Gamepad &pad)
el19zf 11:494cc44777fe 135 {
el19zf 11:494cc44777fe 136 lcd.clear();
el19zf 13:eb60628db8bf 137 pad.init();
el19zf 11:494cc44777fe 138 while(!pad.B_pressed()){
el19zf 11:494cc44777fe 139 lcd.printString(" Victory! ",0,1);
el19zf 11:494cc44777fe 140 lcd.printString(" Press B back ",0,2);
el19zf 11:494cc44777fe 141 lcd.printString(" to menu ",0,3);
el19zf 11:494cc44777fe 142 lcd.refresh();
el19zf 11:494cc44777fe 143 wait(0.1);
el19zf 11:494cc44777fe 144 }
el19zf 12:009895f6b6e4 145 _victory_flag = 1;
el19zf 12:009895f6b6e4 146 }
el19zf 12:009895f6b6e4 147
el19zf 12:009895f6b6e4 148 void Interface::simple_game(N5110 &lcd,Gamepad &pad)
el19zf 12:009895f6b6e4 149 {
el19zf 12:009895f6b6e4 150 lcd.clear();
el19zf 12:009895f6b6e4 151 pad.init();
el19zf 12:009895f6b6e4 152 while(!pad.A_pressed()){
el19zf 12:009895f6b6e4 153 lcd.printString(" DO YOU WANT ",0,1);
el19zf 12:009895f6b6e4 154 lcd.printString(" MAKE IT EASY? ",0,2);
el19zf 12:009895f6b6e4 155 lcd.printString(" PRESS A to",0,3);
el19zf 12:009895f6b6e4 156 lcd.printString(" try again! ",0,4);
el19zf 12:009895f6b6e4 157 lcd.refresh();
el19zf 12:009895f6b6e4 158 wait(0.1);
el19zf 12:009895f6b6e4 159 }
el19zf 12:009895f6b6e4 160 _sim_flag = 1;
el19zf 12:009895f6b6e4 161 }
el19zf 12:009895f6b6e4 162
el19zf 12:009895f6b6e4 163 int Interface::get_sim_flag()
el19zf 12:009895f6b6e4 164 {
el19zf 12:009895f6b6e4 165 //printf("Get simple_flag %d\n",_sim_flag);
el19zf 12:009895f6b6e4 166 return _sim_flag;
el19zf 12:009895f6b6e4 167 }
el19zf 12:009895f6b6e4 168
el19zf 12:009895f6b6e4 169 int Interface::get_gameover_flag()
el19zf 12:009895f6b6e4 170 {
el19zf 12:009895f6b6e4 171 return _gameover_flag;
el19zf 12:009895f6b6e4 172 }
el19zf 12:009895f6b6e4 173
el19zf 12:009895f6b6e4 174 int Interface::get_victory_flag()
el19zf 12:009895f6b6e4 175 {
el19zf 12:009895f6b6e4 176 return _victory_flag;
el19zf 11:494cc44777fe 177 }