[No.16]ワニワニゲームで運だめし!

さぁ夏休み! 遊びをもりあげる楽しいゲームを作ってみましょう! ワニの口に手を入れると……パクッとかまれるかもしれないちょっとドキドキのゲームです。夏休みのプログラミング工作にもどうぞ!

必要なもの&準備
- SPACEBLOCK通常パッケージ[SPACEBLOCK本体、USBケーブル、電池ボックス]
- 赤外線モーションセンサモジュール(赤外線モーションセンサ)
- 8×8 RGB LEDマトリックスパネル(LEDパネル)
- 180°マイクロサーボモーター(サーボモーター)
- ジャンパーワイヤ[ピンヘッダ-ピンソケット3本×延長したい数]
- プログラミングをするパソコン

SPACEBLOCKに拡張パーツを接続する

接続の細かい部分は次の図で確認してください。


手を入れるとワニの口が閉じる仕組みを考える!
今回作りたいのは、ワニの口に手を入れると口がパクッと閉じる仕組みです。入力装置として、動きを検知できる赤外線モーションセンサを使用し、出力装置として0°から180°の回転の動きができるサーボモーターを使用します。ワニの口に手が入ったことを赤外線モーションセンサで検知して、サーボモーターの動きでワニの口を開閉します。
ワニの体部分には牛乳パックを使用し、厚紙でワニの口部分を作成。上あごは体に割ピンでとめ、重みで自然に閉まる構造にします。サーボモーターはストローをつけて上あごを押し上げられる程度の長さにします。

緑色の色画用紙を貼り付けて見た目を整え、牛乳パックの体部分に電池ボックスとSPACEBLOCK本体を入れます。

さらに、歯と目、尾、手足をつけます。上あごに赤外線モーションセンサ、下あごにサーボモーターを固定します。

上あごを割ピンでとめたら工作部分は完成です。


閉じるか閉じないかわからないプログラムを作ろう!
今回作りたいプログラムは、「ワニの口が閉じるときもあるし閉じないときもある」というもの。あらかじめ、口が閉じるか閉じないかどちらになるかわからないというプログラムを作っておく必要があります。
乱数ってなに?
サイコロを転がすときのように、何が出るかわからない値をプログラムで扱うときには「乱数」を使います。どれが出るかわからないことをランダムといいます。
[《0》から《10》までのランダムな整数]ブロックを使うと、指定した数値の範囲からランダムな整数が発生します。サイコロを振ると1から6のどれかの数字が出るのと同じように、ランダムな数値は指定した範囲の数値が同じ確率で出るようになっています。

変数を作る
乱数を入れておくために、変数「random」を作ります。

サーボの最初の位置を決めるプログラム
まず、次の図の通り、プログラム開始と同時にサーボの位置を0°にするプログラムを作成します。

動きを検知したら実行されるプログラム
ワニの口に手をいれたら実行されるプログラムを作ります。まず、大きな流れを作りましょう。
次の図の通り、[《A0》の電圧が《上がった》]ブロックで赤外線モーションセンサの値をチェックし続けます。手をワニの口に入れるとセンサが動きを検知して電圧が上がり、プログラムの実行が始まります。まず、乱数が発生し1〜10のいずれかの整数が変数「random」に入ります。そして、値が3以下ならワニの口が閉じて、そうでなければ口は開いたままになります。

このプログラムに、LEDの演出を足します。次の図の通り、ワニの口に手を入れたことを検知したらカウントダウン表示をし、ワニに食べられるときは「×」、食べられずにすんだ場合は「○」の表示をします。また、判定が終わってワニの口が開いたり手を抜いたりする動きを赤外線モーションセンサーが検知しないように5秒の待機時間を入れます。

これでプログラムは完成です。SPACEBLOCKにプログラムをスタンドアローンモードで転送して、もう一度ワニの中に入れて早速遊んでみましょう。
このプログラムでは、1〜10の整数の乱数を発生させて、3以下の場合はワニに食べられるようにしました。乱数が1〜3の場合ならワニに食べられて、4〜10の場合は食べられずにすみます。食べられる確率が30%で、食べられない確率が70%です。



ワニワニゲーム完成!


