micro:bitのボタンを使ってゲームをつくろう応用編【micro:bitでオモチャをつくろう】

micro:bit(マイクロビット)はScratchで誰でも簡単に電子工作できるボート。今回は前回に引き続き、ボタン早押しゲームを作ります。ただ、前回作成した「micro:bitのボタンを使ってゲームをつくろう」よりプログラムが複雑になります。

micro:bitのボタンを使ってゲームを作ろう【micro:bitでオモチャをつくろう】

www.youtube.com

前回のプログラムのおさらい

前回、プログラミングしてみて、おかしいなと思うことはなかったでしょうか?たとえば、早押しでAを押した後に、Bを押すと勝ちが入れ替わっていませんでしたか?前回作成したプログラムでは、遅くボタンを押したほうが勝ってしまうゲームになっていました。

こんなゲームだと、ケンカになってしまいますよね。そこで今回は、もう少しゲームっぽくつくり込んでみたいと思います。ブロック数がグッと増えてしまうので、今回はまとめながら進めてみたいと思います。それでは一緒に作っていきましょう。

プログラムをつくる方法を覚えていますか?忘れてしまった場合はここをクリックしてください。そして、「新しいプロジェクト」と書かれた箇所をクリックしてみましょう。下記のように、Scratchのような画面が表示されれば、準備OKです。

今回は、「最初だけ」ブロックと「ずっと」ブロックの両方を使います。プログラムメニューエリアの【変数】をクリックして、「変数を追加する」をクリックしてください。

【作成する変数の名前】と表示された画面が出てくるので、[START]と入力して「OK」ボタンをクリックしてください。

もう一度、プログラムメニューエリアの【変数】をクリックすると、ブロックが増えています。ここで「変数(START)を(0)にする」を選び、「最初だけ」ブロックにくっつけます。

変数ってなに?

変数とは“値をいれておく箱”とよく言います。上記のプログラミングは、変数【START】という箱を用意して、中に【0】という値を入れた状態です。プログラムに対して、「後で変数【START】を使うので、変数【START】で中に【0】を入れた状態でスタンバイしておいてね」と伝えてあげているのです。あとで使う変数を最初に伝えてあげることを「変数宣言」と言います。

ここでは、そうゆうものとだけ覚えていただければ大丈夫です。あとで変数【START】を使うときに、もう一度お話したいと思います。

「変数(START)を(0)にする」ブロックの下に「3」「2」「1」とカウントダウンするブロックを用意しましょう。この部分は、前回で作成したものと同じになるので、前回の記事を参考にして、ブロックをつくってみましょう。

正しいか正しくないかを見極めるブロック

次に、microbitのボタンを押したら動くプログラムですが、前回は下記のようなブロックを使いましたが、このブロックではAボタンを押した後にBボタンを押すと、勝ちが入れ替わってしまいます。

そこで今回は、「もし(真)なら( )」ブロックを使ってみます。

このブロックは(真(正しい))か(偽(正しくないか))によって処理を分けるためのブロックです。文章にすると難しく感じてしまいますが、この「もし(真)なら( )」ブロックのようなことは日常よく使っているのです。

たとえば、子どもがお母さんを見つけたとき、嬉しくて抱きついたとしましょう。もし、これがお母さんじゃなかったら、抱きつかないですよね。挨拶をするくらいだと思います。

上記のような状態をブロックでつくってみると、下記のようになります。

「もしお母さんなら抱きつく。でなければ挨拶をする」というプログラムに置き換えることが可能なのです。

  • 実際にこの様なブロックはありません。あくまでも例えです。

ではさっそく、「もし(真)なら( )」ブロックを使って早押し判定のプログラムを作成してみたいと思います。プログラムメニューエリアの【論理】をクリックして、「もし(真)なら( )」と書かれたブロックをクリックします。

「もし(真)なら( )」ブロックを「ずっと」ブロックにくっつけます。

「もし(真)なら( )」ブロックの下のほうにある「+」ボタンを3回クリックしてください。クリックするたびに、ブロックの形が変わったでしょうか。

上記のように表示されたでしょうか。今回は、「でなければ」部分は必要ないので「−」をクリックして減らしてみましょう。

上記のように、プログラムができればOKです。

書いてある内容を見てみましょう。「もし(真)なら()、でなければ()なら()、でなければ()なら()」というように3つ条件に分けることが可能です。

「もし(ボタンAとBが押された)なら(〜)、でなければ(ボタンBが押された)なら(〜)、でなければ(ボタンAが押されたなら)なら(〜)」というように、ボタンのチェックをしてあげるプログラムを作成します。ここで(ボタンAとBが押された)と先に“あいこ”の処理を一番最初にしているのは、一番最後に書いてしまうと、先にAボタン、Bボタンの処理が動いてしまい、“あいこ”の判定がされないのを防止するためです。

ではさっそくブロックを入れてみましょう。

プログラムメニューエリアの【入力】をクリックして「ボタン(A)が押されている」ブロックをクリックして、「もし(真)なら()、でなければ()なら()、でなければ()なら()」にくっつけます。この作業を3回行い、下記のようにつくってみてください。

続いて、ボタンを押されたときのプログラムを作成していきます。あいこの処理は、前回と同じブロックですので前回の記事
を参考に作成してください。下記のようにできればOKです。

ボタンAとボタンBそれぞれ押されたときの処理

ボタンAとボタンBそれぞれ押されたときの処理ですが、「文字列を表示(”Hello!”)」ブロックを使ってかっこよく文字を表示してみましょう。

プログラムメニューエリアの【基本】をクリックして「文字列を表示(”Hello!”)」と書かれたブロックをクリックします。Aボタン、Bボタンそれぞれ、下記のように「文字列を表示(”Hello!”)」ブロックを複製してみましょう。

このままだと、ただ文字が一定に流れてしまうので、「表示を消す」ブロックと「一時停止(ミリ秒)(100)」ブロックを使ってゲームぽい表示を作ってみましょう。

「表示を消す」ブロックを表示させるには、プログラムメニューエリアの【基本】をクリックし、【基本】の下に【その他】というメニューが表示されるのを確認します。【その他】をクリックすると右側に「表示を消す」と書かれたブロックが表示されるのでクリックします。

「一時停止(ミリ秒)(100)」ブロックはプログラムメニューエリアの【基本】をクリックして「一時停止(ミリ秒)(100)」と書かれたブロックをクリック。

ボタンAとボタンBそれぞれ下記のように作ってみましょう。「一時停止(ミリ秒)(100)」は値を「一時停止(ミリ秒)(20000)」にしましょう。これは20秒間一時停止するという処理になります。

さあ、出来上がり!といきたいのですが、この状態だと勝者が確定した後20秒経過すれば、また勝者が入れ替わってしまいます。

早押しゲームのズルをなくす

ズルがなく早押しゲームができるようにプログラムを追加してみたいと思います。先ほど作成した、「もし(真)なら()、でなければ()なら()、でなければ()なら()」ブロックの下に、もう一つ「もし(真)なら( )」ブロックを作って、再度スタートするプログラムを作成してみたいと思います。

先ほどと同じように、プログラムメニューエリアの【論理】をクリックして「もし(真)なら( )」と書かれたブロックをクリック。

「もし(真)なら( )」ブロックの中には「START」の文字を表示させて、3、2、1とカウントダウンする「文字を表示()」ブロックと、「数を表示()」ブロック、「表示を消す」ブロックを配置します。このブロックは何度も説明しているので、説明しなくても大丈夫ですね。下記のように作ってみましょう。

(真)部分を考える

最後に「もし(真)なら( )」ブロックの(真)部分を考えてみましょう。どのようなときにプログラムを実行してほしいか…..勘のいい人は、「変数」ブロックかな?と気づいたでしょうか。

そうです。まだ最初に変数宣言をした変数「START」を使っていません。ここで使ってみたいと思います。プログラムメニューエリアの【論理】をクリックして「(0)=(0)」と書かれたブロックをクリックします。

最後に「もし(真)なら( )」ブロックの(真)部分にくっつけます。

プログラムメニューエリアの【変数】をクリックして「START」をクリックします。この「START」は先ほど作成した変数の箱の名前ですね。変数「START」を「(0)=(0)」ブロックの左側(0)にくっつけます。「(0)=(0)」ブロックの右側は(1)にします。

これは、変数「START」が1と等しい場合、処理を実行するというプログラムです。=(イコール)は左側の値と右側の値が等しいかどうかを判定します。

変数「START」が1と等しい場合、処理を実行するとありますが、どこで変数「START」が1と等しい値に代わったのでしょうか?最初に変数「START」を作ったときは、変数「START」は「0」が入っていました。

答えは、ボタンA、ボタンBが押されたときに、変数「START」を「1」にしてあげれば、ボタンAの処理が終わった後に処理が実行されます。下記のようにボタンA、ボタンBに変数「START」を「1」にするブロックを追加してみましょう。

最後の最後に、変数「START」が1と等しい場合、処理に変数「START」の値を0にするブロックをいれましょう。

これは、「START」の値を1のままにしていると、ボタンA、ボタンBを押す前に、変数「START」が1と等しい場合のプログラムが動いてしまい、ゲームができなくなるのを防ぐためです。

これでプログラムが完成しました。今回はたくさんのブロックを作ったので、下記のプログラム全体を参考に、答え合わせをしましょう。

答え合わせができたら、micro:bitにプログラムを書き込んでみましょう。画面下にある「名称未設定」と書かれた場所をクリックして、下記のように「早押しゲーム2」とカタカナで入力してみましょう。その後、文字を入力した横の青いボタンをクリックして、プログラムのファイルをパソコンにダウンロードします。

micro:bitとパソコンを接続して、ダウンロードした「microbit-早押しゲーム2.hex」をmicro:bitに保存しましょう。もしやり方を忘れてしまった場合は、こちらの記事を参考にしてくださいね。保存(書き込み)が完了すると、一度パソコンとの接続がきれて、プログラムが動き出します。

遊び方は前回と同じです。「START」と表示されてカウンドダウンされたら、「A」「B」ボタンをポンと早押ししてみてください。勝ったほうのボタンのアルファベットが、LEDに表示されましたか?

***

今回は、今までに使った事がなかった「変数」や「もし(真)なら( )」という様な条件分岐のブロックを使いました。変数や条件分岐を使うと、複雑なプログラムをつくることができます。少し難しいと思いますが、今後も少しずつ使って、一緒に慣れていきましょう。