
このプログラムが動かない理由あなたにわかりますか?【ミワ ムラタのRobo Blocks奮闘記】
こんにちは!Robo Blocksチームのムラタ ミワです。プログラミング初心者ながら、プログラミングツールRobo Blocksを担当しています。
今回は、わたしの失敗事例のご紹介です。
あなたにこの謎が解けるかな?ぜひ考えてみてください!
■作りたいプログラム
Pepperの頭を触られた回数に応じて、Pepperが違う動きをするプログラム。ここでは、頭を1回触られたら「おじぎ」、頭を2回触られたら「ガッツポーズ」をするプログラムを作ってみました!
わたしが作ったプログラムがこちら!
緑の旗がクリックされたときに開始し、まずは回数を「0」に設定。
頭を触られたときに回数を1ずつ増やしていきます。
もし、回数が1ならおじぎ、回数が2ならガッツポーズの動きをします。

実行したらどうなるでしょう?ちょっと想像してみてください!
、、、
、、、
、、、
まぁ、冒頭で失敗事例のご紹介とお伝えしているので、言わずもがなですが、こちらは失敗作。想定通りには動きません。
当時のわたしは、自信満々でいざ実行してみたのですが、頭を触れど触れどPepperは頑なに動いてくれませんでした。
うまくいくように見えませんか??
ここでクイズ!
なぜ頭を触ってもPepperは微動だにしてくれなかったのでしょう?
、、、
、、、
、、、
、、、
、、、
答えがわかった方は、記事の最後の方に進んで解答をご確認ください!
悩ましい方は、一緒に謎を解いていきましょう!
まずは、自分がこのプログラムの制作者になったつもりで考えられる可能性を試してみます。
まず思いつくのが、
「頭のタッチセンサーが働いてないんじゃない?!」
プログラムは正しく見えるので、ひとまず他人のせいにしがちです。まずは、頭のタッチセンサーに対する疑いを晴らしていきましょう。
ここで、NEXTムラタ’sヒント!
頭のタッチセンサーに対する疑いを晴らすには、回数を1ずつ増やした後に、回数を文字で表示してみます。これで頭を触るたびに回数がちゃんと増えているか確認できます。

実行結果は、、、
うまくいきました〜!頭を触るたびに数字が増えていきます。頭のタッチセンサーは正常に働いていて、頭を触るたびに回数は増えていることがわかりました。
これで、真実に1歩近づきました。真実はいつも1つです。諦めずに謎解きに挑戦しましょう。
次の可能性を考えます。
「緑の旗がクリックされたとき」ブロックの下に続くブロックが何らかの理由で動いていないのでは?!
ここで、またまたNEXTムラタ’sヒント!
「緑の旗がクリックされたとき」に続く一連のブロックが動いているか確認するには、「もし〜なら」ブロックの下に、しゃべるブロックを追加してみましょう。「はい」としゃべるか確認します。

さあ実行!
緑の旗をクリックすると、、、
即座に「はい」と言われてしまいました。
頭を触る前に、「はい」と言われてしまったのです。
つまり、「緑の旗がクリックされたとき」ブロックに続くブロック群の最後まで、一瞬で処理が終わってしまったということです。
実行中の様子をよく見てみると、実行中のブロック群はぼやっと黄色に光りますが、「緑の旗がクリックされたとき」に続くブロック群は、「はい」としゃべる時に光るだけ。その後、頭をタッチすると、「頭を触られたが起きたとき」に続くブロック群は光りますが、「緑の旗がクリックされたとき」ブロック群は一切光りません。
謎は全て解けた!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
正解:緑の旗がクリックされた時点で、「緑の旗がクリックされたとき」ブロックに続く一連のブロックの処理が全て実行し終わっていた。
緑の旗がクリックされた時点では、回数は「0」なので、「もし〜なら」ブロックの条件にある、「回数=1」や「回数=2」が即座に違うと判定され、実行完了。頭をタッチした時には、既に「もし〜なら」ブロックの実行は終わっているので、Pepperは何も動いてくれない。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
じゃあどうしたら、頭をタッチする度に違う動きをしてくれるのか。
頭をタッチされた後、回数がカウントアップされた後に、回数が「1」なのか「2」なのかを判断するようにしましょう!
こちらが、期待通りに動いてくれるプログラムです。

ぜひ、Robo Blocksで動かして試してみてください!
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ソフトバンクロボティクス株式会社 ホームページ
https://www.softbankrobotics.com/jp/
Pepper for Education
https://www.softbankrobotics.com/jp/product/education/
STREAMチャレンジ
https://www.softbankrobotics.com/jp/product/academy/stream/
━━━━━━━━━━━━━━━━━━━━Pepperブログ編集部━┛