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
Diff: LevelCollection.cpp
- Revision:
- 10:bfa1c307c99d
- Parent:
- 0:5fa232ee5fdf
- Child:
- 11:2ddaf46e95cb
--- a/LevelCollection.cpp Sun Jun 09 14:28:53 2013 +0000 +++ b/LevelCollection.cpp Sun Jun 09 19:34:56 2013 +0000 @@ -8,29 +8,8 @@ #include <stdio.h> #include "LevelCollection.h" #include "Level0.h" -#include "Level1.h" -#include "Level2.h" -#if 0 - #include "Level3.h" - #include "Level4.h" - #include "Level5.h" - #include "Level6.h" - #include "Level7.h" - #include "Level8.h" - #include "Level9.h" - #include "Level10.h" - #include "Level10.h" - #include "Level11.h" - #include "Level12.h" - #include "Level13.h" - #include "Level14.h" - #include "Level15.h" - #include "Level16.h" - #include "Level17.h" - #include "Level18.h" - #include "Level19.h" - #include "Level20.h" -#endif +#include "LevelNormal.h" +#include "LevelDescriptor.h" /***************/ /* CONSTRUCTOR */ @@ -53,58 +32,20 @@ return LEVELCOUNT; } -// Individual levels. -static Level0 level0; // Not a real level. This is attract mode. -static Level1 level1; -static Level2 level2; -#if 0 -static Level3 level3; -static Level4 level4; -static Level5 level5; -static Level6 level6; -static Level7 level7; -static Level8 level8; -static Level9 level9; -static Level10 level10; -static Level11 level11; -static Level12 level12; -static Level13 level13; -static Level14 level14; -static Level15 level15; -static Level16 level16; -static Level17 level17; -static Level18 level18; -static Level19 level19; -static Level20 level20; -#endif +// Level 0 which is NOT dynamically allocated. +// Not a real level. This is attract mode. +static Level0 level0; -// Pointers to all the levels. -// If I have got this right then each pointer in the array points to a -// Level that is NOT const, but the array itself is const and cannot be modified. -static Level* const levels[ LEVELCOUNT ] = { - &level0, - &level1, - &level2, -#if 0 - &level3, - &level4, - &level5, - &level6, - &level7, - &level8, - &level9, - &level10, - &level11, - &level12, - &level13, - &level14, - &level15, - &level16, - &level17, - &level18, - &level19, - &level20, -#endif +// Level descriptors. +static const UInt8 ld0[] = { ENDDESCRIPTOR }; +static const UInt8 ld1[] = { Grunt, 5, Crusher, 5, ENDDESCRIPTOR }; +static const UInt8 ld2[] = { Grunt, 10, Brain, 2, ENDDESCRIPTOR }; + +// Array pointing to level data for each level. +static const UInt8* const levelDescriptors[ LEVELCOUNT ] = { + ld0, + ld1, + ld2, }; /***************/ @@ -114,15 +55,29 @@ // Returns pointer to level or NULL if no such level. Level *LevelCollection::GetLevel( UInt8 levelNumber ) { if( levelNumber >= LEVELCOUNT ) { + // Level number out of range. return (Level*)NULL; } + else if( levelNumber == 0 ) { + // Level zero is the attract mode and is not dynamically allocated. + return &level0; + } else { - // Fetch pointer to level from array and tag it with the - // correct level number before returning it. - Level *level = levels[ levelNumber ]; + // Fetch level descriptor for this level and create a Level from it. + Level *level = new LevelNormal( levelDescriptors[ levelNumber ] ); + // Tag it with the correct level number before returning it. level->LevelNumber = levelNumber; return level; } } - +/*******************************/ +/* FREE MEMORY USED BY A LEVEL */ +/*******************************/ +// Pass pointer to a level. +// Frees memory used by level. +void LevelCollection::FreeLevel( Level *level ) { + if( ( level != (Level*)NULL ) && level->IsDynamicallyAllocated ) { + delete level; + } +}