Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Missiles/Missiles.cpp@8:d1c04f0e4890, 2019-05-11 (annotated)
- Committer:
- el17ttds
- Date:
- Sat May 11 08:23:54 2019 +0000
- Revision:
- 8:d1c04f0e4890
- Child:
- 9:3a0194c87afe
Full game.; Unfinished menu, tone glitch, score doesn't print, ammo and health to be displayed
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
el17ttds | 8:d1c04f0e4890 | 1 | #include "Missiles.h" |
el17ttds | 8:d1c04f0e4890 | 2 | |
el17ttds | 8:d1c04f0e4890 | 3 | Missiles::Missiles() { |
el17ttds | 8:d1c04f0e4890 | 4 | |
el17ttds | 8:d1c04f0e4890 | 5 | } |
el17ttds | 8:d1c04f0e4890 | 6 | |
el17ttds | 8:d1c04f0e4890 | 7 | void Missiles::init() { |
el17ttds | 8:d1c04f0e4890 | 8 | _d = N; |
el17ttds | 8:d1c04f0e4890 | 9 | _Apressed = false; |
el17ttds | 8:d1c04f0e4890 | 10 | frame_counter1 = 0; |
el17ttds | 8:d1c04f0e4890 | 11 | frame_counter2 = 0; |
el17ttds | 8:d1c04f0e4890 | 12 | frame_counter3 = 0; |
el17ttds | 8:d1c04f0e4890 | 13 | reload_rate = 30; |
el17ttds | 8:d1c04f0e4890 | 14 | _xStart = 42 - 1; |
el17ttds | 8:d1c04f0e4890 | 15 | _yStart = 24 - 1; |
el17ttds | 8:d1c04f0e4890 | 16 | _speed = 5; |
el17ttds | 8:d1c04f0e4890 | 17 | _changex = 0; |
el17ttds | 8:d1c04f0e4890 | 18 | _changey = -_speed; // Shoots up if no input |
el17ttds | 8:d1c04f0e4890 | 19 | _m1 = 0; |
el17ttds | 8:d1c04f0e4890 | 20 | _m1x = -1; |
el17ttds | 8:d1c04f0e4890 | 21 | _changex1 = 0; |
el17ttds | 8:d1c04f0e4890 | 22 | _m1y = -1; |
el17ttds | 8:d1c04f0e4890 | 23 | _changey1 = 0; |
el17ttds | 8:d1c04f0e4890 | 24 | _m2 = 0; |
el17ttds | 8:d1c04f0e4890 | 25 | _m2x = -1; |
el17ttds | 8:d1c04f0e4890 | 26 | _changex2 = 0; |
el17ttds | 8:d1c04f0e4890 | 27 | _m2y = -1; |
el17ttds | 8:d1c04f0e4890 | 28 | _changey2 = 0; |
el17ttds | 8:d1c04f0e4890 | 29 | _m3 = 0; |
el17ttds | 8:d1c04f0e4890 | 30 | _m3x = -1; |
el17ttds | 8:d1c04f0e4890 | 31 | _changex3 = 0; |
el17ttds | 8:d1c04f0e4890 | 32 | _m3y = -1; |
el17ttds | 8:d1c04f0e4890 | 33 | _changey3 = 0; |
el17ttds | 8:d1c04f0e4890 | 34 | } |
el17ttds | 8:d1c04f0e4890 | 35 | |
el17ttds | 8:d1c04f0e4890 | 36 | void Missiles::write(int pix_x, int pix_y, Direction d, bool Apressed, bool Bpressed, int map_x, int map_y, bool m1_hit, bool m2_hit, bool m3_hit, Gamepad &pad, N5110 &lcd) { // lcd for leds |
el17ttds | 8:d1c04f0e4890 | 37 | _Apressed = Apressed; |
el17ttds | 8:d1c04f0e4890 | 38 | _Bpressed = Bpressed; |
el17ttds | 8:d1c04f0e4890 | 39 | _d = d; |
el17ttds | 8:d1c04f0e4890 | 40 | _pix_x = pix_x; |
el17ttds | 8:d1c04f0e4890 | 41 | _pix_y = pix_y; |
el17ttds | 8:d1c04f0e4890 | 42 | _map_x = map_x; |
el17ttds | 8:d1c04f0e4890 | 43 | _map_y = map_y; |
el17ttds | 8:d1c04f0e4890 | 44 | _m1_hit = m1_hit; |
el17ttds | 8:d1c04f0e4890 | 45 | _m2_hit = m2_hit; |
el17ttds | 8:d1c04f0e4890 | 46 | _m3_hit = m3_hit; |
el17ttds | 8:d1c04f0e4890 | 47 | check_hit(); |
el17ttds | 8:d1c04f0e4890 | 48 | move_missile(); |
el17ttds | 8:d1c04f0e4890 | 49 | if (_Apressed == true) { |
el17ttds | 8:d1c04f0e4890 | 50 | pad.tone(1000, 0.2); |
el17ttds | 8:d1c04f0e4890 | 51 | set_forward(); |
el17ttds | 8:d1c04f0e4890 | 52 | } else if (_Bpressed == true) { |
el17ttds | 8:d1c04f0e4890 | 53 | pad.tone(1000, 0.2); |
el17ttds | 8:d1c04f0e4890 | 54 | set_back(); |
el17ttds | 8:d1c04f0e4890 | 55 | } |
el17ttds | 8:d1c04f0e4890 | 56 | check_collision_wall(); |
el17ttds | 8:d1c04f0e4890 | 57 | } |
el17ttds | 8:d1c04f0e4890 | 58 | |
el17ttds | 8:d1c04f0e4890 | 59 | void Missiles::draw(N5110 &lcd) { |
el17ttds | 8:d1c04f0e4890 | 60 | if ( (_m1x >= 0 ) && (_m1y >= 0) ) { |
el17ttds | 8:d1c04f0e4890 | 61 | lcd.drawRect(_m1x, _m1y, 3, 3, FILL_TRANSPARENT); // FILL_BLACK is a test |
el17ttds | 8:d1c04f0e4890 | 62 | } |
el17ttds | 8:d1c04f0e4890 | 63 | if ( (_m2x >= 0 ) && (_m2y >= 0) ) { |
el17ttds | 8:d1c04f0e4890 | 64 | lcd.drawRect(_m2x, _m2y, 3, 3, FILL_TRANSPARENT); |
el17ttds | 8:d1c04f0e4890 | 65 | } |
el17ttds | 8:d1c04f0e4890 | 66 | if ( (_m3x >= 0 ) && (_m3y >= 0) ) { |
el17ttds | 8:d1c04f0e4890 | 67 | lcd.drawRect(_m3x, _m3y, 3, 3, FILL_TRANSPARENT); |
el17ttds | 8:d1c04f0e4890 | 68 | } |
el17ttds | 8:d1c04f0e4890 | 69 | } |
el17ttds | 8:d1c04f0e4890 | 70 | |
el17ttds | 8:d1c04f0e4890 | 71 | Vector2D Missiles::get_m1_pos() { |
el17ttds | 8:d1c04f0e4890 | 72 | if (_m1 == true) { |
el17ttds | 8:d1c04f0e4890 | 73 | Vector2D m1_pos = {_m1x, _m1y}; |
el17ttds | 8:d1c04f0e4890 | 74 | return m1_pos; |
el17ttds | 8:d1c04f0e4890 | 75 | } else {return {_map_x, _map_y}; } |
el17ttds | 8:d1c04f0e4890 | 76 | } |
el17ttds | 8:d1c04f0e4890 | 77 | |
el17ttds | 8:d1c04f0e4890 | 78 | Vector2D Missiles::get_m2_pos() { |
el17ttds | 8:d1c04f0e4890 | 79 | if (_m2 == true) { |
el17ttds | 8:d1c04f0e4890 | 80 | Vector2D m2_pos = {_m2x, _m2y}; |
el17ttds | 8:d1c04f0e4890 | 81 | return m2_pos; |
el17ttds | 8:d1c04f0e4890 | 82 | } else {return {_map_x, _map_y}; } |
el17ttds | 8:d1c04f0e4890 | 83 | } |
el17ttds | 8:d1c04f0e4890 | 84 | |
el17ttds | 8:d1c04f0e4890 | 85 | Vector2D Missiles::get_m3_pos() { |
el17ttds | 8:d1c04f0e4890 | 86 | if (_m3 == true) { |
el17ttds | 8:d1c04f0e4890 | 87 | Vector2D m3_pos = {_m3x, _m3y}; |
el17ttds | 8:d1c04f0e4890 | 88 | return m3_pos; |
el17ttds | 8:d1c04f0e4890 | 89 | } else {return {_map_x, _map_y}; } // If missile doesnt exist, return a location that collides with no enemy. |
el17ttds | 8:d1c04f0e4890 | 90 | } |
el17ttds | 8:d1c04f0e4890 | 91 | ////////////////////////////////// PRIVATE FUNCTIONS /////////////////////////////// |
el17ttds | 8:d1c04f0e4890 | 92 | |
el17ttds | 8:d1c04f0e4890 | 93 | void Missiles::check_hit() { |
el17ttds | 8:d1c04f0e4890 | 94 | if (_m1_hit == true) { |
el17ttds | 8:d1c04f0e4890 | 95 | _m1 = false; |
el17ttds | 8:d1c04f0e4890 | 96 | } |
el17ttds | 8:d1c04f0e4890 | 97 | if (_m2_hit == true) { |
el17ttds | 8:d1c04f0e4890 | 98 | _m2 = false; |
el17ttds | 8:d1c04f0e4890 | 99 | } |
el17ttds | 8:d1c04f0e4890 | 100 | if (_m3_hit == true) { |
el17ttds | 8:d1c04f0e4890 | 101 | _m3 = false; |
el17ttds | 8:d1c04f0e4890 | 102 | } |
el17ttds | 8:d1c04f0e4890 | 103 | } |
el17ttds | 8:d1c04f0e4890 | 104 | |
el17ttds | 8:d1c04f0e4890 | 105 | void Missiles::move_missile() { |
el17ttds | 8:d1c04f0e4890 | 106 | if (_m1 == true) { |
el17ttds | 8:d1c04f0e4890 | 107 | _m1x += _changex1 - _pix_x; |
el17ttds | 8:d1c04f0e4890 | 108 | _m1y += _changey1 + _pix_y; |
el17ttds | 8:d1c04f0e4890 | 109 | } else { |
el17ttds | 8:d1c04f0e4890 | 110 | _m1x = -1; |
el17ttds | 8:d1c04f0e4890 | 111 | _m1y = -1; |
el17ttds | 8:d1c04f0e4890 | 112 | } |
el17ttds | 8:d1c04f0e4890 | 113 | if (_m2 == true) { |
el17ttds | 8:d1c04f0e4890 | 114 | _m2x += _changex2 - _pix_x; |
el17ttds | 8:d1c04f0e4890 | 115 | _m2y += _changey2 + _pix_y; |
el17ttds | 8:d1c04f0e4890 | 116 | } else { |
el17ttds | 8:d1c04f0e4890 | 117 | _m2x = -1; |
el17ttds | 8:d1c04f0e4890 | 118 | _m2y = -1; |
el17ttds | 8:d1c04f0e4890 | 119 | } |
el17ttds | 8:d1c04f0e4890 | 120 | if (_m3 == true) { |
el17ttds | 8:d1c04f0e4890 | 121 | _m3x += _changex3 - _pix_x; |
el17ttds | 8:d1c04f0e4890 | 122 | _m3y += _changey3 + _pix_y; |
el17ttds | 8:d1c04f0e4890 | 123 | } else { |
el17ttds | 8:d1c04f0e4890 | 124 | _m3x = -1; |
el17ttds | 8:d1c04f0e4890 | 125 | _m3y = -1; |
el17ttds | 8:d1c04f0e4890 | 126 | } |
el17ttds | 8:d1c04f0e4890 | 127 | } |
el17ttds | 8:d1c04f0e4890 | 128 | |
el17ttds | 8:d1c04f0e4890 | 129 | void Missiles::set_forward() { // reverses direction to forward again |
el17ttds | 8:d1c04f0e4890 | 130 | if (_m1 == false) { |
el17ttds | 8:d1c04f0e4890 | 131 | direction(); |
el17ttds | 8:d1c04f0e4890 | 132 | _changex1 = -_changex; |
el17ttds | 8:d1c04f0e4890 | 133 | _changey1 = -_changey; |
el17ttds | 8:d1c04f0e4890 | 134 | _m1x = _xStart; |
el17ttds | 8:d1c04f0e4890 | 135 | _m1y = _yStart; |
el17ttds | 8:d1c04f0e4890 | 136 | _m1 = true; |
el17ttds | 8:d1c04f0e4890 | 137 | } else if (_m2 == false) { |
el17ttds | 8:d1c04f0e4890 | 138 | direction(); |
el17ttds | 8:d1c04f0e4890 | 139 | _changex2 = -_changex; |
el17ttds | 8:d1c04f0e4890 | 140 | _changey2 = -_changey; |
el17ttds | 8:d1c04f0e4890 | 141 | _m2x = _xStart; |
el17ttds | 8:d1c04f0e4890 | 142 | _m2y = _yStart; |
el17ttds | 8:d1c04f0e4890 | 143 | _m2 = true; |
el17ttds | 8:d1c04f0e4890 | 144 | } else if (_m3 == false) { |
el17ttds | 8:d1c04f0e4890 | 145 | direction(); |
el17ttds | 8:d1c04f0e4890 | 146 | _changex3 = -_changex; |
el17ttds | 8:d1c04f0e4890 | 147 | _changey3 = -_changey; |
el17ttds | 8:d1c04f0e4890 | 148 | _m3x = _xStart; |
el17ttds | 8:d1c04f0e4890 | 149 | _m3y = _yStart; |
el17ttds | 8:d1c04f0e4890 | 150 | _m3 = true; |
el17ttds | 8:d1c04f0e4890 | 151 | } |
el17ttds | 8:d1c04f0e4890 | 152 | } |
el17ttds | 8:d1c04f0e4890 | 153 | |
el17ttds | 8:d1c04f0e4890 | 154 | void Missiles::set_back() { |
el17ttds | 8:d1c04f0e4890 | 155 | if (_m1 == false) { |
el17ttds | 8:d1c04f0e4890 | 156 | direction(); |
el17ttds | 8:d1c04f0e4890 | 157 | _changex1 = _changex; |
el17ttds | 8:d1c04f0e4890 | 158 | _changey1 = _changey; |
el17ttds | 8:d1c04f0e4890 | 159 | _m1x = _xStart; |
el17ttds | 8:d1c04f0e4890 | 160 | _m1y = _yStart; |
el17ttds | 8:d1c04f0e4890 | 161 | _m1 = true; |
el17ttds | 8:d1c04f0e4890 | 162 | } else if (_m2 == false) { |
el17ttds | 8:d1c04f0e4890 | 163 | direction(); |
el17ttds | 8:d1c04f0e4890 | 164 | _changex2 = _changex; |
el17ttds | 8:d1c04f0e4890 | 165 | _changey2 = _changey; |
el17ttds | 8:d1c04f0e4890 | 166 | _m2x = _xStart; |
el17ttds | 8:d1c04f0e4890 | 167 | _m2y = _yStart; |
el17ttds | 8:d1c04f0e4890 | 168 | _m2 = true; |
el17ttds | 8:d1c04f0e4890 | 169 | } else if (_m3 == false) { |
el17ttds | 8:d1c04f0e4890 | 170 | direction(); |
el17ttds | 8:d1c04f0e4890 | 171 | _changex3 = _changex; |
el17ttds | 8:d1c04f0e4890 | 172 | _changey3 = _changey; |
el17ttds | 8:d1c04f0e4890 | 173 | _m3x = _xStart; |
el17ttds | 8:d1c04f0e4890 | 174 | _m3y = _yStart; |
el17ttds | 8:d1c04f0e4890 | 175 | _m3 = true; |
el17ttds | 8:d1c04f0e4890 | 176 | } |
el17ttds | 8:d1c04f0e4890 | 177 | } |
el17ttds | 8:d1c04f0e4890 | 178 | |
el17ttds | 8:d1c04f0e4890 | 179 | void Missiles::direction() { // Original design only shoots back. |
el17ttds | 8:d1c04f0e4890 | 180 | if (_d == N) { |
el17ttds | 8:d1c04f0e4890 | 181 | _changex = 0; |
el17ttds | 8:d1c04f0e4890 | 182 | _changey = _speed; |
el17ttds | 8:d1c04f0e4890 | 183 | } else if (_d == NE) { |
el17ttds | 8:d1c04f0e4890 | 184 | _changex = -(_speed / 1.414); |
el17ttds | 8:d1c04f0e4890 | 185 | _changey = _speed / 1.414; |
el17ttds | 8:d1c04f0e4890 | 186 | } else if (_d == E) { |
el17ttds | 8:d1c04f0e4890 | 187 | _changex = -_speed; |
el17ttds | 8:d1c04f0e4890 | 188 | _changey = 0; |
el17ttds | 8:d1c04f0e4890 | 189 | } else if (_d == SE) { |
el17ttds | 8:d1c04f0e4890 | 190 | _changex = -(_speed / 1.414); |
el17ttds | 8:d1c04f0e4890 | 191 | _changey = -(_speed / 1.414); |
el17ttds | 8:d1c04f0e4890 | 192 | } else if (_d == S) { |
el17ttds | 8:d1c04f0e4890 | 193 | _changex = 0; |
el17ttds | 8:d1c04f0e4890 | 194 | _changey = -_speed; |
el17ttds | 8:d1c04f0e4890 | 195 | } else if (_d == SW) { |
el17ttds | 8:d1c04f0e4890 | 196 | _changex = _speed / 1.414; |
el17ttds | 8:d1c04f0e4890 | 197 | _changey = -(_speed / 1.414); |
el17ttds | 8:d1c04f0e4890 | 198 | } else if (_d == W) { |
el17ttds | 8:d1c04f0e4890 | 199 | _changex = _speed; |
el17ttds | 8:d1c04f0e4890 | 200 | _changey = 0; |
el17ttds | 8:d1c04f0e4890 | 201 | } else if (_d == NW) { |
el17ttds | 8:d1c04f0e4890 | 202 | _changex = _speed / 1.414; |
el17ttds | 8:d1c04f0e4890 | 203 | _changey = _speed / 1.414; |
el17ttds | 8:d1c04f0e4890 | 204 | } |
el17ttds | 8:d1c04f0e4890 | 205 | } |
el17ttds | 8:d1c04f0e4890 | 206 | |
el17ttds | 8:d1c04f0e4890 | 207 | void Missiles::check_collision_wall() { |
el17ttds | 8:d1c04f0e4890 | 208 | if ( (_m1x <= _map_x + 42) || |
el17ttds | 8:d1c04f0e4890 | 209 | (_m1x >= _map_x + 42 + 100) || |
el17ttds | 8:d1c04f0e4890 | 210 | (_m1y <= _map_y + 24) || |
el17ttds | 8:d1c04f0e4890 | 211 | (_m1y >= _map_y + 24 + 100) ) { |
el17ttds | 8:d1c04f0e4890 | 212 | _m1 = false; |
el17ttds | 8:d1c04f0e4890 | 213 | _m1x = -1; |
el17ttds | 8:d1c04f0e4890 | 214 | _m1y = -1; |
el17ttds | 8:d1c04f0e4890 | 215 | } |
el17ttds | 8:d1c04f0e4890 | 216 | if ( (_m2x <= _map_x + 42) || |
el17ttds | 8:d1c04f0e4890 | 217 | (_m2x >= _map_x + 42 + 100) || |
el17ttds | 8:d1c04f0e4890 | 218 | (_m2y <= _map_y + 24) || |
el17ttds | 8:d1c04f0e4890 | 219 | (_m2y >= _map_y + 24 + 100) ) { |
el17ttds | 8:d1c04f0e4890 | 220 | _m2 = false; |
el17ttds | 8:d1c04f0e4890 | 221 | _m2x = -1; |
el17ttds | 8:d1c04f0e4890 | 222 | _m2y = -1; |
el17ttds | 8:d1c04f0e4890 | 223 | } |
el17ttds | 8:d1c04f0e4890 | 224 | if ( (_m3x <= _map_x + 42) || |
el17ttds | 8:d1c04f0e4890 | 225 | (_m3x >= _map_x + 42 + 100) || |
el17ttds | 8:d1c04f0e4890 | 226 | (_m3y <= _map_y + 24) || |
el17ttds | 8:d1c04f0e4890 | 227 | (_m3y >= _map_y + 24 + 100) ) { |
el17ttds | 8:d1c04f0e4890 | 228 | _m3 = false; |
el17ttds | 8:d1c04f0e4890 | 229 | _m3x = -1; |
el17ttds | 8:d1c04f0e4890 | 230 | _m3y = -1; |
el17ttds | 8:d1c04f0e4890 | 231 | } |
el17ttds | 8:d1c04f0e4890 | 232 | } |