ELEC2645 (2018/19) / Mbed 2 deprecated el17lw

Dependencies:   mbed

Committer:
lewisgw
Date:
Sat Apr 20 14:46:50 2019 +0000
Revision:
21:20478f086bc2
Parent:
20:a8cad4e044ea
Child:
26:4253656c0755
Fully documented and commented all classes and functions

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lewisgw 2:16ae940b0aee 1 #include "Skateboarder.h"
lewisgw 21:20478f086bc2 2
lewisgw 21:20478f086bc2 3 // Define all sprite arrays.
lewisgw 9:fff2009f826e 4 int skate_right[17][10] = {
lewisgw 9:fff2009f826e 5 { 0,0,0,1,1,1,0,0,0,0 },
lewisgw 9:fff2009f826e 6 { 0,0,0,1,1,1,1,0,0,0 },
lewisgw 9:fff2009f826e 7 { 0,1,1,1,1,1,1,0,0,0 },
lewisgw 9:fff2009f826e 8 { 0,0,0,1,0,1,1,0,0,0 },
lewisgw 9:fff2009f826e 9 { 0,0,0,1,1,1,0,0,0,0 },
lewisgw 9:fff2009f826e 10 { 0,0,0,1,1,0,0,0,0,0 },
lewisgw 9:fff2009f826e 11 { 0,0,0,1,1,0,0,0,0,0 },
lewisgw 9:fff2009f826e 12 { 0,1,1,1,1,1,1,1,0,0 },
lewisgw 9:fff2009f826e 13 { 1,1,0,1,1,0,0,1,1,0 },
lewisgw 9:fff2009f826e 14 { 1,0,0,1,1,0,0,0,0,0 },
lewisgw 9:fff2009f826e 15 { 0,0,0,1,1,0,0,0,0,0 },
lewisgw 9:fff2009f826e 16 { 0,0,0,1,1,0,0,0,0,0 },
lewisgw 9:fff2009f826e 17 { 0,0,0,1,0,1,0,0,0,0 },
lewisgw 9:fff2009f826e 18 { 0,0,0,1,0,0,1,0,0,0 },
lewisgw 9:fff2009f826e 19 { 1,0,0,1,0,0,0,1,0,1 },
lewisgw 9:fff2009f826e 20 { 0,1,1,1,1,1,1,1,1,0 },
lewisgw 9:fff2009f826e 21 { 0,0,1,0,0,0,0,1,0,0 },
lewisgw 4:ce4eea1c2a28 22 };
lewisgw 4:ce4eea1c2a28 23
lewisgw 9:fff2009f826e 24 int skate_left[17][10] = {
lewisgw 9:fff2009f826e 25 { 0,0,0,0,1,1,1,0,0,0 },
lewisgw 9:fff2009f826e 26 { 0,0,0,1,1,1,1,0,0,0 },
lewisgw 9:fff2009f826e 27 { 0,0,0,1,1,1,1,1,1,0 },
lewisgw 9:fff2009f826e 28 { 0,0,0,1,1,0,1,0,0,0 },
lewisgw 9:fff2009f826e 29 { 0,0,0,0,1,1,1,0,0,0 },
lewisgw 9:fff2009f826e 30 { 0,0,0,0,0,1,1,0,0,0 },
lewisgw 9:fff2009f826e 31 { 0,0,0,0,0,1,1,1,0,0 },
lewisgw 9:fff2009f826e 32 { 0,1,1,1,1,1,1,1,0,0 },
lewisgw 9:fff2009f826e 33 { 0,0,0,1,1,1,1,1,1,0 },
lewisgw 9:fff2009f826e 34 { 0,0,0,0,1,1,0,0,1,0 },
lewisgw 9:fff2009f826e 35 { 0,0,0,0,1,1,0,0,0,1 },
lewisgw 9:fff2009f826e 36 { 0,0,0,0,1,1,0,0,0,0 },
lewisgw 9:fff2009f826e 37 { 0,0,0,1,0,1,0,0,0,0 },
lewisgw 9:fff2009f826e 38 { 0,0,1,0,0,1,0,0,0,0 },
lewisgw 9:fff2009f826e 39 { 1,1,0,0,0,1,0,0,0,1 },
lewisgw 9:fff2009f826e 40 { 0,1,1,1,1,1,1,1,1,0 },
lewisgw 9:fff2009f826e 41 { 0,0,0,1,0,0,0,0,1,0 },
lewisgw 3:28a3c118e071 42 };
lewisgw 3:28a3c118e071 43
lewisgw 9:fff2009f826e 44 int skate_stand_left[17][10] = {
lewisgw 9:fff2009f826e 45 { 0,0,0,0,1,1,0,0,0,0 },
lewisgw 9:fff2009f826e 46 { 0,0,0,1,1,1,1,0,0,0 },
lewisgw 9:fff2009f826e 47 { 0,0,0,1,1,1,1,1,1,0 },
lewisgw 9:fff2009f826e 48 { 0,0,0,1,0,0,1,0,0,0 },
lewisgw 9:fff2009f826e 49 { 0,0,0,1,1,1,1,0,0,0 },
lewisgw 9:fff2009f826e 50 { 0,0,0,0,1,1,0,0,0,0 },
lewisgw 9:fff2009f826e 51 { 0,0,0,1,1,1,1,0,0,0 },
lewisgw 9:fff2009f826e 52 { 0,0,1,1,1,1,0,1,0,0 },
lewisgw 9:fff2009f826e 53 { 1,1,0,1,1,1,0,1,0,0 },
lewisgw 9:fff2009f826e 54 { 0,0,0,1,1,1,0,0,0,0 },
lewisgw 9:fff2009f826e 55 { 0,0,1,1,1,1,0,0,0,0 },
lewisgw 9:fff2009f826e 56 { 1,0,1,0,0,1,0,0,0,0 },
lewisgw 9:fff2009f826e 57 { 1,1,0,0,0,1,0,0,0,0 },
lewisgw 9:fff2009f826e 58 { 0,1,0,0,0,1,0,0,0,0 },
lewisgw 9:fff2009f826e 59 { 1,0,1,0,0,1,0,0,0,0 },
lewisgw 9:fff2009f826e 60 { 0,0,0,1,0,1,0,0,0,0 },
lewisgw 9:fff2009f826e 61 { 0,0,1,0,1,1,1,0,0,0 },
lewisgw 3:28a3c118e071 62 };
lewisgw 3:28a3c118e071 63
lewisgw 9:fff2009f826e 64 int skate_stand_right[17][10] = {
lewisgw 9:fff2009f826e 65 { 0,0,0,1,1,0,0,0,0,0 },
lewisgw 9:fff2009f826e 66 { 0,0,1,1,1,1,0,0,0,0 },
lewisgw 9:fff2009f826e 67 { 1,1,1,1,1,1,0,0,0,0 },
lewisgw 9:fff2009f826e 68 { 0,0,1,0,0,1,0,0,0,0 },
lewisgw 9:fff2009f826e 69 { 0,0,1,1,1,1,0,0,0,0 },
lewisgw 9:fff2009f826e 70 { 0,0,0,1,1,0,0,0,0,0 },
lewisgw 9:fff2009f826e 71 { 0,0,1,1,1,1,0,0,0,0 },
lewisgw 9:fff2009f826e 72 { 0,1,1,1,1,0,1,0,0,0 },
lewisgw 9:fff2009f826e 73 { 1,0,1,1,1,0,0,1,0,0 },
lewisgw 9:fff2009f826e 74 { 1,0,1,1,1,0,0,0,0,0 },
lewisgw 9:fff2009f826e 75 { 0,0,1,1,1,1,1,0,0,0 },
lewisgw 9:fff2009f826e 76 { 0,0,1,0,0,0,1,0,1,0 },
lewisgw 9:fff2009f826e 77 { 0,0,1,0,0,0,1,1,0,0 },
lewisgw 9:fff2009f826e 78 { 0,0,1,0,0,0,1,0,1,0 },
lewisgw 9:fff2009f826e 79 { 0,0,1,0,0,1,0,0,0,0 },
lewisgw 9:fff2009f826e 80 { 0,0,1,0,1,0,0,0,0,0 },
lewisgw 9:fff2009f826e 81 { 0,1,1,1,0,1,0,0,0,0 },
lewisgw 3:28a3c118e071 82 };
lewisgw 3:28a3c118e071 83
lewisgw 9:fff2009f826e 84 int skate_duck_right[17][10] = {
lewisgw 9:fff2009f826e 85 { 0,0,0,0,0,0,0,0,0,0 },
lewisgw 9:fff2009f826e 86 { 0,0,0,0,0,0,0,0,0,0 },
lewisgw 9:fff2009f826e 87 { 0,0,0,0,0,0,0,0,0,0 },
lewisgw 9:fff2009f826e 88 { 0,0,0,0,0,0,0,0,0,0 },
lewisgw 9:fff2009f826e 89 { 0,0,0,0,1,1,0,0,0,0 },
lewisgw 9:fff2009f826e 90 { 0,0,0,1,1,1,1,0,0,0 },
lewisgw 9:fff2009f826e 91 { 0,1,1,1,1,1,1,0,0,0 },
lewisgw 9:fff2009f826e 92 { 0,0,0,1,0,0,1,0,0,0 },
lewisgw 9:fff2009f826e 93 { 0,0,0,0,1,1,0,0,0,0 },
lewisgw 9:fff2009f826e 94 { 0,0,1,1,1,1,1,1,0,0 },
lewisgw 9:fff2009f826e 95 { 0,1,0,1,1,1,1,0,1,1 },
lewisgw 9:fff2009f826e 96 { 1,0,0,1,1,1,1,0,0,0 },
lewisgw 9:fff2009f826e 97 { 0,0,0,1,1,1,1,0,0,0 },
lewisgw 9:fff2009f826e 98 { 0,0,1,1,0,0,1,1,0,0 },
lewisgw 9:fff2009f826e 99 { 1,0,1,1,0,0,1,1,0,1 },
lewisgw 9:fff2009f826e 100 { 0,1,1,1,1,1,1,1,1,0 },
lewisgw 9:fff2009f826e 101 { 0,0,1,0,0,0,0,1,0,0 },
lewisgw 4:ce4eea1c2a28 102 };
lewisgw 4:ce4eea1c2a28 103
lewisgw 4:ce4eea1c2a28 104 int skate_duck_left[17][10] = {
lewisgw 9:fff2009f826e 105 { 0,0,0,0,0,0,0,0,0,0 },
lewisgw 9:fff2009f826e 106 { 0,0,0,0,0,0,0,0,0,0 },
lewisgw 9:fff2009f826e 107 { 0,0,0,0,0,0,0,0,0,0 },
lewisgw 9:fff2009f826e 108 { 0,0,0,0,0,0,0,0,0,0 },
lewisgw 9:fff2009f826e 109 { 0,0,0,0,1,1,0,0,0,0 },
lewisgw 9:fff2009f826e 110 { 0,0,0,1,1,1,1,0,0,0 },
lewisgw 9:fff2009f826e 111 { 0,0,0,1,1,1,1,1,1,0 },
lewisgw 9:fff2009f826e 112 { 0,0,0,1,0,0,1,0,0,0 },
lewisgw 9:fff2009f826e 113 { 0,0,0,0,1,1,0,0,0,0 },
lewisgw 9:fff2009f826e 114 { 0,0,1,1,1,1,1,1,0,0 },
lewisgw 9:fff2009f826e 115 { 1,1,0,1,1,1,1,0,1,0 },
lewisgw 9:fff2009f826e 116 { 0,0,0,1,1,1,1,0,0,1 },
lewisgw 9:fff2009f826e 117 { 0,0,0,1,1,1,1,0,0,0 },
lewisgw 9:fff2009f826e 118 { 0,0,1,1,0,0,1,1,0,0 },
lewisgw 9:fff2009f826e 119 { 1,0,1,1,0,0,1,1,0,1 },
lewisgw 9:fff2009f826e 120 { 0,1,1,1,1,1,1,1,1,0 },
lewisgw 9:fff2009f826e 121 { 0,0,1,0,0,0,0,1,0,0 },
lewisgw 3:28a3c118e071 122 };
lewisgw 3:28a3c118e071 123
lewisgw 10:8bf3713d9e9c 124 // Constructor and destructor.
lewisgw 9:fff2009f826e 125 Skateboarder::Skateboarder() {}
lewisgw 2:16ae940b0aee 126
lewisgw 9:fff2009f826e 127 Skateboarder::~Skateboarder() {}
lewisgw 2:16ae940b0aee 128
lewisgw 9:fff2009f826e 129 void Skateboarder::set_x_position_and_sprite(
lewisgw 9:fff2009f826e 130 float joy_x,
lewisgw 9:fff2009f826e 131 int moving_counter,
lewisgw 21:20478f086bc2 132 Skate_direction direction,
lewisgw 14:9861fe85c803 133 float joy_y) {
lewisgw 9:fff2009f826e 134 _skate_direction = direction;
lewisgw 9:fff2009f826e 135 _moving_counter = moving_counter;
lewisgw 9:fff2009f826e 136 process_x_variables(joy_x);
lewisgw 9:fff2009f826e 137 _x = 40 + 0.4*_moving_counter;
lewisgw 14:9861fe85c803 138 check_duck(joy_y);
lewisgw 9:fff2009f826e 139 }
lewisgw 9:fff2009f826e 140
lewisgw 21:20478f086bc2 141 void Skateboarder::process_x_variables(float joy_x) {
lewisgw 21:20478f086bc2 142 if (joy_x > float(0.1)) { // If skater is moving right.
lewisgw 21:20478f086bc2 143 _moving_counter = _moving_counter++; // To be added to current X position.
lewisgw 21:20478f086bc2 144 _skate_direction = Right; // skate direction enum keeps track of last
lewisgw 21:20478f086bc2 145 // direction for not moving situation.
lewisgw 2:16ae940b0aee 146 _sprite_value = Skate_right;
lewisgw 21:20478f086bc2 147 } else if (joy_x < float(-0.1)) { // If skater is moving left.
lewisgw 2:16ae940b0aee 148 _moving_counter = _moving_counter--;
lewisgw 2:16ae940b0aee 149 _skate_direction = Left;
lewisgw 2:16ae940b0aee 150 _sprite_value = Skate_left;
lewisgw 21:20478f086bc2 151 } else if (_skate_direction == Left) { // Skater is not moving.
lewisgw 2:16ae940b0aee 152 _sprite_value = Stand_left;
lewisgw 9:fff2009f826e 153 } else {
lewisgw 2:16ae940b0aee 154 _sprite_value = Stand_right;
lewisgw 9:fff2009f826e 155 }
lewisgw 9:fff2009f826e 156 }
lewisgw 9:fff2009f826e 157
lewisgw 9:fff2009f826e 158 void Skateboarder::check_duck(float joy_y) {
lewisgw 21:20478f086bc2 159 // Re-write Sprite_value with correct direction if the duck condition is met.
lewisgw 9:fff2009f826e 160 if (joy_y < -0.1 && _skate_direction == Right) {
lewisgw 4:ce4eea1c2a28 161 _sprite_value = Skate_duck_right;
lewisgw 9:fff2009f826e 162 } else if (joy_y < -0.1 && _skate_direction == Left) {
lewisgw 4:ce4eea1c2a28 163 _sprite_value = Skate_duck_left;
lewisgw 9:fff2009f826e 164 }
lewisgw 9:fff2009f826e 165 }
lewisgw 21:20478f086bc2 166
lewisgw 21:20478f086bc2 167 void Skateboarder::set_y_position(
lewisgw 21:20478f086bc2 168 bool jump,
lewisgw 21:20478f086bc2 169 int jump_counter,
lewisgw 21:20478f086bc2 170 int level_condition,
lewisgw 21:20478f086bc2 171 Gamepad &gamepad) {
lewisgw 9:fff2009f826e 172 _jump_counter = jump_counter;
lewisgw 10:8bf3713d9e9c 173 _level_condition = level_condition;
lewisgw 21:20478f086bc2 174 if (jump && _jump_counter < 25) { // Jump condition. Jump counter must be <
lewisgw 21:20478f086bc2 175 // 25 to limit double jump.
lewisgw 21:20478f086bc2 176 _jump_counter = 40; // Controls height and fall time.
lewisgw 21:20478f086bc2 177 gamepad.tone(440, 0.05); // Buzzer jump sound.
lewisgw 20:a8cad4e044ea 178 wait(0.05);
lewisgw 20:a8cad4e044ea 179 gamepad.tone(880, 0.05);
lewisgw 20:a8cad4e044ea 180 }
lewisgw 21:20478f086bc2 181 if (_jump_counter !=0) _jump_counter--;
lewisgw 21:20478f086bc2 182 if (_level_condition == 1 && jump){ // If skater is under / on-top of upper
lewisgw 21:20478f086bc2 183 // platforms, will jump to / stay on upper platforms.
lewisgw 10:8bf3713d9e9c 184 _level = 5;
lewisgw 10:8bf3713d9e9c 185 } else if (_level_condition == 0) {
lewisgw 10:8bf3713d9e9c 186 _level = 23;
lewisgw 10:8bf3713d9e9c 187 }
lewisgw 21:20478f086bc2 188 _y = _level - 0.5*_jump_counter; // Level offsets Y for approprite platform
lewisgw 21:20478f086bc2 189 // and scaled jump counter to control height.
lewisgw 9:fff2009f826e 190 }
lewisgw 2:16ae940b0aee 191
lewisgw 9:fff2009f826e 192 int Skateboarder::get_x_position() {
lewisgw 9:fff2009f826e 193 return _x;
lewisgw 9:fff2009f826e 194 }
lewisgw 2:16ae940b0aee 195
lewisgw 9:fff2009f826e 196 int Skateboarder::get_moving_counter() {
lewisgw 9:fff2009f826e 197 return _moving_counter;
lewisgw 9:fff2009f826e 198 }
lewisgw 2:16ae940b0aee 199
lewisgw 9:fff2009f826e 200 int Skateboarder::get_y_position() {
lewisgw 9:fff2009f826e 201 return _y;
lewisgw 9:fff2009f826e 202 }
lewisgw 2:16ae940b0aee 203
lewisgw 9:fff2009f826e 204 int Skateboarder::get_jump_counter() {
lewisgw 9:fff2009f826e 205 return _jump_counter;
lewisgw 9:fff2009f826e 206 }
lewisgw 3:28a3c118e071 207
lewisgw 21:20478f086bc2 208 Skate_direction Skateboarder::get_direction() {
lewisgw 9:fff2009f826e 209 return _skate_direction;
lewisgw 9:fff2009f826e 210 }
lewisgw 2:16ae940b0aee 211
lewisgw 9:fff2009f826e 212 Sprite_value Skateboarder::get_sprite_value() {
lewisgw 9:fff2009f826e 213 return _sprite_value;
lewisgw 9:fff2009f826e 214 }
lewisgw 3:28a3c118e071 215
lewisgw 9:fff2009f826e 216 int * Skateboarder::get_sprite(Sprite_value sprite) {
lewisgw 9:fff2009f826e 217 if (sprite == Skate_right) {
lewisgw 3:28a3c118e071 218 return *skate_right;
lewisgw 9:fff2009f826e 219 } else if (sprite == Skate_left) {
lewisgw 3:28a3c118e071 220 return *skate_left;
lewisgw 9:fff2009f826e 221 } else if (sprite == Stand_left) {
lewisgw 4:ce4eea1c2a28 222 return *skate_stand_left;
lewisgw 9:fff2009f826e 223 } else if (sprite == Skate_duck_right) {
lewisgw 4:ce4eea1c2a28 224 return *skate_duck_right;
lewisgw 9:fff2009f826e 225 } else if (sprite == Skate_duck_left) {
lewisgw 4:ce4eea1c2a28 226 return *skate_duck_left;
lewisgw 9:fff2009f826e 227 } else {
lewisgw 4:ce4eea1c2a28 228 return *skate_stand_right;
lewisgw 9:fff2009f826e 229 }
lewisgw 8:5327418f823a 230 }
lewisgw 8:5327418f823a 231
lewisgw 20:a8cad4e044ea 232 void Skateboarder::fall(bool fall_flag, Gamepad &gamepad) {
lewisgw 9:fff2009f826e 233 _fall_flag = fall_flag;
lewisgw 9:fff2009f826e 234 _y++;
lewisgw 21:20478f086bc2 235 gamepad.tone(int(-15.8*_y + 1363), 0.05); // Linear equation makes decending
lewisgw 21:20478f086bc2 236 // frequency sound.
lewisgw 21:20478f086bc2 237 wait(0.005); // Control fall time and fall sound speed.
lewisgw 21:20478f086bc2 238 if (_y == 80) { // Stop falling.
lewisgw 9:fff2009f826e 239 _fall_flag = false;
lewisgw 9:fff2009f826e 240 _reset_flag = true;
lewisgw 9:fff2009f826e 241 }
lewisgw 9:fff2009f826e 242 }
lewisgw 8:5327418f823a 243
lewisgw 8:5327418f823a 244 bool Skateboarder::get_fall_flag() {
lewisgw 9:fff2009f826e 245 return _fall_flag;
lewisgw 9:fff2009f826e 246 }
lewisgw 8:5327418f823a 247
lewisgw 8:5327418f823a 248 bool Skateboarder::get_reset_flag() {
lewisgw 9:fff2009f826e 249 return _reset_flag;
lewisgw 9:fff2009f826e 250 }
lewisgw 8:5327418f823a 251
lewisgw 8:5327418f823a 252 void Skateboarder::set_reset_flag(bool flag) {
lewisgw 9:fff2009f826e 253 if (flag) {
lewisgw 9:fff2009f826e 254 _reset_flag = true;
lewisgw 9:fff2009f826e 255 } else {
lewisgw 9:fff2009f826e 256 _reset_flag = false;
lewisgw 9:fff2009f826e 257 }
lewisgw 9:fff2009f826e 258 }
lewisgw 8:5327418f823a 259
lewisgw 8:5327418f823a 260