Zeyu Feng 201377605

Dependencies:   mbed

On Minerva

Committer:
el19zf
Date:
Mon May 18 08:56:17 2020 +0000
Revision:
16:cf2bfada3adf
Parent:
15:3571beaaeed8
Child:
17:ba4d9cd1e347
update the paused interface

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