ELEC2645 (2018/19) / Mbed 2 deprecated el17lw

Dependencies:   mbed

Committer:
lewisgw
Date:
Fri May 03 09:33:34 2019 +0000
Revision:
26:4253656c0755
Parent:
21:20478f086bc2
Child:
27:c920c5ec31af
Now a dynamic fire at the bottom of the screen that gets higher as the player collects more coins. It will kill the skater if they collide.

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 26:4253656c0755 136 process_x_variables(joy_x);
lewisgw 26:4253656c0755 137 _x = 40 + 0.4*_moving_counter; // Moving counter is scaled for speed control.
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 26:4253656c0755 174 // Jump condition. Jump from A button must be true.
lewisgw 26:4253656c0755 175 if (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 26:4253656c0755 181 if (_jump_counter !=0) _jump_counter--; // Keep falling until not jumping.
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 26:4253656c0755 217 // Return correct sprite.
lewisgw 9:fff2009f826e 218 if (sprite == Skate_right) {
lewisgw 3:28a3c118e071 219 return *skate_right;
lewisgw 9:fff2009f826e 220 } else if (sprite == Skate_left) {
lewisgw 3:28a3c118e071 221 return *skate_left;
lewisgw 9:fff2009f826e 222 } else if (sprite == Stand_left) {
lewisgw 4:ce4eea1c2a28 223 return *skate_stand_left;
lewisgw 9:fff2009f826e 224 } else if (sprite == Skate_duck_right) {
lewisgw 4:ce4eea1c2a28 225 return *skate_duck_right;
lewisgw 9:fff2009f826e 226 } else if (sprite == Skate_duck_left) {
lewisgw 4:ce4eea1c2a28 227 return *skate_duck_left;
lewisgw 9:fff2009f826e 228 } else {
lewisgw 4:ce4eea1c2a28 229 return *skate_stand_right;
lewisgw 9:fff2009f826e 230 }
lewisgw 8:5327418f823a 231 }
lewisgw 8:5327418f823a 232
lewisgw 20:a8cad4e044ea 233 void Skateboarder::fall(bool fall_flag, Gamepad &gamepad) {
lewisgw 26:4253656c0755 234 // Falling sequence.
lewisgw 9:fff2009f826e 235 _fall_flag = fall_flag;
lewisgw 9:fff2009f826e 236 _y++;
lewisgw 21:20478f086bc2 237 gamepad.tone(int(-15.8*_y + 1363), 0.05); // Linear equation makes decending
lewisgw 21:20478f086bc2 238 // frequency sound.
lewisgw 21:20478f086bc2 239 wait(0.005); // Control fall time and fall sound speed.
lewisgw 26:4253656c0755 240 if (_y == 80) { // Stop falling when y = 80.
lewisgw 9:fff2009f826e 241 _fall_flag = false;
lewisgw 9:fff2009f826e 242 _reset_flag = true;
lewisgw 9:fff2009f826e 243 }
lewisgw 9:fff2009f826e 244 }
lewisgw 8:5327418f823a 245
lewisgw 8:5327418f823a 246 bool Skateboarder::get_fall_flag() {
lewisgw 9:fff2009f826e 247 return _fall_flag;
lewisgw 9:fff2009f826e 248 }
lewisgw 8:5327418f823a 249
lewisgw 8:5327418f823a 250 bool Skateboarder::get_reset_flag() {
lewisgw 9:fff2009f826e 251 return _reset_flag;
lewisgw 9:fff2009f826e 252 }
lewisgw 8:5327418f823a 253
lewisgw 8:5327418f823a 254 void Skateboarder::set_reset_flag(bool flag) {
lewisgw 9:fff2009f826e 255 if (flag) {
lewisgw 9:fff2009f826e 256 _reset_flag = true;
lewisgw 9:fff2009f826e 257 } else {
lewisgw 9:fff2009f826e 258 _reset_flag = false;
lewisgw 9:fff2009f826e 259 }
lewisgw 9:fff2009f826e 260 }
lewisgw 8:5327418f823a 261
lewisgw 8:5327418f823a 262