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:
Tue Jun 04 20:16:33 2013 +0000
Revision:
0:5fa232ee5fdf
Child:
4:673eb9735d44
Started conversion from Maple version of game. So far Gameduino seems to have been initialised OK and just displays a sign on message. Lots of commented out code.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
RichardE 0:5fa232ee5fdf 1 /*
RichardE 0:5fa232ee5fdf 2 * SOURCE FILE : HighScoreEntry.cpp
RichardE 0:5fa232ee5fdf 3 *
RichardE 0:5fa232ee5fdf 4 * Definition of class HighScoreEntry.
RichardE 0:5fa232ee5fdf 5 * Routine to allow player to enter their name using joysticks.
RichardE 0:5fa232ee5fdf 6 *
RichardE 0:5fa232ee5fdf 7 */
RichardE 0:5fa232ee5fdf 8
RichardE 0:5fa232ee5fdf 9 #include "HighScoreEntry.h"
RichardE 0:5fa232ee5fdf 10 #include "Gameduino.h" // Gameduino stuff
RichardE 0:5fa232ee5fdf 11 #if 0
RichardE 0:5fa232ee5fdf 12 #include "GDExtra.h" // more Gameduino stuff
RichardE 0:5fa232ee5fdf 13 #include "GDConst.h" // Gameduino constants
RichardE 0:5fa232ee5fdf 14 #include "CharBlocks.h" // blocks of characters in program memory
RichardE 0:5fa232ee5fdf 15 #include "CharFrame.h" // for drawing frames made of characters
RichardE 0:5fa232ee5fdf 16 #include "CharCodes.h" // character codes
RichardE 0:5fa232ee5fdf 17 #include "FrameCounter.h" // counter updated every vertical flyback
RichardE 0:5fa232ee5fdf 18 #endif
RichardE 0:5fa232ee5fdf 19
RichardE 0:5fa232ee5fdf 20 /***************/
RichardE 0:5fa232ee5fdf 21 /* CONSTRUCTOR */
RichardE 0:5fa232ee5fdf 22 /***************/
RichardE 0:5fa232ee5fdf 23 HighScoreEntry::HighScoreEntry() :
RichardE 0:5fa232ee5fdf 24 cursorPos( 0 )
RichardE 0:5fa232ee5fdf 25 {
RichardE 0:5fa232ee5fdf 26 }
RichardE 0:5fa232ee5fdf 27
RichardE 0:5fa232ee5fdf 28 /**************/
RichardE 0:5fa232ee5fdf 29 /* DESTRUCTOR */
RichardE 0:5fa232ee5fdf 30 /**************/
RichardE 0:5fa232ee5fdf 31 HighScoreEntry::~HighScoreEntry() {
RichardE 0:5fa232ee5fdf 32 }
RichardE 0:5fa232ee5fdf 33
RichardE 0:5fa232ee5fdf 34 /*********************/
RichardE 0:5fa232ee5fdf 35 /* GET A PLAYER NAME */
RichardE 0:5fa232ee5fdf 36 /*********************/
RichardE 0:5fa232ee5fdf 37 // Pass pointer to place to store name in name.
RichardE 0:5fa232ee5fdf 38 // Pass pointer to controls to read in controls.
RichardE 0:5fa232ee5fdf 39 #if 0
RichardE 0:5fa232ee5fdf 40 void HighScoreEntry::GetName( PlayerName *name, PanelControls *controls ) {
RichardE 0:5fa232ee5fdf 41 UInt16 inputs;
RichardE 0:5fa232ee5fdf 42 UInt8 countdown = 0;
RichardE 0:5fa232ee5fdf 43 char *curPtr;
RichardE 0:5fa232ee5fdf 44 // Initialise name to all 'A' characters.
RichardE 0:5fa232ee5fdf 45 for( UInt8 i = 0; i < PlayerName::Length; ++i ) {
RichardE 0:5fa232ee5fdf 46 name->Name[ i ] = 'A';
RichardE 0:5fa232ee5fdf 47 }
RichardE 0:5fa232ee5fdf 48 // Draw screen.
RichardE 0:5fa232ee5fdf 49 DrawScreen();
RichardE 0:5fa232ee5fdf 50 // Wait until player releases all controls.
RichardE 0:5fa232ee5fdf 51 WaitControls( controls, false );
RichardE 0:5fa232ee5fdf 52 // Start at leftmost character.
RichardE 0:5fa232ee5fdf 53 cursorPos = 0;
RichardE 0:5fa232ee5fdf 54 // Loop until cursor moves beyond rightmost character.
RichardE 0:5fa232ee5fdf 55 while( cursorPos < PlayerName::Length ) {
RichardE 0:5fa232ee5fdf 56 // Read panel controls.
RichardE 0:5fa232ee5fdf 57 controls->Read();
RichardE 0:5fa232ee5fdf 58 inputs = controls->GetInputs();
RichardE 0:5fa232ee5fdf 59 // Point to character under cursor.
RichardE 0:5fa232ee5fdf 60 curPtr = name->Name + cursorPos;
RichardE 0:5fa232ee5fdf 61 // Only react to controls every so often to slow things down.
RichardE 0:5fa232ee5fdf 62 if( countdown == 0 ) {
RichardE 0:5fa232ee5fdf 63 countdown = 10;
RichardE 0:5fa232ee5fdf 64 if( inputs & PanelControls::Up1 ) {
RichardE 0:5fa232ee5fdf 65 // Joystick up selects next character up.
RichardE 0:5fa232ee5fdf 66 if( *curPtr >= PlayerName::MaxChar ) {
RichardE 0:5fa232ee5fdf 67 *curPtr = PlayerName::MinChar;
RichardE 0:5fa232ee5fdf 68 }
RichardE 0:5fa232ee5fdf 69 else {
RichardE 0:5fa232ee5fdf 70 (*curPtr)++;
RichardE 0:5fa232ee5fdf 71 }
RichardE 0:5fa232ee5fdf 72 }
RichardE 0:5fa232ee5fdf 73 else if( inputs & PanelControls::Down1 ) {
RichardE 0:5fa232ee5fdf 74 // Joystick down selects previous character down.
RichardE 0:5fa232ee5fdf 75 if( *curPtr <= PlayerName::MinChar ) {
RichardE 0:5fa232ee5fdf 76 *curPtr = PlayerName::MaxChar;
RichardE 0:5fa232ee5fdf 77 }
RichardE 0:5fa232ee5fdf 78 else {
RichardE 0:5fa232ee5fdf 79 (*curPtr)--;
RichardE 0:5fa232ee5fdf 80 }
RichardE 0:5fa232ee5fdf 81 }
RichardE 0:5fa232ee5fdf 82 else if( inputs & PanelControls::Left1 ) {
RichardE 0:5fa232ee5fdf 83 // Joystick left moves cursor back.
RichardE 0:5fa232ee5fdf 84 if( cursorPos > 0 ) {
RichardE 0:5fa232ee5fdf 85 cursorPos--;
RichardE 0:5fa232ee5fdf 86 // Wait until all controls released.
RichardE 0:5fa232ee5fdf 87 WaitControls( controls, false );
RichardE 0:5fa232ee5fdf 88 }
RichardE 0:5fa232ee5fdf 89 }
RichardE 0:5fa232ee5fdf 90 else if( inputs & PanelControls::Right1 ) {
RichardE 0:5fa232ee5fdf 91 // Joystick right moves cursor forwards.
RichardE 0:5fa232ee5fdf 92 cursorPos++;
RichardE 0:5fa232ee5fdf 93 // Wait until all controls released.
RichardE 0:5fa232ee5fdf 94 WaitControls( controls, false );
RichardE 0:5fa232ee5fdf 95 }
RichardE 0:5fa232ee5fdf 96 }
RichardE 0:5fa232ee5fdf 97 else {
RichardE 0:5fa232ee5fdf 98 countdown--;
RichardE 0:5fa232ee5fdf 99 }
RichardE 0:5fa232ee5fdf 100 // Wait for vertical flyback. Then draw name and do animation.
RichardE 0:5fa232ee5fdf 101 GD.waitvblank();
RichardE 0:5fa232ee5fdf 102 FrameCounter++;
RichardE 0:5fa232ee5fdf 103 DrawName( name );
RichardE 0:5fa232ee5fdf 104 Animate();
RichardE 0:5fa232ee5fdf 105 }
RichardE 0:5fa232ee5fdf 106 // Wait until player releases all controls before returning.
RichardE 0:5fa232ee5fdf 107 WaitControls( controls, false );
RichardE 0:5fa232ee5fdf 108 }
RichardE 0:5fa232ee5fdf 109 #endif
RichardE 0:5fa232ee5fdf 110
RichardE 0:5fa232ee5fdf 111 /*********************/
RichardE 0:5fa232ee5fdf 112 /* WAIT FOR CONTROLS */
RichardE 0:5fa232ee5fdf 113 /*********************/
RichardE 0:5fa232ee5fdf 114 // Pass pointer to controls to read in controls.
RichardE 0:5fa232ee5fdf 115 // Pass true in waitActivate to wait for a control to be used.
RichardE 0:5fa232ee5fdf 116 // Pass false to wait for release.
RichardE 0:5fa232ee5fdf 117 #if 0
RichardE 0:5fa232ee5fdf 118 void HighScoreEntry::WaitControls( PanelControls *controls, bool waitActivate ) {
RichardE 0:5fa232ee5fdf 119 boolean released = false;
RichardE 0:5fa232ee5fdf 120 UInt16 inputs;
RichardE 0:5fa232ee5fdf 121 while( ! released ) {
RichardE 0:5fa232ee5fdf 122 controls->Read();
RichardE 0:5fa232ee5fdf 123 inputs = controls->GetInputs();
RichardE 0:5fa232ee5fdf 124 released = ( waitActivate ? ( inputs != 0 ) : ( inputs == 0 ) );
RichardE 0:5fa232ee5fdf 125 if( ! released ) {
RichardE 0:5fa232ee5fdf 126 GD.waitvblank();
RichardE 0:5fa232ee5fdf 127 FrameCounter++;
RichardE 0:5fa232ee5fdf 128 Animate();
RichardE 0:5fa232ee5fdf 129 }
RichardE 0:5fa232ee5fdf 130 }
RichardE 0:5fa232ee5fdf 131 }
RichardE 0:5fa232ee5fdf 132 #endif
RichardE 0:5fa232ee5fdf 133
RichardE 0:5fa232ee5fdf 134 /*******************/
RichardE 0:5fa232ee5fdf 135 /* DRAW THE SCREEN */
RichardE 0:5fa232ee5fdf 136 /*******************/
RichardE 0:5fa232ee5fdf 137 void HighScoreEntry::DrawScreen( void ) {
RichardE 0:5fa232ee5fdf 138 #if 0
RichardE 0:5fa232ee5fdf 139 GD.waitvblank();
RichardE 0:5fa232ee5fdf 140 // Clear the screen to zero characters.
RichardE 0:5fa232ee5fdf 141 GD.fill( RAM_PIC, 0, RAM_PIC_SIZE );
RichardE 0:5fa232ee5fdf 142 // Turn off all the sprites.
RichardE 0:5fa232ee5fdf 143 for( UInt16 s = 0; s < SPRITE_COUNT; ++s ) {
RichardE 0:5fa232ee5fdf 144 GD.sprite( s, 0, 400, 0, 0 );
RichardE 0:5fa232ee5fdf 145 }
RichardE 0:5fa232ee5fdf 146 // Draw border around screen.
RichardE 0:5fa232ee5fdf 147 CharFrame::Draw( 0, 0, VISIBLE_CHAR_WIDTH, VISIBLE_CHAR_HEIGHT );
RichardE 0:5fa232ee5fdf 148 // Draw logo.
RichardE 0:5fa232ee5fdf 149 GDExtra::WriteProgCharBlock( 2, 2, CharBlocks::EnterNameInstructionText );
RichardE 0:5fa232ee5fdf 150 #endif
RichardE 0:5fa232ee5fdf 151 }
RichardE 0:5fa232ee5fdf 152
RichardE 0:5fa232ee5fdf 153 /********************************/
RichardE 0:5fa232ee5fdf 154 /* DRAW THE NAME AND THE CURSOR */
RichardE 0:5fa232ee5fdf 155 /********************************/
RichardE 0:5fa232ee5fdf 156 // Pass player name in name.
RichardE 0:5fa232ee5fdf 157 void HighScoreEntry::DrawName( PlayerName *name ) {
RichardE 0:5fa232ee5fdf 158 #if 0
RichardE 0:5fa232ee5fdf 159 GD.putstr( 21, 11, name->Name );
RichardE 0:5fa232ee5fdf 160 UInt16 address = RAM_PIC + 12 * SCREEN_CHAR_WIDTH + 21;
RichardE 0:5fa232ee5fdf 161 for( UInt8 i = 0; i < PlayerName::Length; ++i ) {
RichardE 0:5fa232ee5fdf 162 GD.wr( address, ( i == cursorPos ) ? ArrowUp : ' ' );
RichardE 0:5fa232ee5fdf 163 address++;
RichardE 0:5fa232ee5fdf 164 }
RichardE 0:5fa232ee5fdf 165 #endif
RichardE 0:5fa232ee5fdf 166 }
RichardE 0:5fa232ee5fdf 167
RichardE 0:5fa232ee5fdf 168 /********************/
RichardE 0:5fa232ee5fdf 169 /* UPDATE ANIMATION */
RichardE 0:5fa232ee5fdf 170 /********************/
RichardE 0:5fa232ee5fdf 171 void HighScoreEntry::Animate( void ) {
RichardE 0:5fa232ee5fdf 172 }
RichardE 0:5fa232ee5fdf 173