Zeyu Feng 201377605

Dependencies:   mbed

On Minerva

Committer:
el19zf
Date:
Mon May 11 09:09:31 2020 +0000
Revision:
11:494cc44777fe
Parent:
10:02ab3324be6c
Child:
12:009895f6b6e4
add Interface class and build the interaction with gamer

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"
el19zf 11:494cc44777fe 21 #include "Interface.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 6:dce38fe4e092 40 // functions
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 8:8287d2ef965d 44 void control_check();
el19zf 11:494cc44777fe 45 void update();
el19zf 7:c49f3d3b672f 46 void shot_update();
el19zf 10:02ab3324be6c 47 void init_timeout();
el19zf 11:494cc44777fe 48 void main_game(float,int);
el19zf 11:494cc44777fe 49 void init_value();
eencae 0:b7f1f47bb26a 50
eencae 0:b7f1f47bb26a 51 int main()
eencae 0:b7f1f47bb26a 52 {
el19zf 3:b8fbaefc496c 53 //initial
el19zf 6:dce38fe4e092 54 init();
el19zf 11:494cc44777fe 55
el19zf 11:494cc44777fe 56 interface.Welcome(lcd,pad);
el19zf 7:c49f3d3b672f 57
el19zf 11:494cc44777fe 58 //a infinite loop
el19zf 6:dce38fe4e092 59 while(1) {
el19zf 11:494cc44777fe 60 init();
el19zf 11:494cc44777fe 61 init_value();
el19zf 11:494cc44777fe 62 int option_flag= interface.menu(lcd,pad,option_flag);
el19zf 11:494cc44777fe 63 switch(option_flag){
el19zf 11:494cc44777fe 64 case 0:
el19zf 11:494cc44777fe 65 main_game(0.7,25);
el19zf 11:494cc44777fe 66 break;
el19zf 11:494cc44777fe 67 case 1:
el19zf 11:494cc44777fe 68 main_game(4,40);
el19zf 11:494cc44777fe 69 break;
el19zf 11:494cc44777fe 70 case 2:
el19zf 11:494cc44777fe 71 interface.exit(lcd,pad);
el19zf 11:494cc44777fe 72 break;
el19zf 11:494cc44777fe 73 }
el19zf 11:494cc44777fe 74 }
el19zf 11:494cc44777fe 75 }
el19zf 11:494cc44777fe 76
el19zf 11:494cc44777fe 77 void main_game(float increment,int max){
el19zf 11:494cc44777fe 78
el19zf 11:494cc44777fe 79 ticker.attach(&flip,2);//set a ticker
el19zf 11:494cc44777fe 80 timeout.attach(&time_out,3);//set a timeout
el19zf 11:494cc44777fe 81
el19zf 11:494cc44777fe 82 while((collision.get_health() > 0)&&(!collision.get_des()))
el19zf 11:494cc44777fe 83 { // increase shots with a ticker
el19zf 11:494cc44777fe 84 shot.gen_shot(timer_flag,increment,max);
el19zf 6:dce38fe4e092 85 lcd.clear();
el19zf 8:8287d2ef965d 86 // shot update
el19zf 6:dce38fe4e092 87 shot_update();
el19zf 8:8287d2ef965d 88
el19zf 11:494cc44777fe 89 // set a count down and update lcd
el19zf 11:494cc44777fe 90 update();
el19zf 11:494cc44777fe 91
el19zf 11:494cc44777fe 92 pad.leds_on();
el19zf 11:494cc44777fe 93 paused_flag = interface.check_pause(lcd,pad,paused_flag);
el19zf 10:02ab3324be6c 94
el19zf 6:dce38fe4e092 95 lcd.refresh();
el19zf 6:dce38fe4e092 96 //printf("shot refresh\n");
el19zf 6:dce38fe4e092 97 //printf("size = %d\n",shot._size);
el19zf 9:62d6559f0d50 98 wait_ms(1000/6);//fps = 6
el19zf 6:dce38fe4e092 99 }
el19zf 11:494cc44777fe 100 printf("END GAME\n");
el19zf 6:dce38fe4e092 101 }
el19zf 6:dce38fe4e092 102
el19zf 6:dce38fe4e092 103 void init()
el19zf 6:dce38fe4e092 104 {
el19zf 2:67b51ee7fc34 105 lcd.init();
el19zf 2:67b51ee7fc34 106 lcd.setContrast(0.5);
el19zf 3:b8fbaefc496c 107 engine.init();
el19zf 2:67b51ee7fc34 108 pad.init();
el19zf 7:c49f3d3b672f 109 shot.init();
el19zf 8:8287d2ef965d 110 collision.init();
el19zf 2:67b51ee7fc34 111 lcd.refresh();
eencae 0:b7f1f47bb26a 112 }
eencae 0:b7f1f47bb26a 113
el19zf 8:8287d2ef965d 114 void control_check()
el19zf 6:dce38fe4e092 115 {
el19zf 6:dce38fe4e092 116 engine.read_input(pad);
el19zf 6:dce38fe4e092 117 engine.update();
el19zf 8:8287d2ef965d 118 collision.set_pos(engine.get_pos());
el19zf 11:494cc44777fe 119 // if people is shotted, health -1 and reset the game
el19zf 8:8287d2ef965d 120 if(collision.check(lcd)) {
el19zf 10:02ab3324be6c 121 if(!collision.get_health()){
el19zf 11:494cc44777fe 122 interface.game_over(lcd,pad);
el19zf 11:494cc44777fe 123 lcd.clear();
el19zf 10:02ab3324be6c 124 } else{
el19zf 10:02ab3324be6c 125 engine.init();
el19zf 10:02ab3324be6c 126 lcd.clear();
el19zf 10:02ab3324be6c 127 shot.init();
el19zf 10:02ab3324be6c 128 init_timeout();
el19zf 10:02ab3324be6c 129 }
el19zf 8:8287d2ef965d 130 }
el19zf 9:62d6559f0d50 131 }
el19zf 9:62d6559f0d50 132
el19zf 11:494cc44777fe 133 void update()
el19zf 9:62d6559f0d50 134 {
el19zf 10:02ab3324be6c 135 if(timeout_flag)
el19zf 10:02ab3324be6c 136 control_check();
el19zf 10:02ab3324be6c 137 //control people and check collision
el19zf 9:62d6559f0d50 138 engine.draw(lcd);
el19zf 8:8287d2ef965d 139 collision.draw(lcd);
el19zf 11:494cc44777fe 140 if(collision.check_des(lcd)){
el19zf 11:494cc44777fe 141 interface.victory(lcd,pad);
el19zf 11:494cc44777fe 142 lcd.clear();
el19zf 11:494cc44777fe 143 }
el19zf 10:02ab3324be6c 144 if(!timeout_flag)
el19zf 11:494cc44777fe 145 count_flag = interface.count_down(lcd,count_flag);
el19zf 6:dce38fe4e092 146 }
el19zf 8:8287d2ef965d 147
el19zf 6:dce38fe4e092 148 void shot_update()
el19zf 6:dce38fe4e092 149 {
el19zf 7:c49f3d3b672f 150 shot.update();
el19zf 10:02ab3324be6c 151 // delete invalid shots
el19zf 7:c49f3d3b672f 152 shot.delete_shot();
el19zf 10:02ab3324be6c 153 //generate shot to keep constant number of shots
el19zf 10:02ab3324be6c 154 shot.init_shot();
el19zf 7:c49f3d3b672f 155 shot.draw(lcd);
el19zf 6:dce38fe4e092 156 }
el19zf 9:62d6559f0d50 157
el19zf 11:494cc44777fe 158
el19zf 11:494cc44777fe 159 void init_timeout()
el19zf 10:02ab3324be6c 160 {
el19zf 11:494cc44777fe 161 timeout.attach(&time_out,3);
el19zf 11:494cc44777fe 162 timeout_flag = 0;
el19zf 11:494cc44777fe 163 count_flag = 18;
el19zf 10:02ab3324be6c 164 }
el19zf 10:02ab3324be6c 165
el19zf 11:494cc44777fe 166 void init_value()
el19zf 11:494cc44777fe 167 {
el19zf 11:494cc44777fe 168 timer_flag = 0;
el19zf 10:02ab3324be6c 169 timeout_flag = 0;
el19zf 11:494cc44777fe 170 count_flag = 18;
el19zf 11:494cc44777fe 171 paused_flag = 0;
el19zf 11:494cc44777fe 172 option_flag = 0;
el19zf 11:494cc44777fe 173 }