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

Committer:
RichardE
Date:
Mon Jun 17 15:10:43 2013 +0000
Revision:
18:70190f956a24
Parent:
5:0b0651ac7832
Improved response to button 1 when entering high scores (HighScoreEntry.cpp).

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RichardE 4:673eb9735d44 1 /*
RichardE 4:673eb9735d44 2 * SOURCE FILE : BulletManager.cpp
RichardE 4:673eb9735d44 3 *
RichardE 4:673eb9735d44 4 * Responsible for managing a collection of bullets.
RichardE 4:673eb9735d44 5 *
RichardE 4:673eb9735d44 6 */
RichardE 4:673eb9735d44 7
RichardE 4:673eb9735d44 8 #include "BulletManager.h"
RichardE 5:0b0651ac7832 9 #include "BulletObject.h"
RichardE 5:0b0651ac7832 10 #include "ArenaConst.h"
RichardE 4:673eb9735d44 11 #include "GDExtra.h"
RichardE 4:673eb9735d44 12
RichardE 4:673eb9735d44 13 /***************/
RichardE 4:673eb9735d44 14 /* CONSTRUCTOR */
RichardE 4:673eb9735d44 15 /***************/
RichardE 4:673eb9735d44 16 // Pass number of sprite to use for first bullet.
RichardE 4:673eb9735d44 17 // MaxBullets consequtive sprites will be used for bullets.
RichardE 4:673eb9735d44 18 BulletManager::BulletManager( UInt8 firstSpriteNumber ) {
RichardE 4:673eb9735d44 19 // Initialise aspects of bullets that never change.
RichardE 4:673eb9735d44 20 BulletObject *bullet;
RichardE 4:673eb9735d44 21 for( UInt8 b = 0; b < MaxBullets; ++b ) {
RichardE 4:673eb9735d44 22 bullet = bullets + b;
RichardE 4:673eb9735d44 23 bullet->SpriteNumber = firstSpriteNumber + b;
RichardE 4:673eb9735d44 24 bullet->PixelWidth = 6;
RichardE 4:673eb9735d44 25 bullet->PixelHeight = 6;
RichardE 4:673eb9735d44 26 bullet->Bounds = &ArenaRectangle;
RichardE 5:0b0651ac7832 27 // Make sure entry in bulletPointers array is NULL.
RichardE 5:0b0651ac7832 28 bulletPointers[ b ] = (GameObject*)NULL;
RichardE 4:673eb9735d44 29 }
RichardE 4:673eb9735d44 30 }
RichardE 4:673eb9735d44 31
RichardE 4:673eb9735d44 32 /**********************/
RichardE 4:673eb9735d44 33 /* START A BULLET OFF */
RichardE 4:673eb9735d44 34 /**********************/
RichardE 4:673eb9735d44 35 // Pass start coordinates in x and y (NOT pixel coordinates).
RichardE 4:673eb9735d44 36 // Pass bullet velocities in hv and vv (NOT pixel velocities).
RichardE 4:673eb9735d44 37 // Returns true if bullet was started successfully.
RichardE 4:673eb9735d44 38 bool BulletManager::StartBullet( Int16 x, Int16 y, Int16 hv, Int16 vv ) {
RichardE 4:673eb9735d44 39 // Try and find an unused bullet slot.
RichardE 4:673eb9735d44 40 UInt8 index;
RichardE 4:673eb9735d44 41 if( GameObject::FindUnusedObject( bulletPointers, MaxBullets, &index ) ) {
RichardE 4:673eb9735d44 42 // Found a free bullet slot. Point to entry in bullets array.
RichardE 4:673eb9735d44 43 BulletObject *bullet = bullets + index;
RichardE 4:673eb9735d44 44 bulletPointers[ index ] = bullet;
RichardE 4:673eb9735d44 45 bullet->Start( x, y, hv, vv );
RichardE 4:673eb9735d44 46 return true;
RichardE 4:673eb9735d44 47 }
RichardE 4:673eb9735d44 48 else {
RichardE 4:673eb9735d44 49 // No free bullet slots.
RichardE 4:673eb9735d44 50 return false;
RichardE 4:673eb9735d44 51 }
RichardE 4:673eb9735d44 52 }
RichardE 4:673eb9735d44 53
RichardE 4:673eb9735d44 54 /************************/
RichardE 4:673eb9735d44 55 /* KILL A SINGLE BULLET */
RichardE 4:673eb9735d44 56 /************************/
RichardE 5:0b0651ac7832 57 // Pass pointer to Gameduino that displays bullets in gd.
RichardE 4:673eb9735d44 58 // Pass index of bullet in b.
RichardE 5:0b0651ac7832 59 void BulletManager::KillBullet( Gameduino *gd, UInt8 b ) {
RichardE 4:673eb9735d44 60 GameObject *bullet = bulletPointers[ b ];
RichardE 4:673eb9735d44 61 if( bullet != (GameObject*)NULL ) {
RichardE 4:673eb9735d44 62 bulletPointers[ b ] = (BulletObject*)NULL;
RichardE 4:673eb9735d44 63 // Hide bullet sprite by setting y coordinate to 400.
RichardE 5:0b0651ac7832 64 GDExtra::HideSprite( gd, bullet->SpriteNumber );
RichardE 4:673eb9735d44 65 }
RichardE 4:673eb9735d44 66 }
RichardE 4:673eb9735d44 67
RichardE 4:673eb9735d44 68 /********************/
RichardE 4:673eb9735d44 69 /* KILL ALL BULLETS */
RichardE 4:673eb9735d44 70 /********************/
RichardE 5:0b0651ac7832 71 // Pass pointer to Gameduino that displays bullets in gd.
RichardE 5:0b0651ac7832 72 void BulletManager::KillAllBullets( Gameduino *gd ) {
RichardE 4:673eb9735d44 73 for( UInt8 b = 0; b < MaxBullets; ++b ) {
RichardE 5:0b0651ac7832 74 KillBullet( gd, b );
RichardE 4:673eb9735d44 75 }
RichardE 4:673eb9735d44 76 }