jQuery でコナミコマンドを実装する方法

コマンド「上上下下左右左右BA」を入力すると何かが起こる。
ファミコン世代にはお馴染みの「コナミコマンド」を、JavaScript で実装するのが今回の目的です。プラグインは一切使わず、jQuery ライブラリのみで実装します。
プログラムの概要
キーボードから入力された情報がコナミコマンドと合致した場合に限り、処理(関数)を呼び出します。途中で入力を間違えた場合は、また最初から入力すれば大丈夫な作りにします。
入力値の判定はキーのコード情報を用いる
キーボードから入力された各キーは、JavaScript 上でキーコードなる数字の情報に置き換えることができます。つまりコナミコマンドで利用する6種類のキー ↑ ↓ ← → B A のコード値が分かれば、プログラム上で入力順が正しいか判断できるようになります。
それぞれのキーコードの取得方法に関しては、こちらのページにサンプルプログラムとして用意しているので、興味がある方はご覧になってください。
それぞれのキーに対応したコード値の一覧がこちらになります。
| キー | ↑ | ↓ | ← | → | B | A | 
|---|---|---|---|---|---|---|
| コード | 38 | 40 | 37 | 39 | 66 | 65 | 
このコード情報を元に、コマンド順にキーコードを並べて配列データとして保持しておきます。これはコマンドの入力順を判断するために利用します。
// コナミコマンド配列 [↑, ↑, ↓, ↓, ←, →, ←, →, B, A] konami_cmd = [38, 38, 40, 40, 37, 39, 37, 39, 66, 65];
コナミコマンド実装サンプル
$(function(){
  // 入力キー配列
  var input_cmd = [];
  // コナミコマンド配列 [↑, ↑, ↓, ↓, ←, →, ←, →, B, A]
  var konami_cmd = [38, 38, 40, 40, 37, 39, 37, 39, 66, 65];
  // キー入力後のキーアップイベントで発動条件を監視します
  $(window).keyup(function(event){
    // 入力されたキーコードを入力キー配列へ追加
    input_cmd.push( event.keyCode );
    // 入力されたキーが正しいか判定
    // ※ 入力キー配列の長さで何番目の文字を比較するかを判断する
    if ( input_cmd[ input_cmd.length - 1 ] != konami_cmd[ input_cmd.length - 1 ] ) {
      // 入力を間違えた場合、入力キー配列をリセット(最初からやり直し)
      input_cmd = [];
    }
    // 全ての入力コマンドが合致したら処理を発動
    else if ( input_cmd.length == konami_cmd.length ) {
      // コナミコマンドによる処理実行!
      konami_cmd_action();
      // 処理後、改めて入力キー配列をリセット
      input_cmd = [];
    }
  });
});
 
// コナミコマンド処理関数
function konami_cmd_action() {
  /*---------------------------------------------
   ここにコナミコマンド入力時に発動させたい処理を記載
  ---------------------------------------------*/
}
コナミコマンドのキーコード配列と、入力されたキー配列が同じかチェックをします。入力されたキーコードを配列へ格納し、16行目で最後に入力されたキー情報をコナミコマンド配列と比較します。途中で入力ミスをすると、18行目にある通り、入力キー配列をリセットするので、改めて最初から入力する必要があります。
全てのキーコマンドが正しく入力されると、23行目に指定した関数が動きます。具体的な処理内容は konami_cmd_action() 関数として別に定義しておきます。
このページにコナミコマンドを仕掛けてみた!
それではここでコナミコマンドを入力してみてください。このページ上で何か変化が起これば成功です!
いかがでしょうか?コナミコマンドが正しく入力されると、画面がくるっと一回転する処理を組み込んでみました。(繰り返し実行すると画面酔いするので気をつけてください。)
このページで konami_cmd_action() 関数に仕掛けた処理は次の通りです。
function konami_cmd_action() {
  jQuery(function($){
    $('body').animate({zIndex:1},{
      duration: 5000,
      easing: "linear",
      step: function(now,fx){ $(this).css("transform", "rotateY(" + (now*360) + "deg)"); },
      complete:function(){$("body").css("zIndex", 0);}
    });
  });
}
左右の矢印キーを LR キーに変更することもできる
L キーのキーコードは 76、R キーのキーコードは 82 です。コナミコマンド配列のキーコード情報を変更すれば、スーファミ版コナミコマンド「↑↑↓↓LRLRBA」にも対応が可能です。
// コナミコマンド配列 [↑, ↑, ↓, ↓, L, R, L, R, B, A] konami_cmd = [38, 38, 40, 40, 76, 82, 76, 82, 66, 65];
以上、jQuery でコナミコマンドを実装する方法でした。

