Version of Robotron arcade game using LPC1768, a Gameduino shield, a serial EEPROM (for high scores), two microswitch joysticks and two buttons plus a box to put it in. 20 levels of mayhem.
Dependencies: 25LCxxx_SPI CommonTypes Gameduino mbed
Walker.cpp
- Committer:
- RichardE
- Date:
- 2013-06-17
- Revision:
- 18:70190f956a24
- Parent:
- 7:e72691603fd3
File content as of revision 18:70190f956a24:
/* * SOURCE FILE : Walker.cpp * * Methods for objects that walk sideways on (like humans and crushers). * */ #include "Gameduino.h" // Gameduino stuff #include "GDConst.h" #include "Walker.h" #include "Random.h" /*************************************************/ /* INITIALISE HORIZONTAL AND VERTICAL VELOCITIES */ /*************************************************/ // Pass pointers to horizontal and vertical velocities in hv and vv. void Walker::InitialiseVelocities( Int16 *hv, Int16 *vv ) { // Initialise horizontal and vertical speeds. UInt8 rnd = Random::Get( 4 ); *hv = GameObject::FromPixel( 1 ) >> 2; if( rnd & 1 ) { *hv = -(*hv); } *vv = GameObject::FromPixel( 1 ) >> 4; if( rnd & 2 ) { *vv = -(*vv); } } /*********************************************************/ /* UPDATE COORDINATES AND VELOCITIES TO MAKE OBJECT WALK */ /*********************************************************/ // Pass pointers to x and y coordinates in x and y. // Pass pointers to horizontal and vertical velocities in hv and vv. // Pass restriction flags (as defined in GameObject.h) in restriction Flags. void Walker::Walk( Int16 *x, Int16 *y, Int16 *hv, Int16 *vv, UInt8 restrictionFlags ) { // Make object bounce of edges of restriction area. if( restrictionFlags & (UInt8)( GameObject::LeftRestriction | GameObject::RightRestriction ) ) { *hv = -(*hv); } if( restrictionFlags & (UInt8)( GameObject::UpRestriction | GameObject::DownRestriction ) ) { *vv = -(*vv); } *x += *hv; *y += *vv; } /*************************/ /* DRAW A WALKING OBJECT */ /*************************/ // Pass pointer to Gameduino to draw on in gd. // Pass sprite number in spriteNumber. // Pass x and y coordinates in x and y (NOT pixel coordinates). // Pass counter used to pace animation in frameCounter. // Pass pointer to animation data (array of AnimationStages sprite image numbers) in animationData. void Walker::Draw( Gameduino *gd, UInt8 spriteNumber, Int16 x, Int16 y, Int16 hv, UInt8 frameCounter, const UInt8 *animationData ) { // Reverse sprite image horizontally if horizontal speed is positive. Gameduino::Rotation transform = ( hv < 0 ) ? Gameduino::None : Gameduino::FlipX; // Image number changes with the frame counter. const UInt8 *address = animationData + frameCounter % AnimationStages; // Update sprite location and image. Note the last parameter is BadGuy so that it is possible // for player to collide with a human. GoodGuy would mean collisions would be ignored. gd->sprite( spriteNumber, GameObject::ToPixel( x ), GameObject::ToPixel( y ), *address, 0, transform, BadGuy ); }