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:
Fri Jun 07 20:29:59 2013 +0000
Revision:
3:a6a0cd726ca0
Parent:
2:bb0f631a6068
Child:
4:673eb9735d44
Abandoned writing serial EEPROM class and used Ser25LCxxx library instead. HighScoreTable class appears to be reading and writing correctly to EEPROM and high scores are displayed correctly.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RichardE 0:5fa232ee5fdf 1 /*
RichardE 0:5fa232ee5fdf 2 * SOURCE FILE : Level0.cpp
RichardE 0:5fa232ee5fdf 3 *
RichardE 0:5fa232ee5fdf 4 * Definition of class Level0.
RichardE 0:5fa232ee5fdf 5 *
RichardE 0:5fa232ee5fdf 6 */
RichardE 0:5fa232ee5fdf 7
RichardE 0:5fa232ee5fdf 8 #include "Level0.h"
RichardE 0:5fa232ee5fdf 9 #if 0
RichardE 0:5fa232ee5fdf 10 #include "CharBlocks.h"
RichardE 0:5fa232ee5fdf 11 #include "EEPROMDump.h"
RichardE 0:5fa232ee5fdf 12 #endif
RichardE 0:5fa232ee5fdf 13
RichardE 0:5fa232ee5fdf 14 /***************/
RichardE 0:5fa232ee5fdf 15 /* CONSTRUCTOR */
RichardE 0:5fa232ee5fdf 16 /***************/
RichardE 0:5fa232ee5fdf 17 Level0::Level0() {
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 Level0::~Level0() {
RichardE 0:5fa232ee5fdf 24 }
RichardE 0:5fa232ee5fdf 25
RichardE 0:5fa232ee5fdf 26 /**************/
RichardE 0:5fa232ee5fdf 27 /* PLAY LEVEL */
RichardE 0:5fa232ee5fdf 28 /**************/
RichardE 0:5fa232ee5fdf 29 // Returns code indicating how level ended.
RichardE 0:5fa232ee5fdf 30 Level::LevelExitCode Level0::Play( void ) {
RichardE 0:5fa232ee5fdf 31 return PlayLoop();
RichardE 0:5fa232ee5fdf 32 }
RichardE 0:5fa232ee5fdf 33
RichardE 0:5fa232ee5fdf 34 static const char startText[] = "OPERATE EITHER JOYSTICK TO START GAME";
RichardE 0:5fa232ee5fdf 35
RichardE 0:5fa232ee5fdf 36 /********************/
RichardE 0:5fa232ee5fdf 37 /* DRAW HIGH SCORES */
RichardE 0:5fa232ee5fdf 38 /********************/
RichardE 0:5fa232ee5fdf 39 void Level0::DrawHighScores( void ) {
RichardE 0:5fa232ee5fdf 40 // Draw high score table.
RichardE 3:a6a0cd726ca0 41 GDExtra::WriteProgString( gd, 16, 11, StringData::HighScoresString );
RichardE 0:5fa232ee5fdf 42 PlayerName name;
RichardE 0:5fa232ee5fdf 43 UInt32 score;
RichardE 0:5fa232ee5fdf 44 UInt8 y = 13;
RichardE 0:5fa232ee5fdf 45 for( UInt8 i = 0; i < highScores->GetCapacity(); ++i ) {
RichardE 0:5fa232ee5fdf 46 highScores->Get( i, &name, &score );
RichardE 3:a6a0cd726ca0 47 gd->putstr( 18, y, name.Name );
RichardE 3:a6a0cd726ca0 48 GDExtra::WriteBCDNumber( gd, 22, y, score, 8 );
RichardE 0:5fa232ee5fdf 49 y += 2;
RichardE 0:5fa232ee5fdf 50 }
RichardE 0:5fa232ee5fdf 51 }
RichardE 0:5fa232ee5fdf 52
RichardE 0:5fa232ee5fdf 53 /*************/
RichardE 0:5fa232ee5fdf 54 /* PLAY LOOP */
RichardE 0:5fa232ee5fdf 55 /*************/
RichardE 0:5fa232ee5fdf 56 // Returns code indicating how level ended.
RichardE 0:5fa232ee5fdf 57 // This method should be called from the Play method after the
RichardE 0:5fa232ee5fdf 58 // level data has been initialised and the return value returned
RichardE 0:5fa232ee5fdf 59 // by the Play method.
RichardE 0:5fa232ee5fdf 60 Level::LevelExitCode Level0::PlayLoop( void ) {
RichardE 1:dfd5eaaf96a3 61 // Must have a Gameduino defined.
RichardE 1:dfd5eaaf96a3 62 if( gd != (Gameduino*)NULL ) {
RichardE 1:dfd5eaaf96a3 63 // Set screen background to black.
RichardE 1:dfd5eaaf96a3 64 gd->wr( Gameduino::BG_COLOR, Gameduino::RGB( 0, 0, 0 ) );
RichardE 1:dfd5eaaf96a3 65 GDExtra::ClearScreen( gd, TransparentChar );
RichardE 1:dfd5eaaf96a3 66 GDExtra::HideAllSprites( gd );
RichardE 1:dfd5eaaf96a3 67 // SoundManager::Instance.SilenceAll();
RichardE 1:dfd5eaaf96a3 68 // Draw border around screen.
RichardE 2:bb0f631a6068 69 CharFrame::Draw( gd, 0, 0, VISIBLE_CHAR_WIDTH, VISIBLE_CHAR_HEIGHT );
RichardE 1:dfd5eaaf96a3 70 // Draw big block of characters that read "ROBOTRIC".
RichardE 1:dfd5eaaf96a3 71 GDExtra::WriteProgCharBlock( gd, 2, 2, CharBlocks::RobotRicText );
RichardE 1:dfd5eaaf96a3 72 // Write message telling user how to start game.
RichardE 1:dfd5eaaf96a3 73 GDExtra::WriteProgString( gd, 2, VISIBLE_CHAR_HEIGHT - 3, startText );
RichardE 1:dfd5eaaf96a3 74 // Validate high scores in EEPROM which will re-write the entire
RichardE 1:dfd5eaaf96a3 75 // table with default data if it finds nonsense in the EEPROM.
RichardE 1:dfd5eaaf96a3 76 // Then check if EEPROM now makes sense. If it does then display
RichardE 1:dfd5eaaf96a3 77 // the high score table. If it does not then chances are there
RichardE 1:dfd5eaaf96a3 78 // is no EEPROM connected so don't bother with high scores.
RichardE 1:dfd5eaaf96a3 79 if( highScores != (HighScoreTable*)NULL ) {
RichardE 1:dfd5eaaf96a3 80 highScores->ValidateEEPROM();
RichardE 1:dfd5eaaf96a3 81 if( highScores->EEPROMValid() ) {
RichardE 1:dfd5eaaf96a3 82 DrawHighScores();
RichardE 1:dfd5eaaf96a3 83 }
RichardE 1:dfd5eaaf96a3 84 }
RichardE 2:bb0f631a6068 85 #if 0
RichardE 1:dfd5eaaf96a3 86 // Must have a player with non-NULL controls.
RichardE 1:dfd5eaaf96a3 87 PanelControls *controls;
RichardE 1:dfd5eaaf96a3 88 if(
RichardE 1:dfd5eaaf96a3 89 ( player != (PlayerObject*)NULL ) &&
RichardE 1:dfd5eaaf96a3 90 ( ( controls = player->GetControls() ) != (PanelControls*)NULL )
RichardE 1:dfd5eaaf96a3 91 ) {
RichardE 1:dfd5eaaf96a3 92 // Wait until all panel controls are released.
RichardE 1:dfd5eaaf96a3 93 UInt16 inputs;
RichardE 1:dfd5eaaf96a3 94 do {
RichardE 1:dfd5eaaf96a3 95 controls->Read();
RichardE 1:dfd5eaaf96a3 96 inputs = controls->GetInputs();
RichardE 1:dfd5eaaf96a3 97 } while( inputs != 0 );
RichardE 1:dfd5eaaf96a3 98 // Wait until a panel control is activated.
RichardE 1:dfd5eaaf96a3 99 do {
RichardE 1:dfd5eaaf96a3 100 controls->Read();
RichardE 1:dfd5eaaf96a3 101 inputs = controls->GetInputs();
RichardE 1:dfd5eaaf96a3 102 } while( inputs == 0 );
RichardE 1:dfd5eaaf96a3 103 }
RichardE 1:dfd5eaaf96a3 104 #endif
RichardE 0:5fa232ee5fdf 105 }
RichardE 1:dfd5eaaf96a3 106 return Completed;
RichardE 0:5fa232ee5fdf 107 }
RichardE 0:5fa232ee5fdf 108