先日の「小学生プログラミング教室」の記事で紹介したGoogleのBlocklyには、Blockly Gamesというウェブサイトがあり、Blocklyでプログラミングを学ぶための課題となるゲームを集めています。
このBlocklyゲームで最初にぶつかるハードルは、迷路のレベル10です。この迷路はプロでも最初は解くのに苦労するほど難しいのですが、今回は Gamejp24h.comが解いてみようと思います。
とはいえ、この質問をGoogleで検索すると、実は似たような答えが結構出てきます。さて、答えはこうです。
しかし、ご覧の通り、この答えはゴールにたどり着くまでにかなり遠回りをしますので、今回は最短ルートでゴールにたどり着く別の答えを作ってみます。
ブロック リー ゲーム 答え
1. GoogleのBlocklyゲームの迷路レベル10を解く。最短ルート編。
このような処理を作るコツは、共通点を見つけることだと思います。まずは共通点を見つけて、それを解決する方法を考えます。
共通点を見つけて団結する。この迷路のポイントは「コーナー」です。
まず、この迷路のコーナーがどのようなものか見てみましょう。
最短ルートを取ると、5回曲がらなければなりません。
それぞれの曲がり角は、次のように言葉で表すことができます。
前に進んで左に曲がり、左に曲がることができます。
すべての方向に進んで右に曲がることができるコーナー
前に進んで左に曲がり、左に曲がることができます。
左にも右にも行けるコーナー
右にしか曲がれないコーナー
さて、この5つの曲がり角をまとめるのは難しいですが、次の3つにまとめられると思いませんか?
前進できるが左に曲がる必要がある (赤枠)
前進できるが右に曲がる必要がある (青枠)
前進できず左か右に行く必要があるコーナー (緑枠)
さらにまとめると:
前進できるが左か右に行く必要があるコーナー (赤枠)
前進できないが左か右に行く必要があるコーナー (緑枠)
このように、共通点を探して単純化することで、条件分岐の要素を見つけることができます。
上記の 2 つのケースでは、条件分岐で最も重要なポイントは前進できるかどうかであることがわかります。
2. 共通点をプログラムに組み込む
では、前のセクションでまとめた共通点をプログラムに組み込んでみましょう。
まず当然ですが、「ゴールまでの繰り返し」の中で「前に進めますか、進めませんか?」という問題があります。
次に、前に進むことを推奨する場合に限って考えると、2つ目のコーナーでは、どの方向にも行ける状態なので、右を選ぶことを優先しなければなりませんが、3つ目のコーナーでは、右に行くのは行き止まりなので、左に行きます。
この2つのコーナーへの取り組み方を考えると、「まず右を確認して、前に進めそうなら前に進み、そうでない場合は左に進む」というパターンを作ることができます。
では、まったく前に進めない場合を見てみましょう。
左にも右にも行けるコーナーで左折できるコーナー
右折しかできないコーナー
ここでのポイントは、上部の曲がり角です。
右折はできるが、右折はできない。
しかし、迷路オブジェクトには「これをしない」という選択肢がないので、ここではまず「左に曲がれるなら左に行く」、次に「左に曲がれないなら右に行く」と決めます。
これをプログラムにすると、ブロック図は次のように構成されます。
もちろん前に進まなければなりませんので、できるかできないかを決めた後は、最終的に向かう方向に一歩ずつ進んでください。
動かしてみましょう
では、作成したプログラムを実行して結果を確認してみましょう。これで、遠回りせずに目的地にまっすぐ向かうことができます。
条件分岐が増えたためJavaScriptの行数は増えましたが、迷う心配がなくなったのですっきりしました。
他の場所を探せば答えは見つかると思いますので、面白かったらぜひ別の方法も試してみてください!これでこの記事は終わりです。最後までお読みいただきありがとうございました。