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

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 ) {
+}
+