ボタンでキャラクターを操作する(2)

micro:bit(マイクロビット)のボタンでScratchキャットを左右へ移動するプログラムに、AボタンとBボタンを同時に押したときの判定を追加します。同時押しで、Scratchキャットを90度回転させます。
6-3-1.はじめに
この記事では「6-2.ボタンでキャラクターを操作する(1)」で作成したScratchキャットが左右へ移動するプログラムを元にして、micro:bit(マイクロビット)のAボタンとBボタンを同時に押したときの判定を追加します。プログラムの作成がまだの場合は、先に「6-2.ボタンでキャラクターを操作する(1)」をお読みください。
6-3-2.ボタンの同時押しを判定するプログラム
図6-3-2-1は「6-2.ボタンでキャラクターを操作する(1)」で作成したプログラムです。micro:bit(マイクロビット)のボタンを押すと、Scratchキャットが左右へ移動するプログラムです。左右への移動は「もし~なら」ブロックを使って、Aボタン、またはBボタンが押されたことを判定しています。
同じように、ボタンの同時押しを判定する「もし~なら」ブロックを追加します。
micro:bit拡張機能の中にある「ボタン~が押されたとき」ブロックの選択できる項目を見てみましょう。選択できる項目は「A」「B」「どれかの」の3つです。どうやら同時押しを判定する「A+B」や「どちらも」はなさそうです。
では、どうやって同時押しを判定すればいいでしょうか。それは、二つの「ボタン~が押された」ブロックを使う方法です。二つのブロック「ボタンAが押されたとき」と「ボタンBが押されたとき」を、「かつ」ブロックでつなぎます。これで同時押しが判定できそうです。
プログラムを完成させましょう。AボタンとBボタンが同時に押されたときは、時計回りに90度回転するようにします。図6-3-2-5が、完成したプログラムです。
緑色の旗をクリックして、Scratchキャットを動かしてみましょう。図6-3-2-6は、左右に移動した後、AボタンとBボタンの同時押しでScratchキャットが回転するようすです。
これで「プログラムは完成!」と言いたいところですが・・・
6-3-3.潜む不具合(バグ)
ボタンの同時押しを判定するプログラムは完成しました。Scratchキャットは、Aボタンで左へ、Bボタンで右へ移動します。AボタンとBボタンを同時に押すと、くるくる回転します。問題なさそうですね。
では、完成した(と思われる)プログラムに、次のブロックを追加してください。これは、Bボタンが押されたときに「こんにちは!」と言って、右へ進むということになります。
緑色の旗をクリックして、Scratchキャットを動かしてみましょう。AボタンとBボタンを同時に押してください。
あれれ~?AボタンとBボタンを同時に押したのに「こんにちは!」と言って、くるくる回転していますね。これはどうしてでしょうか?
実は「ボタンBが押された」ブロックは、Bボタンだけが押されたことを判定するブロックではありません。Bボタンだけが押されても、BボタンがAボタンと同時に押されても、どちらもBボタンが押されたと判断します。「ボタンAが押された」ブロックも同じです。
つまり、AボタンとBボタンを同時に押すと、赤枠で囲んだブロックのすべてが動いていたということになります。
完成した(と思われる)プログラムを動かしても、気づかなかったのは「10歩動いて、-10歩動く(結果的に動かない)」が実行されていたからです。「こんにちは!と言う」ブロックを追加することで、隠れていた不具合(バグ)が見えるようになりました。このように、動かして確認しても、見えない不具合(バグ)が潜んでいることがあります。
最後に、正しく動作するプログラムをいくつか紹介します。さて、このプログラムは本当に「正しく動作する」プログラムなのでしょうか。