Zeyu Feng 201377605

Dependencies:   mbed

On Minerva

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?

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 // 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