Konami Code in einer WPF-Anwendung

Wer kennt ihn nicht, den Konami typischen Cheat-Code für Videospiele. Inzwischen findet der Konami Code in einigen Webseiten, Anwendungen und Spielen seinen Platz. Aber wie wird dieser eigentlich richtig unter WPF implementiert? Nun zunächst einmal sollten wir uns ansehen, wie der Konami Code eigentlich aussieht. Welche Tasten gedrückt werden müssen und in welcher Reihenfolge. Anschließend können wir uns Gedanken über die Implementierung machen und dann muss einem auch noch ein gutes Easter Egg dafür einfallen. Allgemeine Informationen zum Konami Code findet man leicht im Web, z.B. auf Wikipedia. Und hier eine kleine Grafik welche Tasten zum Konami Code gehören:

Up, Up, Down, Down, Left, Right, Left, Right, B, A

Konami Code Tasten

Machen wir uns also nun an die Implementierung. Zunächst einmal müssen wir in unserer Oberfläche auf der der Konami Code funktionieren soll ein KeyUp-Event einbinden. Dies könnte z.B. wie folgt aussehen:

KeyUp="OnKeyUp"

Nun müssen wir nur noch die Implementierung dieses Events durchführen. Dafür definieren wir uns zunächst zwei private Fields in unserer „Window“-Klasse. Im ersten Field packen wir hierbei die benötigte Sequenz und im zweiten speichern wir uns einen Counter der zur Prüfung genutzt wird, ob bereits alle Tasten erfolgreich gedrückt worden sind.

private readonly List<Key> _konamiCode = new List<Key>
    {
        Key.Up, Key.Up, 
        Key.Down, Key.Down,
        Key.Left, Key.Right, 
        Key.Left, Key.Right, 
        Key.B, Key.A
    };

private int _match;

Die Implementierung des „KeyUp“-Events könnte demnach wie folgt aussehen:

private void OnKeyUp(object sender, KeyEventArgs e)
{
    if (e.Key == _konamiCode[_match])
    {
        if (++_match >= _konamiCode.Count)
        {
            _match = 0;
            MessageBox.Show("KONAMI CODE");
        }
    }
    else if (_match > 0 && e.Key != _konamiCode[_match])
    {
        _match = 0;
    }
}

Viel Spaß mit der kleinen Spielerei. Wer kreative Ideen für Easter Egg’s hat, kann diese gerne in den Kommentaren hinterlassen. 🙂