Pepperの九九出題アプリを作ってみよう③繰り返し出題し、繰り返し聞き取れるようにしよう【ミワ ムラタのRobo Blocks奮闘記】
こんにちは!Robo Blocksチームのムラタ ミワです。プログラミング初心者ながら、プログラミングツールRobo Blocksを担当しています。
さあ、九九出題アプリを作ってみようシリーズの4回目です。これまで、1. ランダムでかけ算九九の出題をし、2. ユーザーの答えを聞き取るロジックを作り、3. Pepperでもちゃんと聞き取れるように工夫してきました。今までの記事も是非ご覧ください!
今回は、複数問のかけ算を繰り返し出題できるプログラムに更新していきたいと思います!
前回までは1問で終わりだったので、あっさり終わってしまいます。九九は81問もあるので、何問か連続で出題してみましょう。より実用的なアプリケーションとなり、使う人の満足度も上がるはずです!
ゴール
かけ算の問題を複数問繰り返し出題する
ポイント
「繰り返す」ブロックを使ってみよう
言葉を聞き取るまで待とう
ユーザー体験を向上させるちょっとした工夫
作ってみよう
1.「繰り返す」ブロックを使ってみよう
前回までに作成したプログラムはこちら。九九を1問出題して、ユーザーの答えを聞き取り、正解を発表します。
九九の問題を複数問出題するにあたっては、このロジックを繰り返すことになります。しかし、同じロジックをコピペして繋げていくのは、長くなって見づらいですし、修正の必要が発生したときに何箇所も同じ修正をする必要があり、非効率かつミスする可能性が高まります。
そこで使えるのがこちら!「繰り返す」ブロックです。「繰り返す」ブロックを使えば、無限に繰り返したり、ある条件になるまで繰り返したりも可能です!同じ処理を繰り返す場合は、このブロックを使ってみてください。今回は、単純に回数を決めて繰り返すことにします。2つ目の「X回繰り返す」ブロックを使いましょう。
早速、九九のプログラムに組み合わせて動かしてみると、、
あれ、
ユーザーの言葉を聞き取る前に次々出題が進んでしまいます。1問出題ごとに、言葉を聞き取るまで待つ必要がありそうです。
2. 言葉を聞き取るまで待とう
言葉を聞き取るまで待つ、正確には、言葉を聞き取って「答え」を発表し終えるまで待つ処理を作ります。言葉を聞き取ってすぐに次の出題に進んでしまうと、「アタリ」/「ハズレ」音と答えの発表が終わる前に、次の出題が始まってしまうからです。
待つためには、当然、この「X秒待つ」ブロックを使います。
ただし、ユーザーが何秒で答えてくれるかわからないので、予め秒数を指定して待つことはできません。
そこでまた使えるのが「繰り返し」ブロックです!
言葉を聞き取って「答え」を発表し終えるまで「1秒待つ」を繰り返せば、ユーザーが答えるまでに何秒かかろうが対応できます!
さて、言葉を聞き取って「答え」を発表し終えたかどうかを判断するにはどうするか、、
変数を使って、答えが発表済みかどうかの目印をつけるのはどうでしょう?
例えば、
1.変数「答え発表済み」を作り、出題時に「0」を設定します。
2.「答え」を発表し終えたら、「答え発表済み」を「1」にします。
3.次の出題に進む前に、「答え発表済み」が「1」になるまで待つようにします。
ちなみに、このような条件や状態を判断するために使われる変数をフラグと言うそうです。
ブロックを並べてみるとこんな感じ。
A:「答え発表済み」を、まだ発表していないという意味で「0」にします。聞き取り開始前に「0」にしておきます。
B:「答え発表済み」が、発表済みであることを示す「1」になるまで、「1秒待つ」を繰り返します。
C:言葉を聞き取り、答えを発表し終えた後、「答え発表済み」を「1」にします。これを受けて、Bの1秒待つループは終了し、次の出題に移ります。
早速動かしてみると、、
うまくいきました!これで、九九の問題を複数問繰り返し出題できるようになりました!
3. ユーザー体験を向上させるちょっとした工夫
ここからは、繰り返し出題するにあたって、ユーザーにより気持ちよく使ってもらうための、ちょっとした工夫をご紹介します。
上記でBとしてご説明した部分ですが、「答え発表済み」が「1」になったかどうかを、1秒ごとにチェックしています。つまり、答えを発表し終えても最大1秒間待たされることになります。答えを発表し終えたら即座に次の問題に進みたい場合は、「1秒待つ」をもっと短く、例えば「0.1秒待つ」などにすると、即座に次の問題に進むことになります。ただし、秒数を短くすればするほど、CPUが忙しくなるので、パソコンやPepperに負荷をかけることになります。
逆に、答えを発表し終えてから、間を空けて次の問題に進みたい場合は、「X秒待つ」繰り返しブロックの後に、適切な間隔と思われる秒数で「X秒待つ」ブロックを追加します。
また、言葉を聞き取ってから「アタリ」音、「ハズレ」音を鳴らすまでにも1拍空けた方が気持ちいいようであれば、聞き取り終了の後、音を再生する前に「X秒待つ」を追加します。
1秒加えただけでも印象がだいぶ変わります。出題→答え→出題→答え、、、という繰り返しをテンポ良く進められるように工夫してみてください!
まとめ
「Robo Blocksで九九で出題アプリを作ってみよう」シリーズの4記事目になります。ブロックの塊がだいぶ長くなってきました!
今回は、「繰り返す」ブロックを使って、プログラムの効率化を図ったり、言葉を聞き取って反応し終えるまで待つ処理を作ったりしてみました。
言葉を聞き取って反応し終えるまで待つ処理は、ユーザーと何ターンもやりとりを繰り返すのに便利です。やりとりを繰り返すやり方はこちらの記事でも別の方法をご紹介しています。プログラムの内容によって適したやり方が異なると思いますので、是非参考にしていただければと思います。
今回のポイント
「繰り返す」ブロックを使ってみよう
言葉を聞き取るまで待とう
ユーザー体験を向上させるちょっとした工夫
前回の記事
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ソフトバンクロボティクス株式会社 ホームページ
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ブログ編集部━┛