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

LevelCollection.cpp

Committer:
RichardE
Date:
2013-06-09
Revision:
10:bfa1c307c99d
Parent:
0:5fa232ee5fdf
Child:
11:2ddaf46e95cb

File content as of revision 10:bfa1c307c99d:

/*
 * SOURCE FILE : LevelCollection.cpp
 *
 * Definition of class LevelCollection.
 *
 */

#include <stdio.h>
#include "LevelCollection.h"
#include "Level0.h"
#include "LevelNormal.h"
#include "LevelDescriptor.h"

/***************/
/* CONSTRUCTOR */
/***************/
LevelCollection::LevelCollection() {
}

/**************/
/* DESTRUCTOR */
/**************/
LevelCollection::~LevelCollection() {
}

#define LEVELCOUNT 3

/************************/
/* GET NUMBER OF LEVELS */
/************************/
UInt8 LevelCollection::GetLevelCount( void ) const {
  return LEVELCOUNT;
}

// Level 0 which is NOT dynamically allocated.
// Not a real level. This is attract mode.
static Level0 level0;

// 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,
};

/***************/
/* GET A LEVEL */
/***************/
// Pass level number in levelNumber.
// 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 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;
    }
}