ELEC2645 (2018/19) / Mbed 2 deprecated el17lw

Dependencies:   mbed

Committer:
lewisgw
Date:
Thu Apr 04 18:19:26 2019 +0000
Revision:
14:9861fe85c803
Parent:
10:8bf3713d9e9c
Child:
18:304700b5d8f8
Same functionality as last commit, large functions have been broken up into smaller ones and every .cpp file commented.

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 9:fff2009f826e 145 if (joy_x > 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 9:fff2009f826e 149 } else if (joy_x < -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 10:8bf3713d9e9c 170 void Skateboarder::set_y_position(bool jump, int jump_counter, int level_condition) {
lewisgw 9:fff2009f826e 171 _jump_counter = jump_counter;
lewisgw 10:8bf3713d9e9c 172 _level_condition = level_condition;
lewisgw 10:8bf3713d9e9c 173 // Set jump counter to 40 if button is pressed. Second 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 9:fff2009f826e 176 if (jump && _jump_counter < 10) _jump_counter = 40;
lewisgw 9:fff2009f826e 177 if (_jump_counter !=0) _jump_counter--;
lewisgw 10:8bf3713d9e9c 178 if(_level_condition == 1 && jump){
lewisgw 10:8bf3713d9e9c 179 _level = 5;
lewisgw 10:8bf3713d9e9c 180 } else if (_level_condition == 0) {
lewisgw 10:8bf3713d9e9c 181 _level = 23;
lewisgw 10:8bf3713d9e9c 182 }
lewisgw 10:8bf3713d9e9c 183 _y = _level - 0.5*_jump_counter;
lewisgw 9:fff2009f826e 184 }
lewisgw 2:16ae940b0aee 185
lewisgw 2:16ae940b0aee 186
lewisgw 10:8bf3713d9e9c 187
lewisgw 9:fff2009f826e 188 int Skateboarder::get_x_position() {
lewisgw 9:fff2009f826e 189 return _x;
lewisgw 9:fff2009f826e 190 }
lewisgw 2:16ae940b0aee 191
lewisgw 9:fff2009f826e 192 int Skateboarder::get_moving_counter() {
lewisgw 9:fff2009f826e 193 return _moving_counter;
lewisgw 9:fff2009f826e 194 }
lewisgw 2:16ae940b0aee 195
lewisgw 9:fff2009f826e 196 int Skateboarder::get_y_position() {
lewisgw 9:fff2009f826e 197 return _y;
lewisgw 9:fff2009f826e 198 }
lewisgw 2:16ae940b0aee 199
lewisgw 9:fff2009f826e 200 int Skateboarder::get_jump_counter() {
lewisgw 9:fff2009f826e 201 return _jump_counter;
lewisgw 9:fff2009f826e 202 }
lewisgw 3:28a3c118e071 203
lewisgw 9:fff2009f826e 204 Skate_Direction Skateboarder::get_direction() {
lewisgw 9:fff2009f826e 205 return _skate_direction;
lewisgw 9:fff2009f826e 206 }
lewisgw 2:16ae940b0aee 207
lewisgw 9:fff2009f826e 208 Sprite_value Skateboarder::get_sprite_value() {
lewisgw 9:fff2009f826e 209 return _sprite_value;
lewisgw 9:fff2009f826e 210 }
lewisgw 3:28a3c118e071 211
lewisgw 9:fff2009f826e 212 int * Skateboarder::get_sprite(Sprite_value sprite) {
lewisgw 9:fff2009f826e 213 if (sprite == Skate_right) {
lewisgw 3:28a3c118e071 214 return *skate_right;
lewisgw 9:fff2009f826e 215 } else if (sprite == Skate_left) {
lewisgw 3:28a3c118e071 216 return *skate_left;
lewisgw 9:fff2009f826e 217 } else if (sprite == Stand_left) {
lewisgw 4:ce4eea1c2a28 218 return *skate_stand_left;
lewisgw 9:fff2009f826e 219 } else if (sprite == Skate_duck_right) {
lewisgw 4:ce4eea1c2a28 220 return *skate_duck_right;
lewisgw 9:fff2009f826e 221 } else if (sprite == Skate_duck_left) {
lewisgw 4:ce4eea1c2a28 222 return *skate_duck_left;
lewisgw 9:fff2009f826e 223 } else {
lewisgw 4:ce4eea1c2a28 224 return *skate_stand_right;
lewisgw 9:fff2009f826e 225 }
lewisgw 8:5327418f823a 226 }
lewisgw 8:5327418f823a 227
lewisgw 8:5327418f823a 228 void Skateboarder::fall(bool fall_flag) {
lewisgw 9:fff2009f826e 229 _fall_flag = fall_flag;
lewisgw 9:fff2009f826e 230 _y++;
lewisgw 9:fff2009f826e 231 if (_y == 80) {
lewisgw 9:fff2009f826e 232 _fall_flag = false;
lewisgw 9:fff2009f826e 233 _reset_flag = true;
lewisgw 9:fff2009f826e 234 }
lewisgw 9:fff2009f826e 235 }
lewisgw 8:5327418f823a 236
lewisgw 8:5327418f823a 237 bool Skateboarder::get_fall_flag() {
lewisgw 9:fff2009f826e 238 return _fall_flag;
lewisgw 9:fff2009f826e 239 }
lewisgw 8:5327418f823a 240
lewisgw 8:5327418f823a 241 bool Skateboarder::get_reset_flag() {
lewisgw 9:fff2009f826e 242 return _reset_flag;
lewisgw 9:fff2009f826e 243 }
lewisgw 8:5327418f823a 244
lewisgw 8:5327418f823a 245 void Skateboarder::set_reset_flag(bool flag) {
lewisgw 9:fff2009f826e 246 if (flag) {
lewisgw 9:fff2009f826e 247 _reset_flag = true;
lewisgw 9:fff2009f826e 248 } else {
lewisgw 9:fff2009f826e 249 _reset_flag = false;
lewisgw 9:fff2009f826e 250 }
lewisgw 9:fff2009f826e 251 }
lewisgw 8:5327418f823a 252
lewisgw 8:5327418f823a 253