BricRoboでブロック並べを解いてみる(5) – BricRoboモデルへの落とし込み

さて、画面上のサークルの1つ取り上げると、下の図のような形をしてます。真ん中の四角はサークル、上下左右に移動できる経路。迷路法では距離の数字を上下左右に書き込んでいき、その数字を頼って経路を求めたり、数字をクリアしたり、ローバーを移動させたり。なので、今回の考え方は、サークルに能力を持たせて、サークルがいろんな情報を管理して、お互いにやり取りすることで、迷路法を実現させようというもの。
サークルは勝手に動いたり判断しないので、外部から命令を与える必要が。そのために、青のコマンドを外部から与えます。コマンドには情報が付いていて、サークルはコマンドと情報を元に、なにかする。それを全部のサークルに一通り行き渡らせるために、処理したコマンドを次のサークルに投げる。そのとき情報は変化しているかもしれない。
例えば、「ローバーのいる場所を教えて!」というコマンドがあり、情報に-1(知らないという意味)を設定して、サークルに流す。受け取ったサークルは「おれ、知らない、次へ」とコマンドを次のサークルに流す。知っているサークルは「俺のところに居る、10番のサークルだよ」と情報に10をセットして次へ流す。 そうすると、巡って最後に流れてきたコマンドには情報に10が書いてあるので、10番のサークルにローバーがいるな! と分かるわけです。
別の例で言うと、「距離計測してるんでよろしく」というコマンドを作り流す。貰ったサークルは赤矢印の自分の方にどこからか番号が流れてきたかなぁ、と見てみる。 「あ、5が届いてるわ。じゃ、自分の距離は5とおぼえて。+1して6を緑矢印の向きへ流さなきゃ」 これをすべてのサークルが繰り返すと、迷路法でやった数字を埋めるのと同じことができる。
こんなコマンドをたくさん作って、サークルが受け取ったときにどんな処理をするかをサークルに仕込んでおくわけです。
Zukai_2
この方式のいいところは、上下左右という形に左右されない。星型につながっていてもいいし、6方向でも8方向でもいい。どんな形にしてもサークルのやることは変わらないところです。これ大事ね。 それからサークルにさせたいことが増えたら、コマンドを増やして対応する。これもアーキテクチャが変わらないから大事。
そこで図の下側になるんですが、BricRoboモデルの1つのサークルへ対応させてものが、これ。BricRoboモデルの読み方を知らない人のために、ちょっとだけ解説しますが、青と赤の小さい四角はポートと呼んで、データをやり取りする接続口です。青はデータ型といって、ポートに届いた情報を何回読み出しても読み出せる性質。赤はイベント型といって、ポートに届いた情報を読み出すと、空っぽになって2回目以降は届かない限り読めない性質。
そして白抜きの△は受信、塗りつぶし▲は送信の性質。 このブロックがたくさん繋げて4x4の形にしたのが、前の章で出てきた、あの複雑に線が引かれたBricRoboモデルなわけです。 そして、コマンドを画面から入れるためのブロックが左側の黄色ブロック。最後に流れ着いたコマンドを拾い上げるのが右下の緑ブロックってわけ。
なんとなく、仕組みは分かってもらえましたかね?
Field
>>BricRoboでブロック並べを解いてみる(6) – BricRoboモデルとソースコード一式