Zeyu Feng 201377605

Dependencies:   mbed

On Minerva

Committer:
el19zf
Date:
Sat May 09 08:27:07 2020 +0000
Revision:
9:62d6559f0d50
Parent:
8:8287d2ef965d
Child:
10:02ab3324be6c
update mechanism of game, make harder

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();
eencae 0:b7f1f47bb26a 51
eencae 0:b7f1f47bb26a 52 int main()
eencae 0:b7f1f47bb26a 53 {
el19zf 3:b8fbaefc496c 54 //initial
el19zf 6:dce38fe4e092 55 init();
el19zf 8:8287d2ef965d 56 //set a ticker
el19zf 8:8287d2ef965d 57 ticker.attach(&flip,2);
el19zf 9:62d6559f0d50 58 timeout.attach(&time_out,5);
el19zf 7:c49f3d3b672f 59
el19zf 6:dce38fe4e092 60 //a infinite loop to control position of the people, update the game state
el19zf 6:dce38fe4e092 61 while(1) {
el19zf 7:c49f3d3b672f 62 if(timer_flag == 1) {
el19zf 6:dce38fe4e092 63 timer_flag = 0;
el19zf 8:8287d2ef965d 64 if(shot.get_size() < 30){
el19zf 9:62d6559f0d50 65 int size = shot.get_size()+ 4;
el19zf 8:8287d2ef965d 66 shot.set_size(size);
el19zf 8:8287d2ef965d 67 }
el19zf 6:dce38fe4e092 68 }
el19zf 6:dce38fe4e092 69 lcd.clear();
el19zf 8:8287d2ef965d 70 // shot update
el19zf 6:dce38fe4e092 71 shot_update();
el19zf 8:8287d2ef965d 72
el19zf 8:8287d2ef965d 73 // control people and check collision
el19zf 9:62d6559f0d50 74 if(timeout_flag){
el19zf 9:62d6559f0d50 75 control_check();
el19zf 9:62d6559f0d50 76 }
el19zf 9:62d6559f0d50 77 draw();
el19zf 9:62d6559f0d50 78 if(!timeout_flag){
el19zf 9:62d6559f0d50 79 count_down();
el19zf 9:62d6559f0d50 80 }
el19zf 6:dce38fe4e092 81 lcd.refresh();
el19zf 6:dce38fe4e092 82 //printf("shot refresh\n");
el19zf 6:dce38fe4e092 83 //printf("size = %d\n",shot._size);
el19zf 9:62d6559f0d50 84 wait_ms(1000/6);//fps = 6
el19zf 6:dce38fe4e092 85 }
el19zf 6:dce38fe4e092 86 }
el19zf 6:dce38fe4e092 87
el19zf 6:dce38fe4e092 88
el19zf 6:dce38fe4e092 89 void init()
el19zf 6:dce38fe4e092 90 {
el19zf 2:67b51ee7fc34 91 lcd.init();
el19zf 2:67b51ee7fc34 92 lcd.setContrast(0.5);
el19zf 3:b8fbaefc496c 93 engine.init();
el19zf 2:67b51ee7fc34 94 pad.init();
el19zf 7:c49f3d3b672f 95 shot.init();
el19zf 8:8287d2ef965d 96 collision.init();
el19zf 2:67b51ee7fc34 97 lcd.refresh();
eencae 0:b7f1f47bb26a 98 }
eencae 0:b7f1f47bb26a 99
el19zf 8:8287d2ef965d 100 void control_check()
el19zf 6:dce38fe4e092 101 {
el19zf 6:dce38fe4e092 102 engine.read_input(pad);
el19zf 6:dce38fe4e092 103 engine.update();
el19zf 8:8287d2ef965d 104 collision.set_pos(engine.get_pos());
el19zf 8:8287d2ef965d 105 if(collision.check(lcd)) {
el19zf 8:8287d2ef965d 106 engine.init();
el19zf 8:8287d2ef965d 107 lcd.clear();
el19zf 8:8287d2ef965d 108 shot.init();
el19zf 8:8287d2ef965d 109 }
el19zf 9:62d6559f0d50 110 }
el19zf 9:62d6559f0d50 111
el19zf 9:62d6559f0d50 112 void draw()
el19zf 9:62d6559f0d50 113 {
el19zf 9:62d6559f0d50 114 engine.draw(lcd);
el19zf 8:8287d2ef965d 115 collision.draw(lcd);
el19zf 6:dce38fe4e092 116 }
el19zf 8:8287d2ef965d 117
el19zf 6:dce38fe4e092 118 void shot_update()
el19zf 6:dce38fe4e092 119 {
el19zf 7:c49f3d3b672f 120 shot.update();
el19zf 7:c49f3d3b672f 121 shot.delete_shot();
el19zf 7:c49f3d3b672f 122 shot.gen_shot();
el19zf 7:c49f3d3b672f 123 shot.draw(lcd);
el19zf 6:dce38fe4e092 124 }
el19zf 9:62d6559f0d50 125
el19zf 9:62d6559f0d50 126 void count_down()
el19zf 9:62d6559f0d50 127 {
el19zf 9:62d6559f0d50 128 char buffer[6];
el19zf 9:62d6559f0d50 129 sprintf(buffer,"%d",(int)count_flag/6);
el19zf 9:62d6559f0d50 130 lcd.printString(buffer,40,2);
el19zf 9:62d6559f0d50 131 printf("count: %d\n",count_flag);
el19zf 9:62d6559f0d50 132 count_flag--;
el19zf 9:62d6559f0d50 133 }