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:
15:3571beaaeed8
add a sound class include sound data and sound duration

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 13:eb60628db8bf 21 # include "tests.h"
el19zf 6:dce38fe4e092 22
eencae 0:b7f1f47bb26a 23 // objects
eencae 0:b7f1f47bb26a 24 Gamepad pad;
eencae 0:b7f1f47bb26a 25 N5110 lcd;
el19zf 3:b8fbaefc496c 26 PeopleEngine engine;
el19zf 4:b12a49f0b730 27 shot shot;
el19zf 8:8287d2ef965d 28 Collision collision;
el19zf 11:494cc44777fe 29 Interface interface;
el19zf 4:b12a49f0b730 30
el19zf 6:dce38fe4e092 31 //flag and triggers
el19zf 9:62d6559f0d50 32 Ticker ticker;//gradually increase number of shots
el19zf 9:62d6559f0d50 33 Timeout timeout;
el19zf 6:dce38fe4e092 34 volatile int timer_flag = 0;
el19zf 9:62d6559f0d50 35 volatile int timeout_flag = 0;
el19zf 11:494cc44777fe 36 volatile int count_flag = 18;
el19zf 11:494cc44777fe 37 volatile int paused_flag = 0;
el19zf 11:494cc44777fe 38 volatile int option_flag = 0;
el19zf 6:dce38fe4e092 39
el19zf 13:eb60628db8bf 40 // prototypes
el19zf 11:494cc44777fe 41 void flip(){ timer_flag = 1; }
el19zf 11:494cc44777fe 42 void time_out(){ timeout_flag = 1; }
el19zf 6:dce38fe4e092 43 void init();
el19zf 13:eb60628db8bf 44 void init_value();
el19zf 8:8287d2ef965d 45 void control_check();
el19zf 11:494cc44777fe 46 void update();
el19zf 10:02ab3324be6c 47 void init_timeout();
el19zf 11:494cc44777fe 48 void main_game(float,int);
el19zf 12:009895f6b6e4 49 void simp_game();
eencae 0:b7f1f47bb26a 50
eencae 0:b7f1f47bb26a 51 int main()
eencae 0:b7f1f47bb26a 52 {
el19zf 13:eb60628db8bf 53 #ifdef WITH_TESTING
el19zf 12:009895f6b6e4 54 int failures = run_all_tests();
el19zf 13:eb60628db8bf 55 #endif
el19zf 3:b8fbaefc496c 56 //initial
el19zf 6:dce38fe4e092 57 init();
el19zf 11:494cc44777fe 58
el19zf 11:494cc44777fe 59 interface.Welcome(lcd,pad);
el19zf 13:eb60628db8bf 60
el19zf 11:494cc44777fe 61 //a infinite loop
el19zf 6:dce38fe4e092 62 while(1) {
el19zf 11:494cc44777fe 63 init();
el19zf 11:494cc44777fe 64 init_value();
el19zf 11:494cc44777fe 65 int option_flag= interface.menu(lcd,pad,option_flag);
el19zf 11:494cc44777fe 66 switch(option_flag){
el19zf 11:494cc44777fe 67 case 0:
el19zf 13:eb60628db8bf 68 main_game(0.05,20);
el19zf 11:494cc44777fe 69 break;
el19zf 11:494cc44777fe 70 case 1:
el19zf 13:eb60628db8bf 71 main_game(1,40);
el19zf 12:009895f6b6e4 72 simp_game();
el19zf 11:494cc44777fe 73 break;
el19zf 11:494cc44777fe 74 case 2:
el19zf 11:494cc44777fe 75 interface.exit(lcd,pad);
el19zf 11:494cc44777fe 76 break;
el19zf 11:494cc44777fe 77 }
el19zf 11:494cc44777fe 78 }
el19zf 11:494cc44777fe 79 }
el19zf 11:494cc44777fe 80
el19zf 11:494cc44777fe 81 void main_game(float increment,int max){
el19zf 11:494cc44777fe 82
el19zf 14:42b8a91e463c 83 pad.reset_buttons();
el19zf 11:494cc44777fe 84 ticker.attach(&flip,2);//set a ticker
el19zf 11:494cc44777fe 85 timeout.attach(&time_out,3);//set a timeout
el19zf 11:494cc44777fe 86
el19zf 11:494cc44777fe 87 while((collision.get_health() > 0)&&(!collision.get_des()))
el19zf 13:eb60628db8bf 88 {
el19zf 6:dce38fe4e092 89 lcd.clear();
el19zf 13:eb60628db8bf 90 // increase shots with a ticker
el19zf 13:eb60628db8bf 91 shot.gen_shot(timer_flag,increment,max);
el19zf 8:8287d2ef965d 92 // shot update
el19zf 13:eb60628db8bf 93 shot.update(lcd);
el19zf 8:8287d2ef965d 94
el19zf 11:494cc44777fe 95 // set a count down and update lcd
el19zf 11:494cc44777fe 96 update();
el19zf 11:494cc44777fe 97
el19zf 11:494cc44777fe 98 pad.leds_on();
el19zf 11:494cc44777fe 99 paused_flag = interface.check_pause(lcd,pad,paused_flag);
el19zf 10:02ab3324be6c 100
el19zf 6:dce38fe4e092 101 lcd.refresh();
el19zf 6:dce38fe4e092 102 //printf("shot refresh\n");
el19zf 6:dce38fe4e092 103 //printf("size = %d\n",shot._size);
el19zf 9:62d6559f0d50 104 wait_ms(1000/6);//fps = 6
el19zf 6:dce38fe4e092 105 }
el19zf 12:009895f6b6e4 106 //printf("END GAME\n");
el19zf 6:dce38fe4e092 107 }
el19zf 6:dce38fe4e092 108
el19zf 6:dce38fe4e092 109 void init()
el19zf 6:dce38fe4e092 110 {
el19zf 2:67b51ee7fc34 111 lcd.init();
el19zf 3:b8fbaefc496c 112 engine.init();
el19zf 2:67b51ee7fc34 113 pad.init();
el19zf 7:c49f3d3b672f 114 shot.init();
el19zf 8:8287d2ef965d 115 collision.init();
el19zf 2:67b51ee7fc34 116 lcd.refresh();
el19zf 13:eb60628db8bf 117 interface.init();
el19zf 10:02ab3324be6c 118 }
el19zf 10:02ab3324be6c 119
el19zf 11:494cc44777fe 120 void init_value()
el19zf 11:494cc44777fe 121 {
el19zf 11:494cc44777fe 122 timer_flag = 0;
el19zf 10:02ab3324be6c 123 timeout_flag = 0;
el19zf 11:494cc44777fe 124 count_flag = 18;
el19zf 11:494cc44777fe 125 paused_flag = 0;
el19zf 11:494cc44777fe 126 option_flag = 0;
el19zf 12:009895f6b6e4 127 }
el19zf 12:009895f6b6e4 128
el19zf 13:eb60628db8bf 129 void control_check()
el19zf 13:eb60628db8bf 130 {
el19zf 13:eb60628db8bf 131 engine.read_input(pad);
el19zf 13:eb60628db8bf 132 engine.update();
el19zf 13:eb60628db8bf 133 collision.set_pos(engine.get_pos());
el19zf 13:eb60628db8bf 134 // if people is shotted, health -1 and reset the game
el19zf 13:eb60628db8bf 135 if(collision.check(lcd)) {
el19zf 14:42b8a91e463c 136 pad.play_melody(2,sound_data_col,sound_dur_col,120,0);
el19zf 13:eb60628db8bf 137 if(!collision.get_health()){
el19zf 13:eb60628db8bf 138 interface.game_over(lcd,pad);
el19zf 13:eb60628db8bf 139 } else{
el19zf 13:eb60628db8bf 140 init_timeout();
el19zf 13:eb60628db8bf 141 }
el19zf 13:eb60628db8bf 142 lcd.clear();
el19zf 13:eb60628db8bf 143 }
el19zf 13:eb60628db8bf 144 }
el19zf 13:eb60628db8bf 145
el19zf 13:eb60628db8bf 146 void update()
el19zf 13:eb60628db8bf 147 {
el19zf 13:eb60628db8bf 148 if(timeout_flag){
el19zf 13:eb60628db8bf 149 control_check();
el19zf 13:eb60628db8bf 150 }else{
el19zf 13:eb60628db8bf 151 //if timeout_flag count down number and Joystick have been banned
el19zf 13:eb60628db8bf 152 count_flag = interface.count_down(lcd,count_flag);
el19zf 13:eb60628db8bf 153 }
el19zf 13:eb60628db8bf 154 //control people and check collision
el19zf 13:eb60628db8bf 155 if(!collision.get_check_col()){
el19zf 13:eb60628db8bf 156 engine.draw(lcd,timeout_flag);
el19zf 13:eb60628db8bf 157 collision.draw(lcd);
el19zf 13:eb60628db8bf 158 }else{
el19zf 13:eb60628db8bf 159 collision.set_check_col();
el19zf 13:eb60628db8bf 160 }
el19zf 13:eb60628db8bf 161 //printf("timeout_flag = %d\n",timeout_flag);
el19zf 13:eb60628db8bf 162 //check destination
el19zf 13:eb60628db8bf 163 if(collision.check_des(lcd)){
el19zf 13:eb60628db8bf 164 interface.victory(lcd,pad);
el19zf 13:eb60628db8bf 165 lcd.clear();
el19zf 13:eb60628db8bf 166 }
el19zf 13:eb60628db8bf 167 }
el19zf 13:eb60628db8bf 168
el19zf 13:eb60628db8bf 169 //reset timeout after collision (health > 0)
el19zf 13:eb60628db8bf 170 void init_timeout()
el19zf 13:eb60628db8bf 171 {
el19zf 13:eb60628db8bf 172 collision.draw_collision(lcd);
el19zf 13:eb60628db8bf 173 engine.init();
el19zf 13:eb60628db8bf 174 shot.init();
el19zf 13:eb60628db8bf 175 //initialise time out
el19zf 13:eb60628db8bf 176 timeout.attach(&time_out,3);
el19zf 13:eb60628db8bf 177 timeout_flag = 0;
el19zf 13:eb60628db8bf 178 count_flag = 18;
el19zf 13:eb60628db8bf 179 }
el19zf 13:eb60628db8bf 180
el19zf 12:009895f6b6e4 181 void simp_game()
el19zf 12:009895f6b6e4 182 {
el19zf 12:009895f6b6e4 183 if(!interface.get_victory_flag()){
el19zf 13:eb60628db8bf 184
el19zf 12:009895f6b6e4 185 interface.simple_game(lcd,pad);
el19zf 12:009895f6b6e4 186 if(interface.get_sim_flag()){
el19zf 12:009895f6b6e4 187 init();
el19zf 13:eb60628db8bf 188 main_game(0.5,30);
el19zf 12:009895f6b6e4 189 }
el19zf 12:009895f6b6e4 190 }
el19zf 12:009895f6b6e4 191 interface.init();
el19zf 12:009895f6b6e4 192 }