【発展編】15-b 子犬と遊ぼう(2)

image-1

Q1. ☆問題☆

「背中をなでられたらハートの目を表示する」ようにするために、上のプログラムを作ったんだけど、一度ハートの目が出たら消えなくなってしまったよ。どうすれば「背中をなでたときだけハートの目を表示する」ようにできるかな。次の中から、もっともふさわしいものを1つ選んでね。

  • ループブロックをはずす
  • 「表示のリセット」をいれる
  • タッチセンサーの条件を「バンプ」にする
  • 表示ブロックの次に、1秒の待機ブロックを入れる

正解

  • ループブロックをはずす
  • 「表示のリセット」をいれる
  • タッチセンサーの条件を「バンプ」にする
  • 表示ブロックの次に、1秒の待機ブロックを入れる

解説

「「表示のリセット」をいれる」以外は、どれもうまくいかないよ。

 

「ループブロックをはずす」でも消えることはあるけど、またプログラムを実行しなければならないよね。
それに、1つの画面に2つ以上のプログラムを作っていると、次のプログラムの実行を待っているじょうたいになるから、
やっぱりハートの目は消えない。
実際にためしてみよう。

image-2

Q2. ☆問題☆

1問目で作ったプログラムをデバッグしたら、①のプログラムにした人と、②のプログラムにした人がいたよ。どちらも「なでている間は目が出て、手をはなしたら目が消える」という動きをするけど、②のほうがよいプログラムといえるんだ。なぜだろう。その理由としてもっともふさわしいと考えられるものを選んでね。

  • たくさんのプログラミングブロックを使った方がよいプログラムになるから
  • ①のプログラムでは「目が出て消えて」を目に見えないはやさでくり返しているから
  • ①のプログラムがうまくいったのはぐうぜんで、次に実行するとうまくいかなくなるから
  • ②のプログラムのほうが気合いを入れて作っているから

正解

  • たくさんのプログラミングブロックを使った方がよいプログラムになるから
  • ①のプログラムでは「目が出て消えて」を目に見えないはやさでくり返しているから
  • ①のプログラムがうまくいったのはぐうぜんで、次に実行するとうまくいかなくなるから
  • ②のプログラムのほうが気合いを入れて作っているから

解説

①のプログラムと②のプログラムのちがいは、「タッチセンサーがおされなくなったら」という待機ブロックが入っているかどうか、だよね。
タッチセンサーをおしっぱなしにしているとき、それぞれのプログラムはどう動くのだろうか。

 

①のプログラムは

タッチセンサーがおされる → ハートの目を表示 → 目を消す → タッチセンサーはおされているから、また目を表示 → 目を消す → ……

このように動く。つまり、「目が出て、消えて」をものすごいスピードでくり返しているんだ。だから、今回はうまくいっているけど、この仕組みだと本当は画面がちかちかしてしまうおそれがある。

 

ところが、②のプログラムは

タッチセンサーがおされる → ハートの目を表示 → タッチセンサーがはなされるまで表示し続ける → はなされた → 目を消す

という動きをする。つまりこちらのほうがよけいな動きをしていないことになる。「出て、消えて」というくり返しではないから、ちかちかしてしまうこともない。

 

理由があって①のようなプログラムを作ることもあるけれども、できるだけ、よけいな動きをしないプログラムを作るほうがいいよね。だから②のプログラムのほうが「よいプログラム」といえるんだ。

Q3. ☆問題☆

パピーにはいろいろなセンサーを取りつけたよね。次のうち、今回使用したパピー・ボットにできることはどれだろうか。1つ選んでね。

  • 顔の前に手をかざすと座る
  • 部屋の明かりが消えるとねそべる
  • おいしそうな匂いがするとほえる
  • 「おすわり」と言えば座る

正解

  • 顔の前に手をかざすと座る
  • 部屋の明かりが消えるとねそべる
  • おいしそうな匂いがするとほえる
  • 「おすわり」と言えば座る

解説

「顔の前に手をかざすと座る」…今回作ったパピー・ボットでは難しそうだ。でも、たとえば超音波センサーをつければ、
こうした動きもさせられそうだね。

「部屋の明かりが消えると寝そべる」…カラーセンサーの設定を「周辺の光の強さ」に変えればできるよね。

「匂い」や「音」を感知するセンサーはEV3には含まれていないから、「においでほえる」「おすわりといわれて座る」は、できないよ。