10章 総合演習:障害物を回避しよう
8-1 障害物を回避しよう
ステージ8-1のマップとクリア条件
| クリア条件 | 内容 |
|---|---|
| アイテム | 1個ゲットする |
| ブロック数 | 実質、制限なし |
| ターン数 | 100ターン以内 |
黄色の枠が自分(Cool)のスタート位置です。すべての条件を同時に満たすとクリアです。アイテム・ブロックの位置は毎回変わります(マップの半透明の表示は、出現位置の候補です)。
ここまでの第2部で学んだ知識を総動員して、自分の力で組み立てる、いわば「卒業試験」のようなステージです。本文では、あえてブロックの並びを先に見せず、課題の分解と組み立ての手順だけを示します(完成形は付録2に掲載しているので、自分で挑戦したあとで見比べてください)。
課題は次のようなものです。
下へ進み、ブロックにぶつかったら、下にブロックがなくなるまで左へ移動して再び下へ移動。左へ移動した歩数を変数「移動量」にカウントしておいて、右にブロックがなければ「移動量」分だけ中央に戻る。
一見複雑に見えますが、分解すると、これまで学んだ道具の組み合わせでできています。
- 下へ進む(1章:移動)
- 下がブロックかどうかを確認する(3章:フィールド情報、4章:条件分岐)
- ブロックがなくなるまで左へ移動し続ける(2章:繰り返し、4章:条件分岐)
- 左へ動いた回数を数える(9章:変数)
- 右にブロックがないか確認してから、数えた回数だけ中央に戻る(3章・4章・9章の組み合わせ)
- これを毎ターン、相手の動きも見ながら繰り返す(7章:get_ready)
組み立てのヒント
いきなり全部を組み立てようとせず、次のような手順で少しずつ進めるのがおすすめです。
- まず紙に、フィールドの絵とキャラクターの動きを実際に描いてみて、「どういう手順で動けばよいか」を日本語の文章で書き出す。
- その日本語の手順を、1行ずつ「これは移動か」「これは条件分岐か」「これは繰り返しか」「これは変数が必要か」と分類する。
- 分類したパーツを、今まで組んだステージの構造を参考にしながら、1つずつBlocklyのブロックに置き換えていく。
- 一度に全部を組もうとせず、まず「下へ進んで、ブロックにぶつかったら止まる」だけを作って実行し、正しく動くことを確認してから、次の部分(左へ避ける)を付け足していく。
このように、大きな課題を小さな部品に分けて、1つずつ確実に動くことを確認しながら組み上げていく進め方は、プログラミング全般で使われる基本的な考え方です。難しく感じたときほど、一度に完成させようとせず、小さく分けて考えてみましょう。
演習問題
- 「移動量」変数は、何をカウントするために使われていますか。また、なぜその値を覚えておく必要があるのでしょうか。
- 「下にブロックがなくなるまで左へ移動」の部分を、これまで学んだどのブロック(繰り返し・条件分岐)を使って組み立てられるか、自分の言葉で説明してみましょう。
- 実際にBlocklyでこのステージに挑戦し、うまくいかなかった部分があれば、どこで詰まったかをノートに書き出してみましょう。
付録2への案内:8-1の完成形のブロック(51個)は、付録2「ステージ8 総合演習」に掲載しています。さらにその先には、本文では扱わなかった8-2「行き止まりを回避しよう」(173個)と、チュートリアル最終ステージの8-3「見つけた情報を記録しよう」(373個)の解答例もあります。ブロック数だけ見ると気が遠くなりそうですが、使われている道具は本文で学んだ移動・繰り返し・条件分岐・探査・変数・関数だけです。「自分にはまだ早い」と思わず、どんな道具がどう組み合わさっているかを眺めるだけでも、これから自分のプログラムを大きくしていくときの手がかりになります。
第2部のまとめ
第2部では、移動・繰り返し・条件分岐・フィールド情報・探査・ターンの仕組み・ブロック設置・変数と関数という、CHaserのプログラミングに必要な道具を一通り学びました。どのステージも、単独では難しくない小さな部品の組み合わせでできています。複雑に見えるプログラムに出会ったときは、「これはどんな部品の組み合わせでできているだろう」と分解して考える習慣が、今後もきっと役に立ちます。
第2部 確認クイズ
0章 Blockly基本操作
- つなげたブロックを外すときと、いらないブロックを消すときは、それぞれどこへドラッグすればよいでしょうか。
- 繰り返しブロックの「中」に別のブロックを入れるとき、見た目のどこで区別しますか。
1章 移動
- 「右方向に移動する」ブロックを1回実行すると、キャラクターは何マス進みますか。
- 「右×3 → 上×2」という経路を移動ブロックだけで表すには、ブロックが何個必要ですか。
2章 繰り返し
- 「2回繰り返す」ブロックの中に「右に3回移動する」繰り返しブロックが入っているとき、合計で右に何マス進みますか。
- 回数が決まっていない繰り返しを表したいとき、どのブロックを使いますか。
3章 フィールド情報を読み取る
- 「左下」を表す方角名は何でしょうか。
- フィールドのマスの種類は何種類あり、それぞれ何を表しているか説明してみましょう。
4章 条件分岐
- 「もし〜なら」ブロックだけで「そうでなければ」がない場合、条件が成り立たなかったときプログラムはどう動きますか。
- 「そうでなくもし〜」を複数並べたとき、いくつの条件が同時に実行される可能性がありますか。
5章 探査:近隣探査と遠方探査
- 近隣探査と遠方探査は、それぞれどんな形の範囲を調べますか。
- 遠方探査の結果で、「いちばん遠いマス」は何番目でしょうか。
6章 探査した情報で行動を決める
- 遠方探査の結果から「特定の位置」ではなく「含まれているか」を調べたいとき、どのような判定を使いますか。
- 自縛を避けるために、アイテムに向かう前にどんな確認をするとよいでしょうか。
7章 ターンの仕組みとget_ready
- 「自分のターンを待つ」ブロックは、待つこと以外にどんな役割を持っていますか。
- CoolとHotは、フィールド上でどのような順番で1手ずつ動きますか。
8章 ブロック設置とアタック攻撃
- ブロックを置くブロックは、どの方向に設置できますか。
- 「毎ターン相手の位置を確認し直す」必要があるのはなぜですか。
9章 変数と関数を活用する
- 変数と関数は、それぞれどんな目的のために使いますか。1文ずつで説明してみましょう。
- 関数を定義しただけで、呼び出さなかった場合、その中の処理は実行されますか。
10章 総合演習:障害物を回避しよう
- 大きな課題に取り組むとき、一度に全部を組み立てるのではなく、どのような手順で進めるとよいでしょうか。
- 8-1で使う変数「移動量」は、何を覚えておくための変数でしょうか。
(解答は付録1「確認クイズ・演習問題の解答」を参照してください。)
次の第3部では、本番のプログラミング画面と対戦ルームの使い方を学び、いよいよ実際の対戦に挑みます。