I am looking to have a C# application implement the Konami Code to display an Easter Egg. http://en.wikipedia.org/wiki/Konami_Code
What is the best way to do this?
This is in a standard C# windows forms app.
The codes were removed from the special Contra 4 version. Super C (NES) – Entering the code( → ← ↓ ↑ A B Start ) before the title screen appears, gives the player 10 lives in the US version of the game while in the Japanese version the code gives 30 lives.
In the PC version of the game the code is: UP, UP, DOWN, DOWN, LEFT, RIGHT, LEFT, RIGHT, ESC, ENTER.
The Konami Code originated as a cheat code—a sequence of button presses that unlocks secret features in a video game, usually making it easier to play. The first-ever game to feature the Konami Code was Gradius for the NES, published by Japanese third-party developer Konami in 1986.
Kazuhisa Hashimoto, the man who invented the "Konami code" cheat that became pervasive in video gaming and pop culture, has died. To use the code, players would press up, up, down, down, left, right, left, right, B, A and the Start button on the controller to make games easier.
In windows forms I would have a class that knows what the sequence is and holds the state of where you are in the sequence. Something like this should do it.
using System; using System.Collections.Generic; using System.Windows.Forms; namespace WindowsFormsApplication3 { public class KonamiSequence { List<Keys> Keys = new List<Keys>{System.Windows.Forms.Keys.Up, System.Windows.Forms.Keys.Up, System.Windows.Forms.Keys.Down, System.Windows.Forms.Keys.Down, System.Windows.Forms.Keys.Left, System.Windows.Forms.Keys.Right, System.Windows.Forms.Keys.Left, System.Windows.Forms.Keys.Right, System.Windows.Forms.Keys.B, System.Windows.Forms.Keys.A}; private int mPosition = -1; public int Position { get { return mPosition; } private set { mPosition = value; } } public bool IsCompletedBy(Keys key) { if (Keys[Position + 1] == key) { // move to next Position++; } else if (Position == 1 && key == System.Windows.Forms.Keys.Up) { // stay where we are } else if (Keys[0] == key) { // restart at 1st Position = 0; } else { // no match in sequence Position = -1; } if (Position == Keys.Count - 1) { Position = -1; return true; } return false; } } }
To use it, you would need something in your Form's code responding to key up events. Something like this should do it:
private KonamiSequence sequence = new KonamiSequence(); private void Form1_KeyUp(object sender, KeyEventArgs e) { if (sequence.IsCompletedBy(e.KeyCode)) { MessageBox.Show("KONAMI!!!"); } }
Hopefully that's enough to give you what you need. For WPF you will need slight differences is very similar (see edit history #1).
EDIT: updated for winforms instead of wpf.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With