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-20
- Revision:
- 21:20478f086bc2
- Parent:
- 20:a8cad4e044ea
- Child:
- 26:4253656c0755
File content as of revision 21:20478f086bc2:
#include "Skateboarder.h" // Define all 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) { if (joy_x > float(0.1)) { // If skater is moving right. _moving_counter = _moving_counter++; // To be added to current X position. _skate_direction = Right; // skate direction enum keeps track of last // direction for not moving situation. _sprite_value = Skate_right; } else if (joy_x < float(-0.1)) { // If skater is moving left. _moving_counter = _moving_counter--; _skate_direction = Left; _sprite_value = Skate_left; } else if (_skate_direction == Left) { // Skater is not moving. _sprite_value = Stand_left; } else { _sprite_value = Stand_right; } } void Skateboarder::check_duck(float joy_y) { // Re-write Sprite_value with correct direction 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; if (jump && _jump_counter < 25) { // Jump condition. Jump counter must be < // 25 to limit double jump. _jump_counter = 40; // Controls height and fall time. gamepad.tone(440, 0.05); // Buzzer jump sound. wait(0.05); gamepad.tone(880, 0.05); } if (_jump_counter !=0) _jump_counter--; if (_level_condition == 1 && jump){ // If skater is under / on-top of upper // platforms, will jump to / stay on upper platforms. _level = 5; } else if (_level_condition == 0) { _level = 23; } _y = _level - 0.5*_jump_counter; // Level offsets Y for approprite platform // and scaled jump counter to control height. } 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); // Linear equation makes decending // frequency sound. wait(0.005); // Control fall time and fall sound speed. if (_y == 80) { // Stop falling. _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; } }