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.
Dependencies: mbed
Skateboarder/Stakeboarder.cpp@18:304700b5d8f8, 2019-04-12 (annotated)
- Committer:
- lewisgw
- Date:
- Fri Apr 12 11:30:25 2019 +0000
- Revision:
- 18:304700b5d8f8
- Parent:
- 14:9861fe85c803
- Child:
- 20:a8cad4e044ea
Added a large menu artwork and re-named variables and functions to make the code more readable
Who changed what in which revision?
User | Revision | Line number | New 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 | 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 | 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 | 18:304700b5d8f8 | 176 | if (jump && _jump_counter < 15) _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 |