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 10 20:02:28 2013 +0000
Revision:
12:81926431fea7
Parent:
11:2ddaf46e95cb
Changed so you can specify how many humans you want on each level. Mainly messing around with LevelDescriptor and LevelCollection classes.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RichardE 0:5fa232ee5fdf 1 /*
RichardE 0:5fa232ee5fdf 2 * SOURCE FILE : LevelCollection.cpp
RichardE 0:5fa232ee5fdf 3 *
RichardE 0:5fa232ee5fdf 4 * Definition of class LevelCollection.
RichardE 0:5fa232ee5fdf 5 *
RichardE 0:5fa232ee5fdf 6 */
RichardE 0:5fa232ee5fdf 7
RichardE 0:5fa232ee5fdf 8 #include <stdio.h>
RichardE 0:5fa232ee5fdf 9 #include "LevelCollection.h"
RichardE 0:5fa232ee5fdf 10 #include "Level0.h"
RichardE 10:bfa1c307c99d 11 #include "LevelNormal.h"
RichardE 10:bfa1c307c99d 12 #include "LevelDescriptor.h"
RichardE 0:5fa232ee5fdf 13
RichardE 0:5fa232ee5fdf 14 /***************/
RichardE 0:5fa232ee5fdf 15 /* CONSTRUCTOR */
RichardE 0:5fa232ee5fdf 16 /***************/
RichardE 0:5fa232ee5fdf 17 LevelCollection::LevelCollection() {
RichardE 0:5fa232ee5fdf 18 }
RichardE 0:5fa232ee5fdf 19
RichardE 0:5fa232ee5fdf 20 /**************/
RichardE 0:5fa232ee5fdf 21 /* DESTRUCTOR */
RichardE 0:5fa232ee5fdf 22 /**************/
RichardE 0:5fa232ee5fdf 23 LevelCollection::~LevelCollection() {
RichardE 0:5fa232ee5fdf 24 }
RichardE 0:5fa232ee5fdf 25
RichardE 11:2ddaf46e95cb 26 #define LEVELCOUNT 21
RichardE 0:5fa232ee5fdf 27
RichardE 0:5fa232ee5fdf 28 /************************/
RichardE 0:5fa232ee5fdf 29 /* GET NUMBER OF LEVELS */
RichardE 0:5fa232ee5fdf 30 /************************/
RichardE 0:5fa232ee5fdf 31 UInt8 LevelCollection::GetLevelCount( void ) const {
RichardE 0:5fa232ee5fdf 32 return LEVELCOUNT;
RichardE 0:5fa232ee5fdf 33 }
RichardE 0:5fa232ee5fdf 34
RichardE 10:bfa1c307c99d 35 // Level 0 which is NOT dynamically allocated.
RichardE 10:bfa1c307c99d 36 // Not a real level. This is attract mode.
RichardE 10:bfa1c307c99d 37 static Level0 level0;
RichardE 0:5fa232ee5fdf 38
RichardE 12:81926431fea7 39 // Data for enemies on each level.
RichardE 12:81926431fea7 40 static const UInt8 e0 [] = { ENDDESCRIPTOR };
RichardE 12:81926431fea7 41 static const UInt8 e1 [] = { Grunt, 5, Crusher, 5, ENDDESCRIPTOR };
RichardE 12:81926431fea7 42 static const UInt8 e2 [] = { Grunt, 10, Brain, 2, ENDDESCRIPTOR };
RichardE 12:81926431fea7 43 static const UInt8 e3 [] = { Grunt, 10, Crusher, 8, ENDDESCRIPTOR };
RichardE 12:81926431fea7 44 static const UInt8 e4 [] = { Grunt, 12, Crusher, 6, Brain, 2, ENDDESCRIPTOR };
RichardE 12:81926431fea7 45 static const UInt8 e5 [] = { Grunt, 12, Brain, 4, BlueMeany, 2, ENDDESCRIPTOR };
RichardE 12:81926431fea7 46 static const UInt8 e6 [] = { Grunt, 5, Crusher, 8, Brain, 1, BlueMeany, 3, ENDDESCRIPTOR };
RichardE 12:81926431fea7 47 static const UInt8 e7 [] = { Brain, 15, ENDDESCRIPTOR };
RichardE 12:81926431fea7 48 static const UInt8 e8 [] = { Grunt, 3, Brain, 2, BlueMeany, 5, ENDDESCRIPTOR };
RichardE 12:81926431fea7 49 static const UInt8 e9 [] = { Grunt, 1, BlueMeany, 10, ENDDESCRIPTOR };
RichardE 12:81926431fea7 50 static const UInt8 e10 [] = { Brain, 5, BlueMeany, 10, ENDDESCRIPTOR };
RichardE 12:81926431fea7 51 static const UInt8 e11 [] = { Grunt, 5, Crusher, 5, Brain, 10, ENDDESCRIPTOR };
RichardE 12:81926431fea7 52 static const UInt8 e12 [] = { Grunt, 10, Brain, 5, BlueMeany, 9, ENDDESCRIPTOR };
RichardE 12:81926431fea7 53 static const UInt8 e13 [] = { BlueMeany, 15, ENDDESCRIPTOR };
RichardE 12:81926431fea7 54 static const UInt8 e14 [] = { Brain, 20, ENDDESCRIPTOR };
RichardE 12:81926431fea7 55 static const UInt8 e15 [] = { Grunt, 32, BlueMeany, 1, ENDDESCRIPTOR };
RichardE 12:81926431fea7 56 static const UInt8 e16 [] = { Grunt, 10, Crusher, 30, ENDDESCRIPTOR };
RichardE 12:81926431fea7 57 static const UInt8 e17 [] = { Brain, 25, ENDDESCRIPTOR };
RichardE 12:81926431fea7 58 static const UInt8 e18 [] = { Grunt, 16, Brain, 16, ENDDESCRIPTOR };
RichardE 12:81926431fea7 59 static const UInt8 e19 [] = { Grunt, 16, Brain, 16, BlueMeany, 5, ENDDESCRIPTOR };
RichardE 12:81926431fea7 60 static const UInt8 e20 [] = { Brain, 15, BlueMeany, 15, ENDDESCRIPTOR };
RichardE 10:bfa1c307c99d 61
RichardE 12:81926431fea7 62 // Array containing level data for each level.
RichardE 12:81926431fea7 63 // First parameter is number of humans.
RichardE 12:81926431fea7 64 // Second parameter points to an array describing enemies on the level.
RichardE 12:81926431fea7 65 static const LevelDescriptor levelDescriptors[ LEVELCOUNT ] = {
RichardE 12:81926431fea7 66 LevelDescriptor( 0, e0 ),
RichardE 12:81926431fea7 67 LevelDescriptor( 5, e1 ),
RichardE 12:81926431fea7 68 LevelDescriptor( 6, e2 ),
RichardE 12:81926431fea7 69 LevelDescriptor( 5, e3 ),
RichardE 12:81926431fea7 70 LevelDescriptor( 6, e4 ),
RichardE 12:81926431fea7 71 LevelDescriptor( 8, e5 ),
RichardE 12:81926431fea7 72 LevelDescriptor( 8, e6 ),
RichardE 12:81926431fea7 73 LevelDescriptor( 8, e7 ),
RichardE 12:81926431fea7 74 LevelDescriptor( 8, e8 ),
RichardE 12:81926431fea7 75 LevelDescriptor( 8, e9 ),
RichardE 12:81926431fea7 76 LevelDescriptor( 8, e10 ),
RichardE 12:81926431fea7 77 LevelDescriptor( 8, e11 ),
RichardE 12:81926431fea7 78 LevelDescriptor( 8, e12 ),
RichardE 12:81926431fea7 79 LevelDescriptor( 12, e13 ),
RichardE 12:81926431fea7 80 LevelDescriptor( 8, e14 ),
RichardE 12:81926431fea7 81 LevelDescriptor( 16, e15 ),
RichardE 12:81926431fea7 82 LevelDescriptor( 16, e16 ),
RichardE 12:81926431fea7 83 LevelDescriptor( 16, e17 ),
RichardE 12:81926431fea7 84 LevelDescriptor( 16, e18 ),
RichardE 12:81926431fea7 85 LevelDescriptor( 16, e19 ),
RichardE 12:81926431fea7 86 LevelDescriptor( 24, e20 ),
RichardE 0:5fa232ee5fdf 87 };
RichardE 0:5fa232ee5fdf 88
RichardE 0:5fa232ee5fdf 89 /***************/
RichardE 0:5fa232ee5fdf 90 /* GET A LEVEL */
RichardE 0:5fa232ee5fdf 91 /***************/
RichardE 0:5fa232ee5fdf 92 // Pass level number in levelNumber.
RichardE 0:5fa232ee5fdf 93 // Returns pointer to level or NULL if no such level.
RichardE 0:5fa232ee5fdf 94 Level *LevelCollection::GetLevel( UInt8 levelNumber ) {
RichardE 0:5fa232ee5fdf 95 if( levelNumber >= LEVELCOUNT ) {
RichardE 10:bfa1c307c99d 96 // Level number out of range.
RichardE 0:5fa232ee5fdf 97 return (Level*)NULL;
RichardE 0:5fa232ee5fdf 98 }
RichardE 10:bfa1c307c99d 99 else if( levelNumber == 0 ) {
RichardE 10:bfa1c307c99d 100 // Level zero is the attract mode and is not dynamically allocated.
RichardE 10:bfa1c307c99d 101 return &level0;
RichardE 10:bfa1c307c99d 102 }
RichardE 0:5fa232ee5fdf 103 else {
RichardE 10:bfa1c307c99d 104 // Fetch level descriptor for this level and create a Level from it.
RichardE 12:81926431fea7 105 Level *level = new LevelNormal( levelDescriptors + levelNumber );
RichardE 10:bfa1c307c99d 106 // Tag it with the correct level number before returning it.
RichardE 0:5fa232ee5fdf 107 level->LevelNumber = levelNumber;
RichardE 0:5fa232ee5fdf 108 return level;
RichardE 0:5fa232ee5fdf 109 }
RichardE 0:5fa232ee5fdf 110 }
RichardE 0:5fa232ee5fdf 111
RichardE 10:bfa1c307c99d 112 /*******************************/
RichardE 10:bfa1c307c99d 113 /* FREE MEMORY USED BY A LEVEL */
RichardE 10:bfa1c307c99d 114 /*******************************/
RichardE 10:bfa1c307c99d 115 // Pass pointer to a level.
RichardE 10:bfa1c307c99d 116 // Frees memory used by level.
RichardE 10:bfa1c307c99d 117 void LevelCollection::FreeLevel( Level *level ) {
RichardE 10:bfa1c307c99d 118 if( ( level != (Level*)NULL ) && level->IsDynamicallyAllocated ) {
RichardE 10:bfa1c307c99d 119 delete level;
RichardE 10:bfa1c307c99d 120 }
RichardE 10:bfa1c307c99d 121 }