
Zeyu Feng 201377605
Dependencies: mbed
On Minerva
main.cpp@10:02ab3324be6c, 2020-05-10 (annotated)
- Committer:
- el19zf
- Date:
- Sun May 10 05:16:51 2020 +0000
- Revision:
- 10:02ab3324be6c
- Parent:
- 9:62d6559f0d50
- Child:
- 11:494cc44777fe
add welcome interface and 'gameover'
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" |
eencae | 0:b7f1f47bb26a | 21 | |
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 | 4:b12a49f0b730 | 29 | |
el19zf | 6:dce38fe4e092 | 30 | //flag and triggers |
el19zf | 9:62d6559f0d50 | 31 | Ticker ticker;//gradually increase number of shots |
el19zf | 9:62d6559f0d50 | 32 | Timeout timeout; |
el19zf | 6:dce38fe4e092 | 33 | volatile int timer_flag = 0; |
el19zf | 9:62d6559f0d50 | 34 | volatile int timeout_flag = 0; |
el19zf | 9:62d6559f0d50 | 35 | volatile int count_flag = 30; |
el19zf | 6:dce38fe4e092 | 36 | |
el19zf | 6:dce38fe4e092 | 37 | // functions |
el19zf | 7:c49f3d3b672f | 38 | void flip() |
el19zf | 7:c49f3d3b672f | 39 | { |
el19zf | 6:dce38fe4e092 | 40 | timer_flag = 1; |
el19zf | 6:dce38fe4e092 | 41 | } |
el19zf | 9:62d6559f0d50 | 42 | void time_out() |
el19zf | 9:62d6559f0d50 | 43 | { |
el19zf | 9:62d6559f0d50 | 44 | timeout_flag = 1; |
el19zf | 9:62d6559f0d50 | 45 | } |
el19zf | 6:dce38fe4e092 | 46 | void init(); |
el19zf | 8:8287d2ef965d | 47 | void control_check(); |
el19zf | 9:62d6559f0d50 | 48 | void draw(); |
el19zf | 7:c49f3d3b672f | 49 | void shot_update(); |
el19zf | 9:62d6559f0d50 | 50 | void count_down(); |
el19zf | 10:02ab3324be6c | 51 | void reset_leds(); |
el19zf | 10:02ab3324be6c | 52 | void welcome(); |
el19zf | 10:02ab3324be6c | 53 | void init_timeout(); |
el19zf | 10:02ab3324be6c | 54 | void game_over(); |
eencae | 0:b7f1f47bb26a | 55 | |
eencae | 0:b7f1f47bb26a | 56 | int main() |
eencae | 0:b7f1f47bb26a | 57 | { |
el19zf | 3:b8fbaefc496c | 58 | //initial |
el19zf | 6:dce38fe4e092 | 59 | init(); |
el19zf | 8:8287d2ef965d | 60 | //set a ticker |
el19zf | 10:02ab3324be6c | 61 | welcome(); |
el19zf | 8:8287d2ef965d | 62 | ticker.attach(&flip,2); |
el19zf | 9:62d6559f0d50 | 63 | timeout.attach(&time_out,5); |
el19zf | 7:c49f3d3b672f | 64 | |
el19zf | 6:dce38fe4e092 | 65 | //a infinite loop to control position of the people, update the game state |
el19zf | 6:dce38fe4e092 | 66 | while(1) { |
el19zf | 10:02ab3324be6c | 67 | // increase shots with a ticker |
el19zf | 10:02ab3324be6c | 68 | shot.gen_shot(timer_flag); |
el19zf | 6:dce38fe4e092 | 69 | lcd.clear(); |
el19zf | 8:8287d2ef965d | 70 | // shot update |
el19zf | 6:dce38fe4e092 | 71 | shot_update(); |
el19zf | 8:8287d2ef965d | 72 | |
el19zf | 10:02ab3324be6c | 73 | // lose control before timeout |
el19zf | 9:62d6559f0d50 | 74 | draw(); |
el19zf | 10:02ab3324be6c | 75 | reset_leds(); |
el19zf | 10:02ab3324be6c | 76 | |
el19zf | 6:dce38fe4e092 | 77 | lcd.refresh(); |
el19zf | 6:dce38fe4e092 | 78 | //printf("shot refresh\n"); |
el19zf | 6:dce38fe4e092 | 79 | //printf("size = %d\n",shot._size); |
el19zf | 9:62d6559f0d50 | 80 | wait_ms(1000/6);//fps = 6 |
el19zf | 6:dce38fe4e092 | 81 | } |
el19zf | 6:dce38fe4e092 | 82 | } |
el19zf | 6:dce38fe4e092 | 83 | |
el19zf | 6:dce38fe4e092 | 84 | |
el19zf | 6:dce38fe4e092 | 85 | void init() |
el19zf | 6:dce38fe4e092 | 86 | { |
el19zf | 2:67b51ee7fc34 | 87 | lcd.init(); |
el19zf | 2:67b51ee7fc34 | 88 | lcd.setContrast(0.5); |
el19zf | 3:b8fbaefc496c | 89 | engine.init(); |
el19zf | 2:67b51ee7fc34 | 90 | pad.init(); |
el19zf | 7:c49f3d3b672f | 91 | shot.init(); |
el19zf | 8:8287d2ef965d | 92 | collision.init(); |
el19zf | 2:67b51ee7fc34 | 93 | lcd.refresh(); |
eencae | 0:b7f1f47bb26a | 94 | } |
eencae | 0:b7f1f47bb26a | 95 | |
el19zf | 8:8287d2ef965d | 96 | void control_check() |
el19zf | 6:dce38fe4e092 | 97 | { |
el19zf | 6:dce38fe4e092 | 98 | engine.read_input(pad); |
el19zf | 6:dce38fe4e092 | 99 | engine.update(); |
el19zf | 8:8287d2ef965d | 100 | collision.set_pos(engine.get_pos()); |
el19zf | 10:02ab3324be6c | 101 | // if people is shotted, health -1 and init the game |
el19zf | 8:8287d2ef965d | 102 | if(collision.check(lcd)) { |
el19zf | 10:02ab3324be6c | 103 | if(!collision.get_health()){ |
el19zf | 10:02ab3324be6c | 104 | game_over(); |
el19zf | 10:02ab3324be6c | 105 | } else{ |
el19zf | 10:02ab3324be6c | 106 | engine.init(); |
el19zf | 10:02ab3324be6c | 107 | lcd.clear(); |
el19zf | 10:02ab3324be6c | 108 | shot.init(); |
el19zf | 10:02ab3324be6c | 109 | init_timeout(); |
el19zf | 10:02ab3324be6c | 110 | } |
el19zf | 8:8287d2ef965d | 111 | } |
el19zf | 9:62d6559f0d50 | 112 | } |
el19zf | 9:62d6559f0d50 | 113 | |
el19zf | 9:62d6559f0d50 | 114 | void draw() |
el19zf | 9:62d6559f0d50 | 115 | { |
el19zf | 10:02ab3324be6c | 116 | if(timeout_flag) |
el19zf | 10:02ab3324be6c | 117 | control_check(); |
el19zf | 10:02ab3324be6c | 118 | //control people and check collision |
el19zf | 9:62d6559f0d50 | 119 | engine.draw(lcd); |
el19zf | 8:8287d2ef965d | 120 | collision.draw(lcd); |
el19zf | 10:02ab3324be6c | 121 | if(!timeout_flag) |
el19zf | 10:02ab3324be6c | 122 | count_down(); |
el19zf | 6:dce38fe4e092 | 123 | } |
el19zf | 8:8287d2ef965d | 124 | |
el19zf | 6:dce38fe4e092 | 125 | void shot_update() |
el19zf | 6:dce38fe4e092 | 126 | { |
el19zf | 7:c49f3d3b672f | 127 | shot.update(); |
el19zf | 10:02ab3324be6c | 128 | // delete invalid shots |
el19zf | 7:c49f3d3b672f | 129 | shot.delete_shot(); |
el19zf | 10:02ab3324be6c | 130 | //generate shot to keep constant number of shots |
el19zf | 10:02ab3324be6c | 131 | shot.init_shot(); |
el19zf | 7:c49f3d3b672f | 132 | shot.draw(lcd); |
el19zf | 6:dce38fe4e092 | 133 | } |
el19zf | 9:62d6559f0d50 | 134 | |
el19zf | 9:62d6559f0d50 | 135 | void count_down() |
el19zf | 9:62d6559f0d50 | 136 | { |
el19zf | 9:62d6559f0d50 | 137 | char buffer[6]; |
el19zf | 9:62d6559f0d50 | 138 | sprintf(buffer,"%d",(int)count_flag/6); |
el19zf | 9:62d6559f0d50 | 139 | lcd.printString(buffer,40,2); |
el19zf | 9:62d6559f0d50 | 140 | printf("count: %d\n",count_flag); |
el19zf | 9:62d6559f0d50 | 141 | count_flag--; |
el19zf | 10:02ab3324be6c | 142 | } |
el19zf | 10:02ab3324be6c | 143 | void reset_leds() |
el19zf | 10:02ab3324be6c | 144 | { |
el19zf | 10:02ab3324be6c | 145 | pad.leds_on(); |
el19zf | 10:02ab3324be6c | 146 | } |
el19zf | 10:02ab3324be6c | 147 | void welcome(){ |
el19zf | 10:02ab3324be6c | 148 | lcd.printString(" Welcome! ",0,1); |
el19zf | 10:02ab3324be6c | 149 | lcd.printString(" Game by ",0,2); |
el19zf | 10:02ab3324be6c | 150 | lcd.printString(" Z. FENG ",0,3); |
el19zf | 10:02ab3324be6c | 151 | lcd.refresh(); |
el19zf | 10:02ab3324be6c | 152 | while (pad.A_pressed() ==false) { |
el19zf | 10:02ab3324be6c | 153 | pad.leds_on(); |
el19zf | 10:02ab3324be6c | 154 | wait(0.1); |
el19zf | 10:02ab3324be6c | 155 | pad.leds_off(); |
el19zf | 10:02ab3324be6c | 156 | wait(0.1); |
el19zf | 10:02ab3324be6c | 157 | } |
el19zf | 10:02ab3324be6c | 158 | } |
el19zf | 10:02ab3324be6c | 159 | |
el19zf | 10:02ab3324be6c | 160 | void init_timeout(){ |
el19zf | 10:02ab3324be6c | 161 | timeout.attach(&time_out,5); |
el19zf | 10:02ab3324be6c | 162 | timeout_flag = 0; |
el19zf | 10:02ab3324be6c | 163 | count_flag = 30; |
el19zf | 10:02ab3324be6c | 164 | } |
el19zf | 10:02ab3324be6c | 165 | |
el19zf | 10:02ab3324be6c | 166 | void game_over(){ |
el19zf | 10:02ab3324be6c | 167 | while(pad.B_pressed()==false){ |
el19zf | 10:02ab3324be6c | 168 | lcd.clear(); |
el19zf | 10:02ab3324be6c | 169 | lcd.printString(" Game over ",0,2); |
el19zf | 10:02ab3324be6c | 170 | lcd.refresh(); |
el19zf | 10:02ab3324be6c | 171 | wait(0.1); |
el19zf | 10:02ab3324be6c | 172 | } |
el19zf | 10:02ab3324be6c | 173 | } |
el19zf | 10:02ab3324be6c | 174 |