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
- Committer:
- lewisgw
- Date:
- 2019-04-16
- Revision:
- 20:a8cad4e044ea
- Parent:
- 18:304700b5d8f8
- Child:
- 21:20478f086bc2
File content as of revision 20:a8cad4e044ea:
#include "Skateboarder.h" // Define all the different possible sprite arrays. int skate_right[17][10] = { { 0,0,0,1,1,1,0,0,0,0 }, { 0,0,0,1,1,1,1,0,0,0 }, { 0,1,1,1,1,1,1,0,0,0 }, { 0,0,0,1,0,1,1,0,0,0 }, { 0,0,0,1,1,1,0,0,0,0 }, { 0,0,0,1,1,0,0,0,0,0 }, { 0,0,0,1,1,0,0,0,0,0 }, { 0,1,1,1,1,1,1,1,0,0 }, { 1,1,0,1,1,0,0,1,1,0 }, { 1,0,0,1,1,0,0,0,0,0 }, { 0,0,0,1,1,0,0,0,0,0 }, { 0,0,0,1,1,0,0,0,0,0 }, { 0,0,0,1,0,1,0,0,0,0 }, { 0,0,0,1,0,0,1,0,0,0 }, { 1,0,0,1,0,0,0,1,0,1 }, { 0,1,1,1,1,1,1,1,1,0 }, { 0,0,1,0,0,0,0,1,0,0 }, }; int skate_left[17][10] = { { 0,0,0,0,1,1,1,0,0,0 }, { 0,0,0,1,1,1,1,0,0,0 }, { 0,0,0,1,1,1,1,1,1,0 }, { 0,0,0,1,1,0,1,0,0,0 }, { 0,0,0,0,1,1,1,0,0,0 }, { 0,0,0,0,0,1,1,0,0,0 }, { 0,0,0,0,0,1,1,1,0,0 }, { 0,1,1,1,1,1,1,1,0,0 }, { 0,0,0,1,1,1,1,1,1,0 }, { 0,0,0,0,1,1,0,0,1,0 }, { 0,0,0,0,1,1,0,0,0,1 }, { 0,0,0,0,1,1,0,0,0,0 }, { 0,0,0,1,0,1,0,0,0,0 }, { 0,0,1,0,0,1,0,0,0,0 }, { 1,1,0,0,0,1,0,0,0,1 }, { 0,1,1,1,1,1,1,1,1,0 }, { 0,0,0,1,0,0,0,0,1,0 }, }; int skate_stand_left[17][10] = { { 0,0,0,0,1,1,0,0,0,0 }, { 0,0,0,1,1,1,1,0,0,0 }, { 0,0,0,1,1,1,1,1,1,0 }, { 0,0,0,1,0,0,1,0,0,0 }, { 0,0,0,1,1,1,1,0,0,0 }, { 0,0,0,0,1,1,0,0,0,0 }, { 0,0,0,1,1,1,1,0,0,0 }, { 0,0,1,1,1,1,0,1,0,0 }, { 1,1,0,1,1,1,0,1,0,0 }, { 0,0,0,1,1,1,0,0,0,0 }, { 0,0,1,1,1,1,0,0,0,0 }, { 1,0,1,0,0,1,0,0,0,0 }, { 1,1,0,0,0,1,0,0,0,0 }, { 0,1,0,0,0,1,0,0,0,0 }, { 1,0,1,0,0,1,0,0,0,0 }, { 0,0,0,1,0,1,0,0,0,0 }, { 0,0,1,0,1,1,1,0,0,0 }, }; int skate_stand_right[17][10] = { { 0,0,0,1,1,0,0,0,0,0 }, { 0,0,1,1,1,1,0,0,0,0 }, { 1,1,1,1,1,1,0,0,0,0 }, { 0,0,1,0,0,1,0,0,0,0 }, { 0,0,1,1,1,1,0,0,0,0 }, { 0,0,0,1,1,0,0,0,0,0 }, { 0,0,1,1,1,1,0,0,0,0 }, { 0,1,1,1,1,0,1,0,0,0 }, { 1,0,1,1,1,0,0,1,0,0 }, { 1,0,1,1,1,0,0,0,0,0 }, { 0,0,1,1,1,1,1,0,0,0 }, { 0,0,1,0,0,0,1,0,1,0 }, { 0,0,1,0,0,0,1,1,0,0 }, { 0,0,1,0,0,0,1,0,1,0 }, { 0,0,1,0,0,1,0,0,0,0 }, { 0,0,1,0,1,0,0,0,0,0 }, { 0,1,1,1,0,1,0,0,0,0 }, }; int skate_duck_right[17][10] = { { 0,0,0,0,0,0,0,0,0,0 }, { 0,0,0,0,0,0,0,0,0,0 }, { 0,0,0,0,0,0,0,0,0,0 }, { 0,0,0,0,0,0,0,0,0,0 }, { 0,0,0,0,1,1,0,0,0,0 }, { 0,0,0,1,1,1,1,0,0,0 }, { 0,1,1,1,1,1,1,0,0,0 }, { 0,0,0,1,0,0,1,0,0,0 }, { 0,0,0,0,1,1,0,0,0,0 }, { 0,0,1,1,1,1,1,1,0,0 }, { 0,1,0,1,1,1,1,0,1,1 }, { 1,0,0,1,1,1,1,0,0,0 }, { 0,0,0,1,1,1,1,0,0,0 }, { 0,0,1,1,0,0,1,1,0,0 }, { 1,0,1,1,0,0,1,1,0,1 }, { 0,1,1,1,1,1,1,1,1,0 }, { 0,0,1,0,0,0,0,1,0,0 }, }; int skate_duck_left[17][10] = { { 0,0,0,0,0,0,0,0,0,0 }, { 0,0,0,0,0,0,0,0,0,0 }, { 0,0,0,0,0,0,0,0,0,0 }, { 0,0,0,0,0,0,0,0,0,0 }, { 0,0,0,0,1,1,0,0,0,0 }, { 0,0,0,1,1,1,1,0,0,0 }, { 0,0,0,1,1,1,1,1,1,0 }, { 0,0,0,1,0,0,1,0,0,0 }, { 0,0,0,0,1,1,0,0,0,0 }, { 0,0,1,1,1,1,1,1,0,0 }, { 1,1,0,1,1,1,1,0,1,0 }, { 0,0,0,1,1,1,1,0,0,1 }, { 0,0,0,1,1,1,1,0,0,0 }, { 0,0,1,1,0,0,1,1,0,0 }, { 1,0,1,1,0,0,1,1,0,1 }, { 0,1,1,1,1,1,1,1,1,0 }, { 0,0,1,0,0,0,0,1,0,0 }, }; // Constructor and destructor. Skateboarder::Skateboarder() {} Skateboarder::~Skateboarder() {} void Skateboarder::set_x_position_and_sprite( float joy_x, int moving_counter, Skate_Direction direction, float joy_y) { _skate_direction = direction; _moving_counter = moving_counter; process_x_variables(joy_x); _x = 40 + 0.4*_moving_counter; check_duck(joy_y); } void Skateboarder::process_x_variables(float joy_x) { // Sets the value of the Sprite_value enum according to joystick direction // and previous direction if the joystick is not moving. Adds or subtracts // one from moving counter for horizontal movement. if (joy_x > float(0.1)) { _moving_counter = _moving_counter++; _skate_direction = Right; _sprite_value = Skate_right; } else if (joy_x < float(-0.1)) { _moving_counter = _moving_counter--; _skate_direction = Left; _sprite_value = Skate_left; } else if (_skate_direction == Left) { _sprite_value = Stand_left; } else { _sprite_value = Stand_right; } } void Skateboarder::check_duck(float joy_y) { // Re-write the Sprite_value if the duck condition is met. if (joy_y < -0.1 && _skate_direction == Right) { _sprite_value = Skate_duck_right; } else if (joy_y < -0.1 && _skate_direction == Left) { _sprite_value = Skate_duck_left; } } void Skateboarder::set_y_position(bool jump, int jump_counter, int level_condition, Gamepad &gamepad) { _jump_counter = jump_counter; _level_condition = level_condition; // Set jump counter to 40 if button is pressed, jump counter condition is to restrict // double jump. Keep subtracting jump counter from default y position, subtracting // one from the jump counter on every iteration until it is equal to 0. if (jump && _jump_counter < 25) { _jump_counter = 40; gamepad.tone(440, 0.05); wait(0.05); gamepad.tone(880, 0.05); } if (_jump_counter !=0) _jump_counter--; if(_level_condition == 1 && jump){ _level = 5; } else if (_level_condition == 0) { _level = 23; } _y = _level - 0.5*_jump_counter; } int Skateboarder::get_x_position() { return _x; } int Skateboarder::get_moving_counter() { return _moving_counter; } int Skateboarder::get_y_position() { return _y; } int Skateboarder::get_jump_counter() { return _jump_counter; } Skate_Direction Skateboarder::get_direction() { return _skate_direction; } Sprite_value Skateboarder::get_sprite_value() { return _sprite_value; } int * Skateboarder::get_sprite(Sprite_value sprite) { if (sprite == Skate_right) { return *skate_right; } else if (sprite == Skate_left) { return *skate_left; } else if (sprite == Stand_left) { return *skate_stand_left; } else if (sprite == Skate_duck_right) { return *skate_duck_right; } else if (sprite == Skate_duck_left) { return *skate_duck_left; } else { return *skate_stand_right; } } void Skateboarder::fall(bool fall_flag, Gamepad &gamepad) { _fall_flag = fall_flag; _y++; gamepad.tone(int(-15.8*_y + 1363), 0.05); wait(0.005); if (_y == 80) { _fall_flag = false; _reset_flag = true; } } bool Skateboarder::get_fall_flag() { return _fall_flag; } bool Skateboarder::get_reset_flag() { return _reset_flag; } void Skateboarder::set_reset_flag(bool flag) { if (flag) { _reset_flag = true; } else { _reset_flag = false; } }