ELEC2645 (2018/19) / Mbed 2 deprecated el17lw

Dependencies:   mbed

Committer:
lewisgw
Date:
Tue Apr 16 19:19:43 2019 +0000
Revision:
20:a8cad4e044ea
Parent:
18:304700b5d8f8
Child:
21:20478f086bc2
Added sounds throughout the game for jumping, falling, collisions and dying sequence and added a musical tune that plays over the menus.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lewisgw 2:16ae940b0aee 1 #include "Skateboarder.h"
lewisgw 2:16ae940b0aee 2
lewisgw 10:8bf3713d9e9c 3 // Define all the different possible 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 9:fff2009f826e 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 9:fff2009f826e 141 void Skateboarder::process_x_variables(float joy_x) {
lewisgw 10:8bf3713d9e9c 142 // Sets the value of the Sprite_value enum according to joystick direction
lewisgw 10:8bf3713d9e9c 143 // and previous direction if the joystick is not moving. Adds or subtracts
lewisgw 10:8bf3713d9e9c 144 // one from moving counter for horizontal movement.
lewisgw 18:304700b5d8f8 145 if (joy_x > float(0.1)) {
lewisgw 2:16ae940b0aee 146 _moving_counter = _moving_counter++;
lewisgw 2:16ae940b0aee 147 _skate_direction = Right;
lewisgw 2:16ae940b0aee 148 _sprite_value = Skate_right;
lewisgw 18:304700b5d8f8 149 } else if (joy_x < float(-0.1)) {
lewisgw 2:16ae940b0aee 150 _moving_counter = _moving_counter--;
lewisgw 2:16ae940b0aee 151 _skate_direction = Left;
lewisgw 2:16ae940b0aee 152 _sprite_value = Skate_left;
lewisgw 9:fff2009f826e 153 } else if (_skate_direction == Left) {
lewisgw 2:16ae940b0aee 154 _sprite_value = Stand_left;
lewisgw 9:fff2009f826e 155 } else {
lewisgw 2:16ae940b0aee 156 _sprite_value = Stand_right;
lewisgw 9:fff2009f826e 157 }
lewisgw 9:fff2009f826e 158 }
lewisgw 9:fff2009f826e 159
lewisgw 9:fff2009f826e 160 void Skateboarder::check_duck(float joy_y) {
lewisgw 10:8bf3713d9e9c 161 // Re-write the Sprite_value if the duck condition is met.
lewisgw 9:fff2009f826e 162 if (joy_y < -0.1 && _skate_direction == Right) {
lewisgw 4:ce4eea1c2a28 163 _sprite_value = Skate_duck_right;
lewisgw 9:fff2009f826e 164 } else if (joy_y < -0.1 && _skate_direction == Left) {
lewisgw 4:ce4eea1c2a28 165 _sprite_value = Skate_duck_left;
lewisgw 9:fff2009f826e 166 }
lewisgw 9:fff2009f826e 167 }
lewisgw 9:fff2009f826e 168
lewisgw 2:16ae940b0aee 169
lewisgw 20:a8cad4e044ea 170 void Skateboarder::set_y_position(bool jump, int jump_counter, int level_condition, Gamepad &gamepad) {
lewisgw 9:fff2009f826e 171 _jump_counter = jump_counter;
lewisgw 10:8bf3713d9e9c 172 _level_condition = level_condition;
lewisgw 18:304700b5d8f8 173 // Set jump counter to 40 if button is pressed, jump counter condition is to restrict
lewisgw 10:8bf3713d9e9c 174 // double jump. Keep subtracting jump counter from default y position, subtracting
lewisgw 10:8bf3713d9e9c 175 // one from the jump counter on every iteration until it is equal to 0.
lewisgw 20:a8cad4e044ea 176 if (jump && _jump_counter < 25) {
lewisgw 20:a8cad4e044ea 177 _jump_counter = 40;
lewisgw 20:a8cad4e044ea 178 gamepad.tone(440, 0.05);
lewisgw 20:a8cad4e044ea 179 wait(0.05);
lewisgw 20:a8cad4e044ea 180 gamepad.tone(880, 0.05);
lewisgw 20:a8cad4e044ea 181 }
lewisgw 9:fff2009f826e 182 if (_jump_counter !=0) _jump_counter--;
lewisgw 10:8bf3713d9e9c 183 if(_level_condition == 1 && jump){
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 10:8bf3713d9e9c 188 _y = _level - 0.5*_jump_counter;
lewisgw 9:fff2009f826e 189 }
lewisgw 2:16ae940b0aee 190
lewisgw 2:16ae940b0aee 191
lewisgw 10:8bf3713d9e9c 192
lewisgw 9:fff2009f826e 193 int Skateboarder::get_x_position() {
lewisgw 9:fff2009f826e 194 return _x;
lewisgw 9:fff2009f826e 195 }
lewisgw 2:16ae940b0aee 196
lewisgw 9:fff2009f826e 197 int Skateboarder::get_moving_counter() {
lewisgw 9:fff2009f826e 198 return _moving_counter;
lewisgw 9:fff2009f826e 199 }
lewisgw 2:16ae940b0aee 200
lewisgw 9:fff2009f826e 201 int Skateboarder::get_y_position() {
lewisgw 9:fff2009f826e 202 return _y;
lewisgw 9:fff2009f826e 203 }
lewisgw 2:16ae940b0aee 204
lewisgw 9:fff2009f826e 205 int Skateboarder::get_jump_counter() {
lewisgw 9:fff2009f826e 206 return _jump_counter;
lewisgw 9:fff2009f826e 207 }
lewisgw 3:28a3c118e071 208
lewisgw 9:fff2009f826e 209 Skate_Direction Skateboarder::get_direction() {
lewisgw 9:fff2009f826e 210 return _skate_direction;
lewisgw 9:fff2009f826e 211 }
lewisgw 2:16ae940b0aee 212
lewisgw 9:fff2009f826e 213 Sprite_value Skateboarder::get_sprite_value() {
lewisgw 9:fff2009f826e 214 return _sprite_value;
lewisgw 9:fff2009f826e 215 }
lewisgw 3:28a3c118e071 216
lewisgw 9:fff2009f826e 217 int * Skateboarder::get_sprite(Sprite_value 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 9:fff2009f826e 234 _fall_flag = fall_flag;
lewisgw 9:fff2009f826e 235 _y++;
lewisgw 20:a8cad4e044ea 236 gamepad.tone(int(-15.8*_y + 1363), 0.05);
lewisgw 20:a8cad4e044ea 237 wait(0.005);
lewisgw 9:fff2009f826e 238 if (_y == 80) {
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