自分で進む道を選んで、勝手に動き回るとボットのプログラムを作ってみます。
ステージ上に青い線を描いておくと、その上を歩くロボットです。
工場なんかで働くロボットによくあります。
今回は画面上でスプライトが動くだけですが、本物のロボットも同じようなプログラムで動いています。
プログラムの概要
マップ上に青い線を描いておくと、その上を進むプログラムを作ります。
分かれ道があれば、ランダムに進む方向を決めて進みます。
今回はプログラムを単純にするために、曲がり角は直角のみにします。
プログラム
スプライト
用意するものはスプライト2つとステージ1つです。
ロボット
ステージの青い線の上を移動するロボットのスプライトです。
Scratchで用意されている絵を使います。
このロボットの場合、大きさを30ぐらいにしておきます。
センサー
ロボットが次に進む道が、どの方向に続いているのか調べるための周防ライトです。
正方形の絵を描いて用意しておきましょう。
8×8で作って、大きさ100で使っています。
ステージ
四角と直線を使って、道を作ります。
線の太さは15にしています。
ロボットの動き
ロボットに作りこんでいるプログラムは少しです。
一応、主役はロボットなので、プログラムの起動とセンサーの起動はロボットに持たせておきます。
センサーを起動して、行き先が決まったらセンサーの場所まで移動します。
これだけです。
センサーの動き
今回のプログラムはほとんどセンサースプライトの中に作っています。
大きく2つの仕事をしています。
一つ目(左の塊プログラム)
今のセンサーの位置から、15歩前、15歩右、15歩左の位置を調べて、青の道があるかを調べます。
二つ目(右の塊ブロック)
センサーが調べた情報から、進む先を決定します。
前、右、左に進む道が無ければ、進んできた道を戻ります。
リスト変数「方向」には複数の値を入れることができます。
前と右に道があれば1と2の値を入れます。
変数の中身は次の表ののようなパターンになります。
道が見つからない | 前に道がある | 前、右に道がある | 前、左に道がある | 右に道がある | 右、左に道がある | 前、右、左に道がある | |
1つ目 | 1 | 1 | 1 | 2 | 2 | 1 | |
2つ目 | 2 | 3 | 3 | 2 | |||
3つ目 | 3 |
進む先の調査
前、右、左を順番に調べていきますが、この塊で一つの方向を調べます。
まず、15歩先に動かします。
動いた先が青色だったらリスト変数「方向」に数字を追加します。
数字は、前方向に青い道があったら、1
右方向に青い道があったら、2
左方向に青い道があったら、3
を追加することにします。
調査が終わったら元の位置に戻します。
元の位置を起点に次に調査する方向に向きを変えます。
次に右側を調査して、その次に反対側を向いて左側の調査をしています。
進む先の決定
進む方向を決定します。
まず、前、右、左に道が無ければ反対方向を向いて、来た道を戻るようにします。
リスト変数「方向」に何も値が入っていなければ(「方向」の長さがゼロ)、道がなかったという事になします。
リスト変数に入っている値の個数をMAXにして乱数を作ります。
ランダムに進行方向を決めるためです。
1方向のみに道があるなら長さは1、2方向に道があれば2、3方向なら3の長さになっているはずです。
リスト変数に入っている値をランダムに取り出した結果、進む方向が決まるので向きを変えています。
最後に、15歩進めています。
進む方向がなかった場合もここできた道に15歩進めています。
このプログラムが終わったら、ロボットスプライトのプログラムに戻って、ロボットをセンサーまで移動させます。
後は、これを繰り返すことでロボットが動き続けます。
コメント