Minecraftとタートルと僕

PCゲームMinecraftのMOD「ComputerCraft」の情報を集めたニッチなブログです。

タッチパネル式パスワード認証ドア(h2touchpanel API利用)

昨晩のうちに投稿するつもりが案の定寝てしまいました。

はじめに

f:id:hevohevo:20140211081611p:plain:w600

タッチパネルに表示されているボタンを押してパスワードを入力し、
パスワードが正しければ右にあるドアが開くというプログラムです。

このプログラムは、タッチパネルAPI(h2touchpanel API)の使用例として作りました。
ソースコード中にパスワードが素のテキストで書かれているので、プログラムを強制終了してファイルの中を覗けばパスワードばればれですね。
セキュリティとか関係なくね? という突っ込みはダメ絶対。

インストール方法

pastebin コマンドを使うのが一番楽だと思います。

h2touchpanel APIのインストール

(すでにインストール済みなら飛ばしてかまいません)

> pastebin get eK9BW600 h2touchpanel
このプログラムのインストール
> pastebin get b9UYquKy pass_door
プログラム実行

デフォルトの設定では、パスワード、タッチパネル、ドアの位置は以下のように設定されています。
自分の希望に合わせて、プログラムファイル(config parameterの部分)を編集してください。

  • パスワード(変数名、pass): 12345
  • タッチパネルモニタの位置(変数名、sideMon): CCコンピュータの上側("top")
  • ドアの位置(変数名、sideDoor): CCコンピュータの右側("right")
> pass_door

ソースコード

http://pastebin.com/b9UYquKy

  • 2014.02.12 22:00 0.1a バグ修正版


ソースコード解説

設定パラメータ(設定変数)について

  • [L10-12] パスワード、タッチパネル位置、ドアの位置。変数名はそれぞれ、pass, sideMon, sideDoor
  • [L40-52] ボタン設定テーブル(変数名bCfg)
    • 1234567890の10個+入力クリア(clr)+入力確定(enter)の計12個のボタンを設定
    • 設定において、nameはボタン名と表示する文字列(string)、cmdはそのボタンを押したときに実行する関数(function)

自家製関数について(L15-37)

  • 自家製関数、addStr()、clearStr()、certStr() 内で使われている変数は2つ。
    • 変数tmpは入力したパスワードを文字列として一時的に蓄えておく。
    • 変数success_flagは、パスワード入力確定時に、パスワードと一定していたらtrue、一致していなかったらfalseとするための識別用変数
  • L18-21: addStr(引数)、与えられた引数を変数tmpの末尾に付け加える。
  • L23-26: clearStr()、変数tmpの値を空にする。
  • L28-37: certStr()
    • 変数tmp(入力値)と変数pass(正解パスワード)を比較して、等しいなら「OK」を表示してsuccess_flagをtrueにする。異なるなら「bad」を表示する。
    • どちらにせよ一度入力を確定したらこれまで入力された文字列(tmp)は空にする。

メイン(main)部分について(L55-77)

タッチパネルの表示部分(L55-59)
  • ht2touchpanel APIを利用。
    • 3x4の計12個のボタンを表示する。
    • L57: このオプションにより、パネル表示の範囲を上側(Y座標)2、下側(Y座標)9に指定
L61-77: メインループ(while true do ~ end)
  • このプログラムは止まらず動き続けます。
  • L62-77: 各種変数等の初期化
    • 入力値蓄積用変数tmp、認証成否フラグsuccess_flagの宣言
    • ターミナル画面("ok"、"bad"などの情報を表示します)のクリアとカーソル位置初期化
    • CCコンピュータから出すレッドストーン信号をOFFに
  • L69-73:タッチパネルによるパスワード入力ループ(repeat ~ until)
    • success_flagがtrueになる(認証に成功する)まで、このループを続ける
    • h2touchpanel APIを使用
      • L70: タッチパネルボタンが押されるまで待つ。押されたら変数b1に押されたボタンを代入。
      • L71: 押されたボタンb1に設定されている関数を実行(たとえば"1"をtmpに蓄積したり、tmpとpassが等しいかをチェックするなど)
      • L72: タッチパネルなので押されたボタンを0.5秒間だけ強調表示することで、ユーザビリティを向上させる。
  • L75-76: ここはパスワード認証に成功したときの処理
    • CCコンピュータから出すレッドストーン信号をONに
    • そしてON状態を5秒間続けてから次のwhileループへ(5秒間だけドアを開ける)

まとめ

ありがちなパスワード認証式ドアプログラムですが、タッチパネルを使うだけでこんなにCOOL!に。
タッチパネルの使用も、h2touchpanel APIを使うだけでこんなに簡単に!

みなさんもぜひh2touchpanel APIを使って、COOL!なプログラムを作ってみてください。

ではでは。