Yang Hongxiao 201199678

Dependencies:   mbed

Committer:
YHX
Date:
Thu May 14 17:00:34 2020 +0000
Revision:
1:a6ead8050c23
Yang Hongxiao; el17hy; 201199678

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YHX 1:a6ead8050c23 1 #include "Control.h"
YHX 1:a6ead8050c23 2
YHX 1:a6ead8050c23 3 Control::Control()
YHX 1:a6ead8050c23 4 {
YHX 1:a6ead8050c23 5
YHX 1:a6ead8050c23 6 }
YHX 1:a6ead8050c23 7
YHX 1:a6ead8050c23 8 Control::~Control()
YHX 1:a6ead8050c23 9 {
YHX 1:a6ead8050c23 10
YHX 1:a6ead8050c23 11 }
YHX 1:a6ead8050c23 12
YHX 1:a6ead8050c23 13 void Control::init(int platform_w,int platform_h,int r,int vv)
YHX 1:a6ead8050c23 14 {
YHX 1:a6ead8050c23 15
YHX 1:a6ead8050c23 16 _platform_w = platform_w;
YHX 1:a6ead8050c23 17 _platform_h = platform_h;
YHX 1:a6ead8050c23 18 _r = r;
YHX 1:a6ead8050c23 19 _vv = vv;
YHX 1:a6ead8050c23 20 _length = 45;
YHX 1:a6ead8050c23 21 _p.init(_length,_platform_h,_platform_w);
YHX 1:a6ead8050c23 22 _o.init();
YHX 1:a6ead8050c23 23 _bullet.init(_r,_vv);
YHX 1:a6ead8050c23 24 }
YHX 1:a6ead8050c23 25
YHX 1:a6ead8050c23 26 void Control::read_input(Gamepad &pad)
YHX 1:a6ead8050c23 27 {
YHX 1:a6ead8050c23 28 _d = pad.get_direction();
YHX 1:a6ead8050c23 29 _mag = pad.get_mag();
YHX 1:a6ead8050c23 30 }
YHX 1:a6ead8050c23 31
YHX 1:a6ead8050c23 32 void Control::draw(N5110 &lcd)
YHX 1:a6ead8050c23 33 {
YHX 1:a6ead8050c23 34
YHX 1:a6ead8050c23 35 lcd.drawRect(0,0,WIDTH,HEIGHT,FILL_TRANSPARENT);
YHX 1:a6ead8050c23 36 print_scores(lcd);
YHX 1:a6ead8050c23 37 _p.draw(lcd);
YHX 1:a6ead8050c23 38 _bullet.draw(lcd);
YHX 1:a6ead8050c23 39 _o.draw(lcd);
YHX 1:a6ead8050c23 40 }
YHX 1:a6ead8050c23 41
YHX 1:a6ead8050c23 42 void Control::update(Gamepad &pad)
YHX 1:a6ead8050c23 43 {
YHX 1:a6ead8050c23 44 check_goal(pad);
YHX 1:a6ead8050c23 45 _p.update(_d,_mag);
YHX 1:a6ead8050c23 46 _bullet.update();
YHX 1:a6ead8050c23 47 check_wall_collision(pad);
YHX 1:a6ead8050c23 48 check_platform_collisions(pad);
YHX 1:a6ead8050c23 49 check__obstacle_collisios(pad);
YHX 1:a6ead8050c23 50 }
YHX 1:a6ead8050c23 51
YHX 1:a6ead8050c23 52 void Control::check_wall_collision(Gamepad &pad)
YHX 1:a6ead8050c23 53 {
YHX 1:a6ead8050c23 54 Vector2D bullet_pos = _bullet.get_pos();
YHX 1:a6ead8050c23 55 Vector2D bullet_velocity = _bullet.get_velocity();
YHX 1:a6ead8050c23 56
YHX 1:a6ead8050c23 57 if (bullet_pos.y <= 1) {
YHX 1:a6ead8050c23 58 bullet_pos.y = 1;
YHX 1:a6ead8050c23 59 bullet_velocity.y = -bullet_velocity.y;
YHX 1:a6ead8050c23 60 pad.tone(550.0,0.1);
YHX 1:a6ead8050c23 61 }
YHX 1:a6ead8050c23 62
YHX 1:a6ead8050c23 63 else if (bullet_pos.x + _r >= (WIDTH-1) ) {
YHX 1:a6ead8050c23 64 bullet_pos.x = (WIDTH-1) - _r;
YHX 1:a6ead8050c23 65 bullet_velocity.x = -bullet_velocity.x;
YHX 1:a6ead8050c23 66
YHX 1:a6ead8050c23 67 pad.tone(550.0,0.1);
YHX 1:a6ead8050c23 68 }
YHX 1:a6ead8050c23 69
YHX 1:a6ead8050c23 70 else if (bullet_pos.x <= 1) {
YHX 1:a6ead8050c23 71 bullet_pos.x = 1;
YHX 1:a6ead8050c23 72 bullet_velocity.x = -bullet_velocity.x;
YHX 1:a6ead8050c23 73 pad.tone(550.0,0.1);
YHX 1:a6ead8050c23 74 }
YHX 1:a6ead8050c23 75 _bullet.set_velocity(bullet_velocity);
YHX 1:a6ead8050c23 76 _bullet.set_pos(bullet_pos);
YHX 1:a6ead8050c23 77 }
YHX 1:a6ead8050c23 78
YHX 1:a6ead8050c23 79 void Control::check_platform_collisions(Gamepad &pad)
YHX 1:a6ead8050c23 80 {
YHX 1:a6ead8050c23 81 Vector2D bullet_pos = _bullet.get_pos();
YHX 1:a6ead8050c23 82 Vector2D bullet_velocity = _bullet.get_velocity();
YHX 1:a6ead8050c23 83
YHX 1:a6ead8050c23 84 Vector2D p_pos = _p.get_pos();
YHX 1:a6ead8050c23 85
YHX 1:a6ead8050c23 86 if (
YHX 1:a6ead8050c23 87 (bullet_pos.y >= p_pos.y) &&
YHX 1:a6ead8050c23 88 (bullet_pos.y <= p_pos.y + _platform_h) &&
YHX 1:a6ead8050c23 89 (bullet_pos.x >= _length) &&
YHX 1:a6ead8050c23 90 (bullet_pos.x <= _length + _platform_w)
YHX 1:a6ead8050c23 91 ) {
YHX 1:a6ead8050c23 92 bullet_pos.y = _length+ _platform_h;
YHX 1:a6ead8050c23 93 bullet_velocity.y = -bullet_velocity.y;
YHX 1:a6ead8050c23 94 pad.tone(1000.0,0.1);
YHX 1:a6ead8050c23 95
YHX 1:a6ead8050c23 96 }
YHX 1:a6ead8050c23 97
YHX 1:a6ead8050c23 98 _bullet.set_velocity(bullet_velocity);
YHX 1:a6ead8050c23 99 _bullet.set_pos(bullet_pos);
YHX 1:a6ead8050c23 100 }
YHX 1:a6ead8050c23 101 void Control::check__obstacle_collisios(Gamepad &pad)
YHX 1:a6ead8050c23 102 {
YHX 1:a6ead8050c23 103
YHX 1:a6ead8050c23 104 Vector2D bullet_pos = _bullet.get_pos();
YHX 1:a6ead8050c23 105 Vector2D bullet_velocity = _bullet.get_velocity();
YHX 1:a6ead8050c23 106 Vector2D p_pos = _p.get_pos();
YHX 1:a6ead8050c23 107 Vector2D o_pos= _o.get_obstacle_pos();
YHX 1:a6ead8050c23 108
YHX 1:a6ead8050c23 109 if ((bullet_pos.y >= o_pos.y) &&
YHX 1:a6ead8050c23 110 (bullet_pos.y <= o_pos.y + 2) &&
YHX 1:a6ead8050c23 111 (bullet_pos.x >= o_pos.x) &&
YHX 1:a6ead8050c23 112 (bullet_pos.x <= o_pos.x + 20) ){
YHX 1:a6ead8050c23 113
YHX 1:a6ead8050c23 114 bullet_velocity.y = -bullet_velocity.y;
YHX 1:a6ead8050c23 115
YHX 1:a6ead8050c23 116 pad.tone(1000.0,0.1);
YHX 1:a6ead8050c23 117 _p.add_score();
YHX 1:a6ead8050c23 118 _o.new_obstacle();
YHX 1:a6ead8050c23 119 }
YHX 1:a6ead8050c23 120
YHX 1:a6ead8050c23 121 _bullet.set_velocity(bullet_velocity);
YHX 1:a6ead8050c23 122 _bullet.set_pos(bullet_pos);
YHX 1:a6ead8050c23 123 }
YHX 1:a6ead8050c23 124
YHX 1:a6ead8050c23 125 void Control::check_goal(Gamepad &pad)
YHX 1:a6ead8050c23 126 {
YHX 1:a6ead8050c23 127
YHX 1:a6ead8050c23 128 Vector2D bullet_pos = _bullet.get_pos();
YHX 1:a6ead8050c23 129
YHX 1:a6ead8050c23 130 if (bullet_pos.y > WIDTH) {
YHX 1:a6ead8050c23 131
YHX 1:a6ead8050c23 132 _bullet.init(_r,_vv);
YHX 1:a6ead8050c23 133 pad.tone(1500.0,0.5);
YHX 1:a6ead8050c23 134 pad.leds_on();
YHX 1:a6ead8050c23 135 wait(0.5);
YHX 1:a6ead8050c23 136 pad.leds_off();
YHX 1:a6ead8050c23 137 }
YHX 1:a6ead8050c23 138 }
YHX 1:a6ead8050c23 139
YHX 1:a6ead8050c23 140 void Control::print_scores(N5110 &lcd)
YHX 1:a6ead8050c23 141 {
YHX 1:a6ead8050c23 142 int p_score = _p.get_score();
YHX 1:a6ead8050c23 143 char buffer1[14];
YHX 1:a6ead8050c23 144 sprintf(buffer1,"%2d",p_score);
YHX 1:a6ead8050c23 145 lcd.printString(buffer1,WIDTH/2 + 22,1);
YHX 1:a6ead8050c23 146
YHX 1:a6ead8050c23 147 }