[Swift3]コナミコマンドを検知する

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る
Swift

KONAMI社のアプリによく搭載されている、コナミコマンド。上上下下左右左右の順に画面をフリックし、ロゴの中に含まれる文字を「B」「A」の順にタップすると、何かが起こるという仕掛けだ。

今回はちょっとした息抜きに、Swift3でコナミコマンドを再現してみる。

実装する

画面に部品を配置する

入力されたコマンド(及びメッセージ)を表示するUILabel、「A」「B」を入力するUIButtonをストーリーボード上に配置。

画面に部品を配置する画像

配置した部品はOutlet/Action接続する。

また、ラベルの内容はviewDidLoadにて初期化しておく。

コマンドを格納する配列を用意する

入力されたコマンドは、String型の配列に格納させる。

画面をフリックした時の処理を用意する

画面のフリックはUISwipeGestureRecognizerを使って検知する。1つのレコグナイザでは1方向の検知しかできないため、上下左右それぞれについて用意する必要がある。

まずはフリックした時に行う処理を作る。画面をフリックしたら、その方向を示す文字を配列に追加する。

次にviewDidLoadにてUISwipeGestureRecognizerを準備し、ビューに登録する。

ボタンをタップした時の処理を用意する

Aボタンを押したら「A」、Bボタンを押したら「B」を配列に追加する。

入力したコマンドがコナミコマンドかどうか判別する

didSetを利用して、コマンド配列が更新されたら(コマンドが入力されたら)以下の処理を順に行う。

  1. コマンドが10回を超えて入力されている場合、直近10回のコマンドのみ配列に保持する
  2. コマンド配列から要素を1つずつ取り出し、ラベルにコマンド入力状況を表示する
  3. 入力された直近10回のコマンドが「上上下下左右左右BA」に等しい場合、特別な処理を行う

1が面倒そうだが、実際は「11個目のコマンドが入力されたら、removeFirst()で先頭の要素を削除」を繰り返し行うだけで実現できる。

完成したソース

動かしてみた

コナミコマンドが入力されると派手に表示してくれる。ちなみにコナミコマンドの英訳は「Konami code」が正しいらしい。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。