マイクロビットを使ってみた(番外編)

皆さんこんにちは!今まで三回にわたってマイクロビットの使い方を説明してきました。一回目の記事では必要な機材や開発環境の使い方を、スイッチやLEDの使い方は二回目の記事で説明しました。三回目の記事にはマイクロビットに搭載されているセンサーの使い方を載せました。各部品を説明する際には簡単なプログラムを作って動かしていますので単に部品の使い方だけでは無く、部品の組み合わせ方やプログラムを作る上でのチョットした注意点などを知る事が出来たと思います。
実際にIoTシステムを構築するにはプログラムの作り方だけでは無く、システムの構成にも注意を払う必要があります。こちらのページではIoTシステムを無線化する際に注意すべき点を紹介しています。参考になさってください。

今回は番外編として息抜き用のゲームを紹介します。今までの記事は「お勉強」みたいな感じで少々疲れていませんか?今回作るのは単純なゲームなので頭を使わなくて済み、気楽に出来ます。ホッと一息つきたい時にでも試してみてください。

実験

1.ゲームプログラムの紹介


ゲームの内容は良く有りそうなもので、LEDの点が上から落ちてくるのを受け止めるゲームです。「雨漏り受け止めゲーム」とでも名前を付けておきましょうか。仕様は以下のとおりです。

  • 一番上の段にLEDの点(雨漏りの雫)が現れます。このX方向の位置は乱数を使って不規則に現れます。
  • この雨漏りの雫は一定時間ごとに一段ずつ降りてきます。
  • 一番下の段にもLEDの点(受け皿)が表示されます。このスタート位置(X座標)も乱数を使って不規則に決まります。
  • A又はBボタンを使って受け皿を左右に移動させ、雨漏りの雫が落ちてくる列に合わせます。
  • 受け皿は左一杯に達した状態から更に左に移動させると右端から現れます。右一杯に有る場合は左端から出てきます。
  • 雨漏りの雫が一番下の段に達した時に受け皿が同じ列に有れば勝ちです。ズレていれば負けになります。
  • 勝ち/負けに応じたメロディが流れます。(V2以前のマイクロビットでは外部にスピーカーが必要です)

二回目の記事でもA/Bボタンを使ってLEDの点を移動させていました。あの時は左又は右一杯に移動すると、それ以上動かないようにしていましたが、今回は行き過ぎると逆側から出てくるようにしてみました。LEDがワープしたみたいで面白いでしょう。
以下にこのゲームのプログラムを示します。

(1)プログラム全体

以下がプログラムの全体像です。

ゲームプログラム(全体)
雨漏り受け止めゲームプログラム全体(クリックで拡大)

二回目の記事で説明したスイッチやLEDの使い方、スイッチでLEDを移動させるときの条件判断、LEDの点灯位置の更新方法などを使っています。ゲームを作るのに当たって新たに使った部品は「メロディを開始する」の部品です。上の絵のとおりに部品を組み合わせればゲームを始める事が出来ますが、簡単に各部分毎の説明をしておきます。使っている変数は以下のとおりですが、これはプログラムに現れて来ませんので「変数」のリストの中にある「変数を追加する…」を使って作っておいてください。以下が変数の名前と役割です。

  • X(S):雨漏りの雫のX方向の位置。これは一度決めると一回のゲームの中では変わりません。
  • Y(S):雨漏りの雫のY方向の位置。これは段々落ちてくるので最初は”0″で最後は”4″になります。
  • Y(S_old):一つ前の雨漏りの雫のY方向の位置。二回目の記事で複数LEDが点灯している場合に表示を更新する方法で使い方を紹介しました。
  • X(U):受け皿のX方向の位置。最初に乱数で決め、後はA/Bボタンを使って操作者が位置を決めます。
  • X(U_old):一つ前の受け皿のX方向の位置。役割はY(S_old)と同じです。

(2)「最初だけ」の部分

ゲームプログラム(イニシャライズ)
「最初だけ」のプログラム(クリックで拡大)

ここでは、プログラムが動き出した時に一回だけ行う処理を書きます。今回は結果の判定に音を使いますので音量を設定しておく必要があり、最初の行でこれを行っています。お使いの環境ごとに好みの音量が有ると思います。何回か試してみて適当と思われる値に修正してください。範囲は0~255です。数字の上でクリックするとスライドバーが出てきますので、それで設定しても良いですし、直接数字を打ち込んでも良いです。次にアイコンを一定時間表示し、その後に(ゲームをするのに邪魔にならないよう)消しています。プログラムをダウンロードした後や、電源を入れた後にいきなりゲームが始まって慌てないようにするため、ハートマークのアイコンを点けています。

(3)「ずっと」の部分

「ずっと」の部分は、中身を最初から最後まで実行すると再び先頭に戻って実行します。この部分では

  • 雨漏りの雫と受け皿の位置を乱数を使って決める。
  • それをLEDに表示する。
  • 一定時間が経ったら雨漏りの雫の位置を一つ下に落とす。
  • 一番下に雨漏りの雫が達した時に受け皿の位置と一致しているかどうかを判断する。
  • 雨漏りの雫と受け皿の位置が一致していたら”勝利”のメロディを流す。
  • 一致していなかったら”負け”のメロディを流す。
  • 最後に表示を全部消す。

と、言う作業を行っています。

ゲームプログラム(メイン)
「ずっと」のプログラム(クリックで拡大)

乱数は「計算」のリストの中に有ります。(探している部品が何処のリストに有るか判らない時は同じ色のリストを調べてください。)これは書いてあるとおり、0から4までの間の数字をコンピューターが勝手に決めてくれる機能です。必ず前回と違う数字で出てくる訳ではなく、同じ数字が続く事も有ります。
次に「くりかえし」の部品ですが、これは「ループ」のリストの中にあります。脇に書いている数字(ここでは”4″)の回数だけ緑の枠の中を上から順に実行し、指定の回数だけ実行したら下に抜けて次の作業を行います。このプログラムでは雨漏りの雫を上から下まで落とす作業を行っています。「くりかえし」の中にある「一時停止」の部品が雨漏りの雫が落ちてくる時間を決めています。この時間を短くすると落ちてくる速度が速くなりますのでゲームの難易度が高くなります。
雨漏りの雫が下まで達したら(「くりかえし」を抜けると丁度下に達します)その時の雨漏りの雫のX方向の位置と受け皿のX方向の位置が一致しているかどうかを「もし」の部品で判定します。一致していたら「メロディを開始する」の部品を使って”パワーアップ”のメロディを、一致していなければ”パワーダウン”のメロディを流します。この部品は「音楽」のリストの中の下の方に有ります。
次の一時停止(1000mS)は、メロディが流れ終わるまでチョット待つために入れてあります。
最後に一回のゲームが終わったら全ての表示を消す為に「表示を消す」の部品を入れてあります。
これで一回のゲームが終了し、「ずっと」の先頭に戻り、新たなゲームが始まります。

(4)「ボタンA(B)が押されたとき」の部分

ゲームプログラム(Aボタン)
「ボタンAが押されたとき」のプログラム(クリックで拡大)
ゲームプログラム(Bボタン)
「ボタンBが押されたとき」のプログラム(クリックで拡大)

この部分は「ずっと」の枠とは独立した場所に有るので、動作も「ずっと」の動きに関係なく進みます。「ずっと」の中のどの部分が動いていようが、ボタンが押されれば、この枠内に書かれた部品の動作を行います。ですから、雨漏りの雫が落ちて来て一時停止している間でもボタン操作すれば受け皿は左右に動かす事が出来ます。(裏を返すとゲームが終わってメロディが流れている間も動かせるのでチョット違和感がありますが。どうしても気になるのであればゲーム中で有るかどうかを判定させる新たな一つ変数を用意して、雨漏りの雫が落ち始めてから下に落ちるまでの間だけボタン操作を有効にさせる事も出来ますが。)
さて、プログラムの本体ですが基本的には二回目の記事の最後の方に書いたプログラムと考え方は同じなのですが、一部仕様が異なる所があります。それは、二回目の記事ではLEDが左一杯又は右一杯に移動したら、それ以上は動かないとしたところを今回は左一杯を超えたら右端から出てくる。右一杯を超えたら左端から出てくる。と、言う形に変更したところです。LEDの表示を更新する部分でも、前の仕様ではボタンを押してもLEDの位置が移動しない場合が有ったので移動しない場合は表示の更新を行わないと言う判断を入れていましたが、今回はボタンを押すと必ず位置が移動しますのでその判断が不要となっています。

プログラムの説明は以上です。実際に楽しんでみてください。実機が無くてもシミュレーター上で動かす事もできます。PCにスピーカーが付いていれば音も聞こえます。音が聞こえてくると楽しいですね。また、雫が落ちてくる時間を調節したり連続で何回か成功したら落ちてくるスピードを速くするなど、色々改造して楽しめそうです。
今回はゲームの紹介と、そのプログラムの解説を行いました。次回はマイクロビットに搭載されている無線について説明したいと思います。お楽しみに!

無線モジュール.comでは無線モジュールを利用した様々な提案・開発を行っております。こちらのページには無線化の際のヒントを載せています。

開発実績はこちらに掲載してあります。是非ご覧になってください。