昨晩のうちに投稿するつもりが案の定寝てしまいました。
はじめに
タッチパネルに表示されているボタンを押してパスワードを入力し、
パスワードが正しければ右にあるドアが開くというプログラムです。
このプログラムは、タッチパネル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
ソースコード解説
設定パラメータ(設定変数)について
- [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!なプログラムを作ってみてください。
ではでは。