次は前を走る車にぶつからないようにするプログラムを作ってみましょう。
本物の車の場合はカメラやセンサーによって車のまわりにある物の距離や種類や速度などを手に入れます。 このシミュレータでは「左センサー」「前方-左センサー」「前方-右センサー」「右センサー」の4つの変数ブロックでその方向にいる他の車までの距離(メートル)を手に入れられます。
なお物の種類や速度などの情報は省略しています。
ではまた「もし〜なら」ブロックの条件をミーシー思考とミニ・マックス思考を使ってかんがえてみましょう。
まず日本では車は左車線を走るように法律で決められていますので、使う情報は「前方-左センサー」だけです。
目的:前の車にぶつからない
必要な情報:「前方-左センサー」
必要で無い情報:その他の情報
よって信号の時と違ってとてもシンプルな表になります。 なお「前方-左センサー」が15メートルより大きい時は"遠い"、15メートル以下で10メートルより大きい時は"近い"、10メートル以下の時は"目の前"ということにしました。
「前方-左センサー」 | 「仮のスピード」 |
---|---|
15 より大 (遠い) | 50 |
15以下、10より大 (近い) | 20 |
10以下 (目の前) | 0 |
信号の時と同じ様に、この表を「もし〜ならば、でなければ」ブロックを使って置き換えると次のようになります。
「前方-左センサー」 | 「仮のスピード」 | |
---|---|---|
15 より大 (遠い) | 50 | |
でなければ | ||
10より大 (近い) | 20 | |
でなければ (目の前) | 0 |
これで「もし〜なら」ブロックの条件が分かりましたので早速プログラミングしてみましょう。
(注意) 走行画面は動作が重いので、プログラミングはストップボタンを押してからタイトル画面でしてください。
まず「前の車にぶつからないようにする」というオリジナルブロックを作ります。 このブロックは繰り返し使いますので「画面を再描画せずに実行する」をチェックしてください。
「前の車にぶつからないようにする」ブロックの中身は次のようになります。 やはり表の内容と「もし〜なら」ブロックの条件がまったく同じになっていますね。
(注意) ブロック内の数字は半角英数モードで入力してください
最後のミニ・マックスの部分も忘れずに作ってください。さっき作ったものを複製してコピーすると楽です。
あとは「速度を決める」ブロックを次のように変更すればOKです。
ただこのままでは実行しても車が出ませんので、「スタート」ブロックで車をONにするのを忘れないで下さい。
では「緑の旗」ボタンを押してテストしてみましょう。 正しく動いたら「ストップ」ボタンを押してタイトル画面に戻って下さい。