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: HighScoreEntry.cpp
- Revision:
- 0:5fa232ee5fdf
- Child:
- 4:673eb9735d44
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HighScoreEntry.cpp Tue Jun 04 20:16:33 2013 +0000 @@ -0,0 +1,173 @@ +/* + * SOURCE FILE : HighScoreEntry.cpp + * + * Definition of class HighScoreEntry. + * Routine to allow player to enter their name using joysticks. + * + */ + +#include "HighScoreEntry.h" +#include "Gameduino.h" // Gameduino stuff +#if 0 + #include "GDExtra.h" // more Gameduino stuff + #include "GDConst.h" // Gameduino constants + #include "CharBlocks.h" // blocks of characters in program memory + #include "CharFrame.h" // for drawing frames made of characters + #include "CharCodes.h" // character codes + #include "FrameCounter.h" // counter updated every vertical flyback +#endif + +/***************/ +/* CONSTRUCTOR */ +/***************/ +HighScoreEntry::HighScoreEntry() : + cursorPos( 0 ) +{ +} + +/**************/ +/* DESTRUCTOR */ +/**************/ +HighScoreEntry::~HighScoreEntry() { +} + +/*********************/ +/* GET A PLAYER NAME */ +/*********************/ +// Pass pointer to place to store name in name. +// Pass pointer to controls to read in controls. +#if 0 +void HighScoreEntry::GetName( PlayerName *name, PanelControls *controls ) { + UInt16 inputs; + UInt8 countdown = 0; + char *curPtr; + // Initialise name to all 'A' characters. + for( UInt8 i = 0; i < PlayerName::Length; ++i ) { + name->Name[ i ] = 'A'; + } + // Draw screen. + DrawScreen(); + // Wait until player releases all controls. + WaitControls( controls, false ); + // Start at leftmost character. + cursorPos = 0; + // Loop until cursor moves beyond rightmost character. + while( cursorPos < PlayerName::Length ) { + // Read panel controls. + controls->Read(); + inputs = controls->GetInputs(); + // Point to character under cursor. + curPtr = name->Name + cursorPos; + // Only react to controls every so often to slow things down. + if( countdown == 0 ) { + countdown = 10; + if( inputs & PanelControls::Up1 ) { + // Joystick up selects next character up. + if( *curPtr >= PlayerName::MaxChar ) { + *curPtr = PlayerName::MinChar; + } + else { + (*curPtr)++; + } + } + else if( inputs & PanelControls::Down1 ) { + // Joystick down selects previous character down. + if( *curPtr <= PlayerName::MinChar ) { + *curPtr = PlayerName::MaxChar; + } + else { + (*curPtr)--; + } + } + else if( inputs & PanelControls::Left1 ) { + // Joystick left moves cursor back. + if( cursorPos > 0 ) { + cursorPos--; + // Wait until all controls released. + WaitControls( controls, false ); + } + } + else if( inputs & PanelControls::Right1 ) { + // Joystick right moves cursor forwards. + cursorPos++; + // Wait until all controls released. + WaitControls( controls, false ); + } + } + else { + countdown--; + } + // Wait for vertical flyback. Then draw name and do animation. + GD.waitvblank(); + FrameCounter++; + DrawName( name ); + Animate(); + } + // Wait until player releases all controls before returning. + WaitControls( controls, false ); +} +#endif + +/*********************/ +/* WAIT FOR CONTROLS */ +/*********************/ +// Pass pointer to controls to read in controls. +// Pass true in waitActivate to wait for a control to be used. +// Pass false to wait for release. +#if 0 +void HighScoreEntry::WaitControls( PanelControls *controls, bool waitActivate ) { + boolean released = false; + UInt16 inputs; + while( ! released ) { + controls->Read(); + inputs = controls->GetInputs(); + released = ( waitActivate ? ( inputs != 0 ) : ( inputs == 0 ) ); + if( ! released ) { + GD.waitvblank(); + FrameCounter++; + Animate(); + } + } +} +#endif + +/*******************/ +/* DRAW THE SCREEN */ +/*******************/ +void HighScoreEntry::DrawScreen( void ) { +#if 0 + GD.waitvblank(); + // Clear the screen to zero characters. + GD.fill( RAM_PIC, 0, RAM_PIC_SIZE ); + // Turn off all the sprites. + for( UInt16 s = 0; s < SPRITE_COUNT; ++s ) { + GD.sprite( s, 0, 400, 0, 0 ); + } + // Draw border around screen. + CharFrame::Draw( 0, 0, VISIBLE_CHAR_WIDTH, VISIBLE_CHAR_HEIGHT ); + // Draw logo. + GDExtra::WriteProgCharBlock( 2, 2, CharBlocks::EnterNameInstructionText ); +#endif +} + +/********************************/ +/* DRAW THE NAME AND THE CURSOR */ +/********************************/ +// Pass player name in name. +void HighScoreEntry::DrawName( PlayerName *name ) { +#if 0 + GD.putstr( 21, 11, name->Name ); + UInt16 address = RAM_PIC + 12 * SCREEN_CHAR_WIDTH + 21; + for( UInt8 i = 0; i < PlayerName::Length; ++i ) { + GD.wr( address, ( i == cursorPos ) ? ArrowUp : ' ' ); + address++; + } +#endif +} + +/********************/ +/* UPDATE ANIMATION */ +/********************/ +void HighScoreEntry::Animate( void ) { +} +