さて、Google Blockly Games 迷路編もいよいよ最終回。気合を入れて行こう!
[ミッション9]
道の分岐が増えている、迂闊にプログラミングするとおかしなところに行ってしまいそうだ。
まず着目すべきは新たに加わったブロックだ。
今までのifブロックに「それ以外」という項目が増えている。
これは一般的なプログラミングではif~else文と呼ばれているものだ。
「もし〜ならば処理1そうでなければ処理2」
と条件のYesNoによって2つの処理に分岐できる。
上のブロック例でいうと
もし「まっすぐ進める」なら
実行と書いてある上の挟み込み部分
そうでなければ
それ以外と書いてある下の挟み込み部分が実行される。
if~else文の大事なポイントをいう。
「必ずどちらか一方のルートを通る」
両方通ることもないし、どちらも通らないということもない。
これはとても大切なところだ。しっかり肝に命じよう。
以上を踏まえた上で改めてミッションを見てみよう。
「まっすぐ進めたら進む、そうでなければ左を向く」(それを繰り返す)
というプログラミングをすればよさそうだ。
出来たであろうか?ほかの組み合わせでも実現できるが、if~else文を使うとシンプルに構築できることがわかる。
[ミッション10]
さあいよいよ最終問題だ。
みるからに場合分けが多そうな問題だ。
漠然と眺めていても始まらない。おじさんの通る交差点に着目してみよう。
①の交差点は
まっすぐ進めて、左も向けるが、右は向けない。
このパターンでは左を向けば良さそうだ。
これを以下のように記す。
前:OK 左:OK 右:NG => 左
同様に②の交差点は
前:OK 左:OK 右:OK => 右
③の交差点は①とまったく同じだ。
④の交差点は
前:NG 左:OK 右:OK=> 左
⑤の交差点は
前:NG 左:NG 右:OK => 右
これで右に向くパターンと左に向くパターンを網羅できた。
if~else文を学んだのでまずは前に行けるかで分岐させる。
まっすぐ進めるパターンを抽出すると
前:OK 左:OK 右:NG => 左
前:OK 左:OK 右:OK => 右
左に向けて右に向けないところでは左
左に向けて右にも向けるとこでは右
を向けばいいことがわかる。
同様にまっすぐ進めないパターンでは
前:NG 左:OK 右:OK=> 左
前:NG 左:NG 右:OK => 右
まっすぐ進めないパターンでは右か左をむくことが確定しているので
左に向ければ左
そうでない時には右を向けばいい。
よって
このようにプログラミングすれば到着できる。
今回のように問題が複雑になってきた時には場合分けして考えると解決の糸口が見つかる。
なお、この問題は他にも様々な解法がある。ぜひ試して見てもらいたい。
今回は最短ルートで実現したが、回り道をしてよいならもっと少ないブロックで実現できる。そちらもやってみるといいだろう。
以上でGoogle Blockly Gamesの迷路編は終了である。上から下に処理が流れていく中で、繰り返し文やif文を使って処理を制御することを学んだ。
コメント