micro:bitのジャンケン


■ここでは、マイクロビット同士でジャンケンをするゲームを作っていきましょう。

それは、いったいどのようなゲームになるか、まずは、その制作例を動画で見てみましょう!

 

■いかがでしょうか?マイクロビット同士のジャンケンになっていましたか?

マイクロビットの表示や音は原始的で表現できるものには大きな制約がありますが、その範囲で自由に設計ができますので、なんとかそれらしくやってみましょう。

 

■技術要素として、以下の3項目を組み込みましょう。

  1. マイクロビット(基板)が揺らされたことを検出する
  2. 揺らされたら、グー/チョキ/パーをランダムに決め、LEDマトリクスに表示
  3. 相手の手と比べ、もし勝った場合は、音楽を鳴らす(=かちどきをあげる)

■以上の3点を利用するということを制約条件として、その他のプログラム要素やプログラムの構成、画像の表現、音楽の表現などすべて自由に設計してください。

例えば、グーチョキパーの表現や勝ったときに鳴らす音など、自分が面白いとおもうようなものを自由に実装していきましょう。

■これから、このようなジャンケンのゲームをいっしょに開発していきますが、次のような3とおりのプログラムを作りながら、進めていきます。

  • 第1段階:基板が揺れたらピコーンと鳴って、LEDマトリックスにスマイリーを表示する
  • 第2段階:その後に、グー/チョキ/パーをランダムに表示する部分を追加する
  • 第3段階:さらにその後に、相手の手の内を見て、勝ち負けを決定する機能を追加する。これで出来上がり!

 

─── ◆ ───

 

■第1段階:揺れの検出

MakeCode for Micro:bitを起動し、新しいプロジェクトを作成する。すると、名称を聞かれるので、状況のわかる名前を定義する。そしてまず一回、所定のディレクトリーへ保存することで、使用中のシステムにおける、このプロジェクトの位置が明確になる。くれぐれも行方不明になるというような情けないことにならないように管理しよう!

 

■プログラムの内容を列記する

  1. ゆさぶられたとき
  2. メロディ(ピコーン)を1度だけ鳴らす
  3. スマイリーを表示する
  4. しばらくその表示を維持して見せる
  5. スマイリーの表示を消灯する

■この各行、すなわち、やりたいこと、に対応する機能コマンドが用意されていれば、それをこの順で並べるだけでいいので、とてもプログラムを作りやすい。MakeCode for Micro:bitはそのようにできている。これをオブジェクト指向言語という。ここで、オブジェクト[目的]は、やりたいことであり、言語は、要素、規則、意味の集合である。プログラム記述エリアに、ここでやりたいことに対応するブロックを下の図のようにならべると所望のプログラムができたことになる。

▲第1段階:揺れの検出のプログラム(1,557KB)
▲第1段階:揺れの検出のプログラム(1,557KB) クリックするとダウンロードできる

■これをソースコードと呼ぶ。この図から手元のシステムへ書き写してもいいが、電子データーがあればそれをロード(読み込み)するほうがいい。書き写す時間を節約し、また、写し間違いをさけることができる。

 

■上の図をクリックすると、ソースコードをダウンロードできる。そのまま手元のシステムにいったん保存する。その後、手を加えたら、改版番号を付加して別名保存する。

 

■ソースコードの書かれている地にメモを書くことができるので、目的や経緯を書き留めておこう。また、ブロックにもコメントをつけておくことができる。例えば、スマイリーの後にある「一時停止」の意味と調整方法をつけておく。

 

■プログラムに文法的エラーが無ければ、その動作をシミュレートする(コンピューター上でマイクロビットの動作を真似てみる)ことができる。正しいプログラムでも、必ずしも意図どおりの動きをするとは限らないので、実際にマイクロビットへダウンロードする前に、その動作をシミュレートする意味がある。ただし、この例題の「揺れ」の模擬はできないので、その代わりにshakeスイッチが表示され、これをクリクしてやる必要がある。以下にその結果を記録した動画を貼っておくが、一瞬で終わってしまうので、動作を確認するには数回繰り返して見ることになるかもしれない。

■シミュレーションで動作が確認できたら、いよいよプログラムをマイクロビットへダウンロード(パソコンとマイクロビットをUSBケーブルで接続)して動作さることとなる。次に、その実験の様子を動画で示す。シミュレーションとの違い、基板の揺らし方とその検出の具合を見よう。

 

■これで、第1段階の目標:揺れの検出のできることが確認された。揺れを検出したあと、の表示、発音は任意に変えて構わない。この実験で検出される「揺れ」とはなにか体感しておこう。基板を大きく動かすことでも無く、早く動かすことでも無く、速さの変化率に反応している。これを加速度の検出という。ここで使われている加速度センサーの仕組みは、後で調べ、考えてみよう。

 

■またこの機能は、ソースコード上では一個のピンクのブロック「ゆさぶられたとき」で表されているが、電気信号で動いているコンピュータにこの機能を実行させるには、それを実現するためのたくさんの仕組みが利用されなければならない。例えば、加速度センサーとコンピューターとの間は、一対の信号線で繋がれている。信号を適切な順序や組み合わせでやりとりして、基板の状況を判別できるように定めておく必要がある。

それを実現するには、この機能を構成するさまざまな要素を操作するたくさんの命令が事前に仕組まれている。それは、このようなブロックに対応するたくさんの文字で記述されている。

Make Code for microbitは、このようなブロックで記述されたソースリストを文字のプログラムへ翻訳する他、プログラムの記述から模擬実験、プログラムをダウンロードまで執り行うので、「マイクロビットの開発環境」と呼ばれる。その結果としてマイクロビットに送られるファイルのサイズは、約1,600kB(=200,000文字)という大きなものである。

 

─── ◆ ───

 

■さあ、開発工程を次に進めよう!

「第2段階:グー/チョキ/パーをランダムに表示」の開発にはいる。ここでも、まずは、このプログラムの内容を列記してみる。こんどは、電源直後の最初だけ働く第1群のプログラムとその後、動き続ける第2群のプログラムに分けて書く。

 

§第1群のプログラム

  1. 最初だけ
  2. アイコン「ハート」を表示する
  3. 変数「ジャンケン数」を0にする
  4. メロディ「ジャンプアップ」を一度演奏する

§第2群のプログラム

  1. ゆさぶられたとき
  2. メロディ「ピコーン」を一度演奏する
  3. 変数「ジャンケン数」へ1から3までの乱数を代入する
  4. もし「ジャンケン数」が1ならグーを表示する
  5. そうでなくて、変数「ジャンケン数」が2ならチョキを表示する
  6. そうでなくて、変数「ジャンケン数」が3ならパーを表示する
  7. 変数「ジャンケン数」を0にする
  8. 一時停止2秒
  9. アイコン「ハート」を表示する

 これをMakeCode for Micro:bitで記述すると下図のようになる。

▲第2段階グーチョキパーをランダムに表示
▲第2段階グーチョキパーをランダムに表示(1,560KB)ダウンロード可能

■このプログラムは、「最初だけ」というブロックで始まる第1群と「揺さぶられたら」で始まる第2群とに分けて書かれていることが大きな特徴である。それぞれ特定の事象の発生ごとに動作するものである。この特徴は、プログラムを作りやすくし、かつ、理解しやすくするものである。この後、第3段階のプログラムを作成する上でもこの特徴のメリットと効果を感じることになるだろう。

 

■このプログラムの動作シミュレーションを見てみよう。

 

─── ◆ ───

 

■それでは、最終工程に進もう。

「第3段階:相手の手の内を見て、勝ち負けを決定する」機能を追加する。

ここでも、まずは、このプログラムの内容を列記する。

 

第2段階と同様に、電源直後の最初だけ働く第1群のプログラムとその後、揺れたらグーチョキパーの手を表示する第2群のプログラム、ここに、第3段階では、相手の手を読む第3群をくわえる。そのうえで、第2群に自分の手と比較する機能を加え、もし勝ったときは、かちどきをあげることとすれば完成版となる。

以下に各群ごとに記述していくが、バラバラで見にくいようなら、あらかじめ、次のリンクからプログラムファイルをダウンロードし、MakeCode for Micro:bitで見ながら読むほうがわかりやすいかもしれない。

なお、下記記述は、ハート号機(基板)用である。対戦相手のプログラムは、アイコンと勝ちどきの曲をスマイリーと喜びの歌などへ書き換えると良いだろう。

 

§第1群のプログラム

  1. 最初だけ
  2. 無線のグループを3に設定する
  3. 無線の送信強度を4に設定する
  4. アイコン「ハート」を表示する
  5. メロディ「ジャンプアップ」を一度演奏する
  6. 変数「受信数」を0にする
  7. 変数「ジャンケン数」を0にする
  8. 一時停止200ms

 これをで記述すると下図のようになる。

 

§第2群のプログラム

  1. ゆさぶられたとき
  2. メロディ「ピコーン」を一度演奏する
  3. 変数「ジャンケン数」へ1から3までの乱数を代入する
  4. 無線で変数「ジャンケン数」を送信する
  5. 一時停止200ms
  6. もし「ジャンケン数」が1ならグーを表示する
  7. その条件の下で、相手がチョキならかちどきを上げる
  8. そうでなくて、変数「ジャンケン数」が2ならチョキを表示する
  9. その条件の下で、相手がパーならかちどきを上げる
  10. そうでなくて、変数「ジャンケン数」が3ならパーを表示する
  11. その条件の下で、相手がグーならかちどきを上げる
  12. 変数「ジャンケン数」を0にする
  13. 変数「受信数」を0にする
  14. 一時停止4秒
  15. アイコン「ハート」を表示する

 これをMakeCode for Micro:bitで記述すると下図のようになる。

 

§第3群のプログラム

  1. 無線でreceivedNumberを受信したとき
  2. 変数「受信数」へreceivedNumberを代入する

 これをMakeCode for Micro:bitで記述すると下図のようになる。

■上記がジャンケン・ゲームの完成版である。対戦相手には、アイコンと勝ちどきの曲を変えてインストールすると対戦の結果がわかりやすくなる。

 

ここまで、

  1. ゆれの検出
  2. 乱数発生
  3. 近接無線通信

の各要素を段階を追って実装することで、わかりやすくジャンケン・ゲームの開発を進めることができたと思う。最後にまた対戦の動画を掲載しておこう!

 

 

─── ◆ ───