Zeyu Feng 201377605

Dependencies:   mbed

On Minerva

Committer:
el19zf
Date:
Thu May 21 15:20:33 2020 +0000
Revision:
18:93d050e7705d
Parent:
17:ba4d9cd1e347
Child:
19:5083339b55e8
build a Instruction class, and add it to menu

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el19zf 7:c49f3d3b672f 1 /*
eencae 0:b7f1f47bb26a 2 ELEC2645 Embedded Systems Project
eencae 0:b7f1f47bb26a 3 School of Electronic & Electrical Engineering
eencae 0:b7f1f47bb26a 4 University of Leeds
eencae 0:b7f1f47bb26a 5 2019/20
eencae 0:b7f1f47bb26a 6
el19zf 1:b133934e0d45 7 Name:Zeyu Feng
el19zf 1:b133934e0d45 8 Username:el19zf
el19zf 1:b133934e0d45 9 Student ID Number:201377605
el19zf 1:b133934e0d45 10 Date:11/3/2020
eencae 0:b7f1f47bb26a 11 */
eencae 0:b7f1f47bb26a 12
eencae 0:b7f1f47bb26a 13 #include "mbed.h"
eencae 0:b7f1f47bb26a 14 #include "Gamepad.h"
eencae 0:b7f1f47bb26a 15 #include "N5110.h"
el19zf 2:67b51ee7fc34 16 #include "People.h"
el19zf 3:b8fbaefc496c 17 #include "PeopleEngine.h"
el19zf 4:b12a49f0b730 18 #include "shot.h"
el19zf 8:8287d2ef965d 19 #include "Collision.h"
el19zf 11:494cc44777fe 20 #include "Interface.h"
el19zf 18:93d050e7705d 21 #include "Instruction.h"
el19zf 15:3571beaaeed8 22 #include "tests.h"
el19zf 6:dce38fe4e092 23
eencae 0:b7f1f47bb26a 24 // objects
eencae 0:b7f1f47bb26a 25 Gamepad pad;
eencae 0:b7f1f47bb26a 26 N5110 lcd;
el19zf 3:b8fbaefc496c 27 PeopleEngine engine;
el19zf 4:b12a49f0b730 28 shot shot;
el19zf 8:8287d2ef965d 29 Collision collision;
el19zf 11:494cc44777fe 30 Interface interface;
el19zf 16:cf2bfada3adf 31 Sound sound;
el19zf 18:93d050e7705d 32 Instruction instruction;
el19zf 4:b12a49f0b730 33
el19zf 6:dce38fe4e092 34 //flag and triggers
el19zf 9:62d6559f0d50 35 Ticker ticker;//gradually increase number of shots
el19zf 9:62d6559f0d50 36 Timeout timeout;
el19zf 6:dce38fe4e092 37 volatile int timer_flag = 0;
el19zf 9:62d6559f0d50 38 volatile int timeout_flag = 0;
el19zf 11:494cc44777fe 39 volatile int count_flag = 18;
el19zf 11:494cc44777fe 40 volatile int paused_flag = 0;
el19zf 11:494cc44777fe 41 volatile int option_flag = 0;
el19zf 17:ba4d9cd1e347 42 volatile int defined_rate_flag = 0;
el19zf 17:ba4d9cd1e347 43 volatile int defined_max_flag = 0;
el19zf 6:dce38fe4e092 44
el19zf 13:eb60628db8bf 45 // prototypes
el19zf 11:494cc44777fe 46 void flip(){ timer_flag = 1; }
el19zf 11:494cc44777fe 47 void time_out(){ timeout_flag = 1; }
el19zf 6:dce38fe4e092 48 void init();
el19zf 13:eb60628db8bf 49 void init_value();
el19zf 8:8287d2ef965d 50 void control_check();
el19zf 16:cf2bfada3adf 51 void update(float, int);
el19zf 10:02ab3324be6c 52 void init_timeout();
el19zf 11:494cc44777fe 53 void main_game(float,int);
el19zf 12:009895f6b6e4 54 void simp_game();
el19zf 17:ba4d9cd1e347 55 void undefined();
eencae 0:b7f1f47bb26a 56
eencae 0:b7f1f47bb26a 57 int main()
eencae 0:b7f1f47bb26a 58 {
el19zf 13:eb60628db8bf 59 #ifdef WITH_TESTING
el19zf 12:009895f6b6e4 60 int failures = run_all_tests();
el19zf 13:eb60628db8bf 61 #endif
el19zf 3:b8fbaefc496c 62 //initial
el19zf 6:dce38fe4e092 63 init();
el19zf 11:494cc44777fe 64
el19zf 11:494cc44777fe 65 interface.Welcome(lcd,pad);
el19zf 13:eb60628db8bf 66
el19zf 11:494cc44777fe 67 //a infinite loop
el19zf 6:dce38fe4e092 68 while(1) {
el19zf 11:494cc44777fe 69 init();
el19zf 11:494cc44777fe 70 init_value();
el19zf 17:ba4d9cd1e347 71 option_flag= interface.menu(lcd,pad,option_flag);
el19zf 11:494cc44777fe 72 switch(option_flag){
el19zf 11:494cc44777fe 73 case 0:
el19zf 17:ba4d9cd1e347 74 main_game(0.15,13);
el19zf 11:494cc44777fe 75 break;
el19zf 11:494cc44777fe 76 case 1:
el19zf 17:ba4d9cd1e347 77 main_game(1,30);
el19zf 12:009895f6b6e4 78 simp_game();
el19zf 11:494cc44777fe 79 break;
el19zf 11:494cc44777fe 80 case 2:
el19zf 17:ba4d9cd1e347 81 undefined();
el19zf 17:ba4d9cd1e347 82 break;
el19zf 17:ba4d9cd1e347 83 case 3:
el19zf 18:93d050e7705d 84 instruction.draw(lcd,pad);
el19zf 18:93d050e7705d 85 break;
el19zf 18:93d050e7705d 86 case 4:
el19zf 11:494cc44777fe 87 interface.exit(lcd,pad);
el19zf 11:494cc44777fe 88 break;
el19zf 17:ba4d9cd1e347 89 }
el19zf 18:93d050e7705d 90 #ifdef DEBUG
el19zf 18:93d050e7705d 91 printf("END LOOP\n");
el19zf 18:93d050e7705d 92 #endif
el19zf 11:494cc44777fe 93 }
el19zf 11:494cc44777fe 94 }
el19zf 11:494cc44777fe 95
el19zf 11:494cc44777fe 96 void main_game(float increment,int max){
el19zf 11:494cc44777fe 97
el19zf 11:494cc44777fe 98 ticker.attach(&flip,2);//set a ticker
el19zf 11:494cc44777fe 99 timeout.attach(&time_out,3);//set a timeout
el19zf 11:494cc44777fe 100
el19zf 11:494cc44777fe 101 while((collision.get_health() > 0)&&(!collision.get_des()))
el19zf 13:eb60628db8bf 102 {
el19zf 6:dce38fe4e092 103 lcd.clear();
el19zf 13:eb60628db8bf 104 // increase shots with a ticker
el19zf 13:eb60628db8bf 105 shot.gen_shot(timer_flag,increment,max);
el19zf 8:8287d2ef965d 106 // shot update
el19zf 15:3571beaaeed8 107 shot.draw(lcd);
el19zf 8:8287d2ef965d 108
el19zf 11:494cc44777fe 109 // set a count down and update lcd
el19zf 16:cf2bfada3adf 110 update(increment, max);
el19zf 11:494cc44777fe 111
el19zf 11:494cc44777fe 112 pad.leds_on();
el19zf 10:02ab3324be6c 113
el19zf 6:dce38fe4e092 114 lcd.refresh();
el19zf 6:dce38fe4e092 115 //printf("shot refresh\n");
el19zf 6:dce38fe4e092 116 //printf("size = %d\n",shot._size);
el19zf 9:62d6559f0d50 117 wait_ms(1000/6);//fps = 6
el19zf 6:dce38fe4e092 118 }
el19zf 18:93d050e7705d 119 #ifdef DEBUG
el19zf 18:93d050e7705d 120 printf("END GAME\n");
el19zf 18:93d050e7705d 121 #endif
el19zf 6:dce38fe4e092 122 }
el19zf 6:dce38fe4e092 123
el19zf 6:dce38fe4e092 124 void init()
el19zf 6:dce38fe4e092 125 {
el19zf 2:67b51ee7fc34 126 lcd.init();
el19zf 3:b8fbaefc496c 127 engine.init();
el19zf 2:67b51ee7fc34 128 pad.init();
el19zf 7:c49f3d3b672f 129 shot.init();
el19zf 8:8287d2ef965d 130 collision.init();
el19zf 2:67b51ee7fc34 131 lcd.refresh();
el19zf 13:eb60628db8bf 132 interface.init();
el19zf 10:02ab3324be6c 133 }
el19zf 10:02ab3324be6c 134
el19zf 11:494cc44777fe 135 void init_value()
el19zf 11:494cc44777fe 136 {
el19zf 11:494cc44777fe 137 timer_flag = 0;
el19zf 10:02ab3324be6c 138 timeout_flag = 0;
el19zf 11:494cc44777fe 139 count_flag = 18;
el19zf 11:494cc44777fe 140 paused_flag = 0;
el19zf 11:494cc44777fe 141 option_flag = 0;
el19zf 17:ba4d9cd1e347 142 defined_rate_flag = 0;
el19zf 17:ba4d9cd1e347 143 defined_max_flag = 0;
el19zf 12:009895f6b6e4 144 }
el19zf 12:009895f6b6e4 145
el19zf 13:eb60628db8bf 146 void control_check()
el19zf 13:eb60628db8bf 147 {
el19zf 13:eb60628db8bf 148 engine.read_input(pad);
el19zf 13:eb60628db8bf 149 engine.update();
el19zf 13:eb60628db8bf 150 collision.set_pos(engine.get_pos());
el19zf 13:eb60628db8bf 151 // if people is shotted, health -1 and reset the game
el19zf 13:eb60628db8bf 152 if(collision.check(lcd)) {
el19zf 14:42b8a91e463c 153 pad.play_melody(2,sound_data_col,sound_dur_col,120,0);
el19zf 13:eb60628db8bf 154 if(!collision.get_health()){
el19zf 13:eb60628db8bf 155 interface.game_over(lcd,pad);
el19zf 13:eb60628db8bf 156 } else{
el19zf 13:eb60628db8bf 157 init_timeout();
el19zf 13:eb60628db8bf 158 }
el19zf 13:eb60628db8bf 159 lcd.clear();
el19zf 13:eb60628db8bf 160 }
el19zf 13:eb60628db8bf 161 }
el19zf 13:eb60628db8bf 162
el19zf 16:cf2bfada3adf 163 void update(float increment, int max)
el19zf 13:eb60628db8bf 164 {
el19zf 13:eb60628db8bf 165 if(timeout_flag){
el19zf 13:eb60628db8bf 166 control_check();
el19zf 16:cf2bfada3adf 167 paused_flag = interface.check_pause(lcd,pad,paused_flag,increment,max);
el19zf 13:eb60628db8bf 168 }else{
el19zf 13:eb60628db8bf 169 //if timeout_flag count down number and Joystick have been banned
el19zf 13:eb60628db8bf 170 count_flag = interface.count_down(lcd,count_flag);
el19zf 16:cf2bfada3adf 171 pad.reset_buttons();
el19zf 13:eb60628db8bf 172 }
el19zf 13:eb60628db8bf 173 //control people and check collision
el19zf 13:eb60628db8bf 174 if(!collision.get_check_col()){
el19zf 13:eb60628db8bf 175 engine.draw(lcd,timeout_flag);
el19zf 13:eb60628db8bf 176 collision.draw(lcd);
el19zf 13:eb60628db8bf 177 }else{
el19zf 13:eb60628db8bf 178 collision.set_check_col();
el19zf 13:eb60628db8bf 179 }
el19zf 13:eb60628db8bf 180 //printf("timeout_flag = %d\n",timeout_flag);
el19zf 13:eb60628db8bf 181 //check destination
el19zf 13:eb60628db8bf 182 if(collision.check_des(lcd)){
el19zf 13:eb60628db8bf 183 interface.victory(lcd,pad);
el19zf 13:eb60628db8bf 184 lcd.clear();
el19zf 13:eb60628db8bf 185 }
el19zf 13:eb60628db8bf 186 }
el19zf 13:eb60628db8bf 187
el19zf 13:eb60628db8bf 188 //reset timeout after collision (health > 0)
el19zf 13:eb60628db8bf 189 void init_timeout()
el19zf 13:eb60628db8bf 190 {
el19zf 13:eb60628db8bf 191 collision.draw_collision(lcd);
el19zf 13:eb60628db8bf 192 engine.init();
el19zf 13:eb60628db8bf 193 shot.init();
el19zf 16:cf2bfada3adf 194 //initialise time out,flag and bottons
el19zf 13:eb60628db8bf 195 timeout.attach(&time_out,3);
el19zf 13:eb60628db8bf 196 timeout_flag = 0;
el19zf 13:eb60628db8bf 197 count_flag = 18;
el19zf 16:cf2bfada3adf 198 //count down, each duration 0.5s and 60 beats per minute(1s)
el19zf 16:cf2bfada3adf 199 sound.count_sound(pad);
el19zf 16:cf2bfada3adf 200 pad.reset_buttons();
el19zf 13:eb60628db8bf 201 }
el19zf 13:eb60628db8bf 202
el19zf 12:009895f6b6e4 203 void simp_game()
el19zf 12:009895f6b6e4 204 {
el19zf 12:009895f6b6e4 205 if(!interface.get_victory_flag()){
el19zf 13:eb60628db8bf 206
el19zf 12:009895f6b6e4 207 interface.simple_game(lcd,pad);
el19zf 12:009895f6b6e4 208 if(interface.get_sim_flag()){
el19zf 12:009895f6b6e4 209 init();
el19zf 15:3571beaaeed8 210 init_value();
el19zf 17:ba4d9cd1e347 211 main_game(0.5,23);
el19zf 12:009895f6b6e4 212 }
el19zf 12:009895f6b6e4 213 }
el19zf 12:009895f6b6e4 214 interface.init();
el19zf 17:ba4d9cd1e347 215 }
el19zf 17:ba4d9cd1e347 216
el19zf 17:ba4d9cd1e347 217 void undefined()
el19zf 17:ba4d9cd1e347 218 {
el19zf 17:ba4d9cd1e347 219 defined_rate_flag = interface.undefined_rate(lcd,pad,defined_rate_flag);
el19zf 17:ba4d9cd1e347 220 defined_max_flag = interface.undefined_max(lcd,pad,defined_max_flag);
el19zf 17:ba4d9cd1e347 221 // 0 1 2 3 4 flag
el19zf 17:ba4d9cd1e347 222 // 0.3 0.4 0.5 0.6 0.7 shots/frame
el19zf 17:ba4d9cd1e347 223 // 15 20 25 30 35 Maximum shots
el19zf 17:ba4d9cd1e347 224 main_game(0.1*(defined_rate_flag + 3),5*(defined_max_flag + 3));
el19zf 17:ba4d9cd1e347 225 }
el19zf 17:ba4d9cd1e347 226