Zeyu Feng 201377605
Dependencies: mbed
On Minerva
main.cpp@12:009895f6b6e4, 2020-05-11 (annotated)
- Committer:
- el19zf
- Date:
- Mon May 11 14:43:16 2020 +0000
- Revision:
- 12:009895f6b6e4
- Parent:
- 11:494cc44777fe
- Child:
- 13:eb60628db8bf
add a test file and optimzed code
Who changed what in which revision?
User | Revision | Line number | New 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 | // includes |
eencae | 0:b7f1f47bb26a | 14 | #include "mbed.h" |
eencae | 0:b7f1f47bb26a | 15 | #include "Gamepad.h" |
eencae | 0:b7f1f47bb26a | 16 | #include "N5110.h" |
el19zf | 2:67b51ee7fc34 | 17 | #include "People.h" |
el19zf | 3:b8fbaefc496c | 18 | #include "PeopleEngine.h" |
el19zf | 4:b12a49f0b730 | 19 | #include "shot.h" |
el19zf | 8:8287d2ef965d | 20 | #include "Collision.h" |
el19zf | 11:494cc44777fe | 21 | #include "Interface.h" |
el19zf | 12:009895f6b6e4 | 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 | 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 | 6:dce38fe4e092 | 41 | // functions |
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 | 8:8287d2ef965d | 45 | void control_check(); |
el19zf | 11:494cc44777fe | 46 | void update(); |
el19zf | 7:c49f3d3b672f | 47 | void shot_update(); |
el19zf | 10:02ab3324be6c | 48 | void init_timeout(); |
el19zf | 11:494cc44777fe | 49 | void main_game(float,int); |
el19zf | 11:494cc44777fe | 50 | void init_value(); |
el19zf | 12:009895f6b6e4 | 51 | void simp_game(); |
eencae | 0:b7f1f47bb26a | 52 | |
eencae | 0:b7f1f47bb26a | 53 | int main() |
eencae | 0:b7f1f47bb26a | 54 | { |
el19zf | 12:009895f6b6e4 | 55 | int failures = run_all_tests(); |
el19zf | 3:b8fbaefc496c | 56 | //initial |
el19zf | 6:dce38fe4e092 | 57 | init(); |
el19zf | 11:494cc44777fe | 58 | |
el19zf | 11:494cc44777fe | 59 | interface.Welcome(lcd,pad); |
el19zf | 7:c49f3d3b672f | 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 | 11:494cc44777fe | 68 | main_game(0.7,25); |
el19zf | 11:494cc44777fe | 69 | break; |
el19zf | 11:494cc44777fe | 70 | case 1: |
el19zf | 11:494cc44777fe | 71 | main_game(4,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 | 11:494cc44777fe | 83 | ticker.attach(&flip,2);//set a ticker |
el19zf | 11:494cc44777fe | 84 | timeout.attach(&time_out,3);//set a timeout |
el19zf | 11:494cc44777fe | 85 | |
el19zf | 11:494cc44777fe | 86 | while((collision.get_health() > 0)&&(!collision.get_des())) |
el19zf | 11:494cc44777fe | 87 | { // increase shots with a ticker |
el19zf | 11:494cc44777fe | 88 | shot.gen_shot(timer_flag,increment,max); |
el19zf | 6:dce38fe4e092 | 89 | lcd.clear(); |
el19zf | 8:8287d2ef965d | 90 | // shot update |
el19zf | 6:dce38fe4e092 | 91 | shot_update(); |
el19zf | 8:8287d2ef965d | 92 | |
el19zf | 11:494cc44777fe | 93 | // set a count down and update lcd |
el19zf | 11:494cc44777fe | 94 | update(); |
el19zf | 11:494cc44777fe | 95 | |
el19zf | 11:494cc44777fe | 96 | pad.leds_on(); |
el19zf | 11:494cc44777fe | 97 | paused_flag = interface.check_pause(lcd,pad,paused_flag); |
el19zf | 10:02ab3324be6c | 98 | |
el19zf | 6:dce38fe4e092 | 99 | lcd.refresh(); |
el19zf | 6:dce38fe4e092 | 100 | //printf("shot refresh\n"); |
el19zf | 6:dce38fe4e092 | 101 | //printf("size = %d\n",shot._size); |
el19zf | 9:62d6559f0d50 | 102 | wait_ms(1000/6);//fps = 6 |
el19zf | 6:dce38fe4e092 | 103 | } |
el19zf | 12:009895f6b6e4 | 104 | //printf("END GAME\n"); |
el19zf | 6:dce38fe4e092 | 105 | } |
el19zf | 6:dce38fe4e092 | 106 | |
el19zf | 6:dce38fe4e092 | 107 | void init() |
el19zf | 6:dce38fe4e092 | 108 | { |
el19zf | 2:67b51ee7fc34 | 109 | lcd.init(); |
el19zf | 2:67b51ee7fc34 | 110 | lcd.setContrast(0.5); |
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(); |
eencae | 0:b7f1f47bb26a | 116 | } |
eencae | 0:b7f1f47bb26a | 117 | |
el19zf | 8:8287d2ef965d | 118 | void control_check() |
el19zf | 6:dce38fe4e092 | 119 | { |
el19zf | 6:dce38fe4e092 | 120 | engine.read_input(pad); |
el19zf | 6:dce38fe4e092 | 121 | engine.update(); |
el19zf | 8:8287d2ef965d | 122 | collision.set_pos(engine.get_pos()); |
el19zf | 11:494cc44777fe | 123 | // if people is shotted, health -1 and reset the game |
el19zf | 8:8287d2ef965d | 124 | if(collision.check(lcd)) { |
el19zf | 10:02ab3324be6c | 125 | if(!collision.get_health()){ |
el19zf | 11:494cc44777fe | 126 | interface.game_over(lcd,pad); |
el19zf | 11:494cc44777fe | 127 | lcd.clear(); |
el19zf | 10:02ab3324be6c | 128 | } else{ |
el19zf | 12:009895f6b6e4 | 129 | init_timeout(); |
el19zf | 10:02ab3324be6c | 130 | lcd.clear(); |
el19zf | 10:02ab3324be6c | 131 | } |
el19zf | 8:8287d2ef965d | 132 | } |
el19zf | 9:62d6559f0d50 | 133 | } |
el19zf | 9:62d6559f0d50 | 134 | |
el19zf | 11:494cc44777fe | 135 | void update() |
el19zf | 9:62d6559f0d50 | 136 | { |
el19zf | 10:02ab3324be6c | 137 | if(timeout_flag) |
el19zf | 10:02ab3324be6c | 138 | control_check(); |
el19zf | 10:02ab3324be6c | 139 | //control people and check collision |
el19zf | 9:62d6559f0d50 | 140 | engine.draw(lcd); |
el19zf | 8:8287d2ef965d | 141 | collision.draw(lcd); |
el19zf | 11:494cc44777fe | 142 | if(collision.check_des(lcd)){ |
el19zf | 11:494cc44777fe | 143 | interface.victory(lcd,pad); |
el19zf | 11:494cc44777fe | 144 | lcd.clear(); |
el19zf | 11:494cc44777fe | 145 | } |
el19zf | 10:02ab3324be6c | 146 | if(!timeout_flag) |
el19zf | 11:494cc44777fe | 147 | count_flag = interface.count_down(lcd,count_flag); |
el19zf | 6:dce38fe4e092 | 148 | } |
el19zf | 8:8287d2ef965d | 149 | |
el19zf | 6:dce38fe4e092 | 150 | void shot_update() |
el19zf | 6:dce38fe4e092 | 151 | { |
el19zf | 7:c49f3d3b672f | 152 | shot.update(); |
el19zf | 10:02ab3324be6c | 153 | // delete invalid shots |
el19zf | 7:c49f3d3b672f | 154 | shot.delete_shot(); |
el19zf | 10:02ab3324be6c | 155 | //generate shot to keep constant number of shots |
el19zf | 10:02ab3324be6c | 156 | shot.init_shot(); |
el19zf | 7:c49f3d3b672f | 157 | shot.draw(lcd); |
el19zf | 6:dce38fe4e092 | 158 | } |
el19zf | 9:62d6559f0d50 | 159 | |
el19zf | 11:494cc44777fe | 160 | |
el19zf | 11:494cc44777fe | 161 | void init_timeout() |
el19zf | 12:009895f6b6e4 | 162 | { |
el19zf | 12:009895f6b6e4 | 163 | lcd.clear(); |
el19zf | 12:009895f6b6e4 | 164 | lcd.drawRect(1,1,(collision.get_health()+1)*2,3,FILL_BLACK); |
el19zf | 12:009895f6b6e4 | 165 | lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT); |
el19zf | 12:009895f6b6e4 | 166 | lcd.refresh(); |
el19zf | 12:009895f6b6e4 | 167 | wait(0.5); |
el19zf | 12:009895f6b6e4 | 168 | lcd.clear(); |
el19zf | 12:009895f6b6e4 | 169 | lcd.drawRect(1,1,collision.get_health()*2,3,FILL_BLACK); |
el19zf | 12:009895f6b6e4 | 170 | lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT); |
el19zf | 12:009895f6b6e4 | 171 | lcd.refresh(); |
el19zf | 12:009895f6b6e4 | 172 | wait(0.5); |
el19zf | 12:009895f6b6e4 | 173 | engine.init(); |
el19zf | 12:009895f6b6e4 | 174 | shot.init(); |
el19zf | 12:009895f6b6e4 | 175 | //initialise time out |
el19zf | 11:494cc44777fe | 176 | timeout.attach(&time_out,3); |
el19zf | 11:494cc44777fe | 177 | timeout_flag = 0; |
el19zf | 11:494cc44777fe | 178 | count_flag = 18; |
el19zf | 10:02ab3324be6c | 179 | } |
el19zf | 10:02ab3324be6c | 180 | |
el19zf | 11:494cc44777fe | 181 | void init_value() |
el19zf | 11:494cc44777fe | 182 | { |
el19zf | 11:494cc44777fe | 183 | timer_flag = 0; |
el19zf | 10:02ab3324be6c | 184 | timeout_flag = 0; |
el19zf | 11:494cc44777fe | 185 | count_flag = 18; |
el19zf | 11:494cc44777fe | 186 | paused_flag = 0; |
el19zf | 11:494cc44777fe | 187 | option_flag = 0; |
el19zf | 12:009895f6b6e4 | 188 | } |
el19zf | 12:009895f6b6e4 | 189 | |
el19zf | 12:009895f6b6e4 | 190 | void simp_game() |
el19zf | 12:009895f6b6e4 | 191 | { |
el19zf | 12:009895f6b6e4 | 192 | if(!interface.get_victory_flag()){ |
el19zf | 12:009895f6b6e4 | 193 | interface.simple_game(lcd,pad); |
el19zf | 12:009895f6b6e4 | 194 | if(interface.get_sim_flag()){ |
el19zf | 12:009895f6b6e4 | 195 | init(); |
el19zf | 12:009895f6b6e4 | 196 | main_game(2.5,30); |
el19zf | 12:009895f6b6e4 | 197 | } |
el19zf | 12:009895f6b6e4 | 198 | } |
el19zf | 12:009895f6b6e4 | 199 | interface.init(); |
el19zf | 12:009895f6b6e4 | 200 | } |