第10回 ヒミツの金庫 プログラム

組み立てが終わったらUSBケーブルでパソコンとつなぎ、ブロックプログラミング環境を立ち上げて、[編集]メニューから上の表のように入出力設定をしましょう。

全体の大まかな流れを見るために、細かな関数の中身はあとでつくることにして、金庫のメインプログラムからつくっていきます。

メインプログラムでは、まず暗証番号を設定して金庫に鍵をかけます。その後、ふたを開けるには再び暗証番号を入力して、失敗ならエラー音が鳴り、成功なら成功の音が鳴ってふたが開くという動作になります。

関数は[制御]カテゴリーにある。新しい関数をつくるときは、[関数]ブロックや[関数をコールする]ブロックの「▼」をクリックして、[新規…]を選んで関数名を入力しましょう。変数は[変数]カテゴリーの[新しい変数を作る]ボタンでつくりましょう。

第10回 ヒミツの金庫 プログラム

[プログラム解説]

【メインプログラム】
①「input」関数を呼び出して、暗証番号を設定する
②「move」関数を呼び出して、入力された暗証番号をリスト「password」に移して保存する
③暗証番号が合っているかどうかを表す変数「result」を0(失敗)に初期化する
④変数「result」が1(成功)になるまで、⑤~⑦を繰り返す
⑤ここを通るということは暗証番号が間違っているということなので、「error」関数を呼び出して、エラー音を鳴らしてふたを閉める
⑥「input」関数を呼び出して、ふたを開けるための暗証番号の入力を行う
⑦「compare」関数を呼び出して、入力された暗証番号と保存されている暗証番号が一致しているかどうかを比較する。「compare」関数は、比較した結果(成功なら1、失敗なら0)を変数「result」にセットする
⑧暗証番号が正しければ、④の繰り返しを抜けてここにくる。「success」関数を呼び出して、成功音を鳴らしてふたを開ける

第10回 ヒミツの金庫 プログラム

[プログラム解説](続き)

【input関数】
①リスト「input」を確実に空にするため、inputの長さの回数分「1番目を削除する」を繰り返す
②4桁の暗証番号を入力するので、リスト「input」の長さが4になるまで、以下を繰り返す
③もし、A0のボタンが押されたら…
④「feedback」関数を呼び出して、音と光で押されたことを知らせる
⑤A0ボタンなので、0をリスト「input」に追加する
⑥同じ数が連続して入力されないようにするため、A0ボタンが離されるまで待つ
これ以降、他のボタンに対しても同じ処理を行う

【move関数】
①リスト「password」を確実に空にするため、passwordの長さの回数分「1番目を削除する」を繰り返す
②リスト「input」の1番目をリスト「password」に追加し、リスト「input」の1番目を削除する。これをリスト「input」の長さの回数分繰り返す。

【compare関数】
①結果を表す変数「result」を0(失敗)、リストの何番目を見るかを表す変数「index」を1で初期化する
②リスト「input」とリスト「password」のindex番目の内容が異なっているか、またはindexの値がpasswordの長さを超えるまで、indexを1ずつ増やしていく
③indexの値がpasswordの長さを超えているなら、内容がすべて一致したということなので、resultを1(成功)にする

第10回 ヒミツの金庫 プログラム

実行]メニューの[プログラム作成・転送]でプログラムを転送したら、USBケーブルを抜いて、電池ボックスのスイッチをONにしましょう。

キーボードから4桁の暗証番号を入力したら、エラー音が鳴って、ふたが閉まります。

この後は、正しい暗証番号を入力するまで、ふたは開きません。暗証番号が一致したら、成功の音が鳴って、再びふたが開くはず。適当に入力した暗証番号でふたが開く確率は、1/4×1/4×1/4×1/4=1/256です。工作とプログラムを改良して、もっと安全な金庫にしてみるのもおもしろいでしょう。

金庫以外にも、今回のプログラムを応用して「黒ひげ危機一髪」みたいなゲームもつくれます。挑戦してみてね。