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:
Sun Jun 09 19:58:49 2013 +0000
Revision:
11:2ddaf46e95cb
Parent:
10:bfa1c307c99d
Ported over all 20 levels from the Maple version of the game. Looks good. No memory leaks so far.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RichardE 10:bfa1c307c99d 1 /*
RichardE 10:bfa1c307c99d 2 * SOURCE FILE : EnemyFactory.cpp
RichardE 10:bfa1c307c99d 3 *
RichardE 10:bfa1c307c99d 4 * Definition of class EnemyFactory.
RichardE 10:bfa1c307c99d 5 *
RichardE 10:bfa1c307c99d 6 */
RichardE 10:bfa1c307c99d 7
RichardE 10:bfa1c307c99d 8 #include "EnemyFactory.h"
RichardE 10:bfa1c307c99d 9
RichardE 10:bfa1c307c99d 10 // Define this for debugging messages.
RichardE 11:2ddaf46e95cb 11 #undef CHATTY
RichardE 10:bfa1c307c99d 12
RichardE 10:bfa1c307c99d 13 #ifdef CHATTY
RichardE 10:bfa1c307c99d 14 #include "mbed.h"
RichardE 10:bfa1c307c99d 15 extern Serial pc;
RichardE 10:bfa1c307c99d 16 #endif
RichardE 10:bfa1c307c99d 17
RichardE 10:bfa1c307c99d 18 // An instance of this class.
RichardE 10:bfa1c307c99d 19 EnemyFactory EnemyFactory::Instance;
RichardE 10:bfa1c307c99d 20
RichardE 10:bfa1c307c99d 21 /***************/
RichardE 10:bfa1c307c99d 22 /* CONSTRUCTOR */
RichardE 10:bfa1c307c99d 23 /***************/
RichardE 10:bfa1c307c99d 24 EnemyFactory::EnemyFactory() :
RichardE 10:bfa1c307c99d 25 enemyCount( 0UL )
RichardE 10:bfa1c307c99d 26 {
RichardE 10:bfa1c307c99d 27 }
RichardE 10:bfa1c307c99d 28
RichardE 10:bfa1c307c99d 29 /**************/
RichardE 10:bfa1c307c99d 30 /* DESTRUCTOR */
RichardE 10:bfa1c307c99d 31 /**************/
RichardE 10:bfa1c307c99d 32 EnemyFactory::~EnemyFactory()
RichardE 10:bfa1c307c99d 33 {
RichardE 10:bfa1c307c99d 34 }
RichardE 10:bfa1c307c99d 35
RichardE 10:bfa1c307c99d 36 /*****************/
RichardE 10:bfa1c307c99d 37 /* MAKE AN ENEMY */
RichardE 10:bfa1c307c99d 38 /*****************/
RichardE 10:bfa1c307c99d 39 // Pass enemy type in et.
RichardE 10:bfa1c307c99d 40 // Returns a newly created object or NULL on failure.
RichardE 10:bfa1c307c99d 41 EnemyObject* EnemyFactory::MakeEnemy( EnemyType et ) {
RichardE 10:bfa1c307c99d 42 EnemyObject *enemy;
RichardE 10:bfa1c307c99d 43 switch( et ) {
RichardE 10:bfa1c307c99d 44
RichardE 10:bfa1c307c99d 45 case Grunt :
RichardE 10:bfa1c307c99d 46 enemy = new GruntObject();
RichardE 10:bfa1c307c99d 47 break;
RichardE 10:bfa1c307c99d 48
RichardE 10:bfa1c307c99d 49 case BlueMeany :
RichardE 10:bfa1c307c99d 50 enemy = new BlueMeanyObject();
RichardE 10:bfa1c307c99d 51 break;
RichardE 10:bfa1c307c99d 52
RichardE 10:bfa1c307c99d 53 case Crusher :
RichardE 10:bfa1c307c99d 54 enemy = new CrusherObject();
RichardE 10:bfa1c307c99d 55 break;
RichardE 10:bfa1c307c99d 56
RichardE 10:bfa1c307c99d 57 case Brain :
RichardE 10:bfa1c307c99d 58 enemy = new BrainObject();
RichardE 10:bfa1c307c99d 59 break;
RichardE 10:bfa1c307c99d 60
RichardE 10:bfa1c307c99d 61 case BrainBullet :
RichardE 10:bfa1c307c99d 62 enemy = new BrainBulletObject();
RichardE 10:bfa1c307c99d 63 break;
RichardE 10:bfa1c307c99d 64
RichardE 10:bfa1c307c99d 65 case Mutant :
RichardE 10:bfa1c307c99d 66 enemy = new MutantObject();
RichardE 10:bfa1c307c99d 67 break;
RichardE 10:bfa1c307c99d 68
RichardE 10:bfa1c307c99d 69 default :
RichardE 10:bfa1c307c99d 70 enemy = (EnemyObject*)NULL;
RichardE 10:bfa1c307c99d 71 break;
RichardE 10:bfa1c307c99d 72
RichardE 10:bfa1c307c99d 73 }
RichardE 10:bfa1c307c99d 74
RichardE 10:bfa1c307c99d 75 if( enemy != (EnemyObject*)NULL ) {
RichardE 10:bfa1c307c99d 76 enemyCount++;
RichardE 10:bfa1c307c99d 77 #ifdef CHATTY
RichardE 10:bfa1c307c99d 78 pc.printf( "Enemy type %d created. %lu enemies exist.\r\n", (int)enemy->GetEnemyType(), enemyCount );
RichardE 10:bfa1c307c99d 79 #endif
RichardE 10:bfa1c307c99d 80 }
RichardE 10:bfa1c307c99d 81
RichardE 10:bfa1c307c99d 82 return enemy;
RichardE 10:bfa1c307c99d 83 }
RichardE 10:bfa1c307c99d 84
RichardE 10:bfa1c307c99d 85 /*******************/
RichardE 10:bfa1c307c99d 86 /* DELETE AN ENEMY */
RichardE 10:bfa1c307c99d 87 /*******************/
RichardE 10:bfa1c307c99d 88 // Pass pointer to enemy to delete.
RichardE 10:bfa1c307c99d 89 // ONLY USE THIS ON OBJECTS CREATED USING MakeEnemy method.
RichardE 10:bfa1c307c99d 90 void EnemyFactory::DeleteEnemy( EnemyObject *enemy ) {
RichardE 10:bfa1c307c99d 91 enemyCount--;
RichardE 10:bfa1c307c99d 92 #ifdef CHATTY
RichardE 10:bfa1c307c99d 93 pc.printf( "Enemy type %d deleted. %lu enemies exist.\r\n", (int)enemy->GetEnemyType(), enemyCount );
RichardE 10:bfa1c307c99d 94 #endif
RichardE 10:bfa1c307c99d 95 delete enemy;
RichardE 10:bfa1c307c99d 96 }