4章 条件分岐
周辺情報を使って「もし〇〇なら、こう動く」という判断をするブロックが「もし〜なら」ブロックです。3章で「調べる」方法を学んだので、この章ではその結果をもとに「判断して動く」方法を学びます。
3-1 もし〜なら、そうでなければ(if〜else)
課題:上のマスがブロックかどうかで、動く方向を自動的に切り替えるプログラムを作ろう。「上がブロックのときは別の方向へ、そうでないときは上へ」進むようにしたい。
ステージ3-1のマップとクリア条件
| クリア条件 | 内容 |
|---|---|
| アイテム | 1個ゲットする |
| ブロック数 | 7個以下 |
| ターン数 | 100ターン以内 |
黄色の枠が自分(Cool)のスタート位置です。すべての条件を同時に満たすとクリアです。
💡 考えるヒント
- 3章で学んだ「周辺情報を取得する」ブロックと、「もし〜なら」ブロックを組み合わせます。
- 「もし〇〇なら」の条件部分には、周辺情報の「上」がBlockかどうかを判定する部品がはまります。
- 条件が成り立たなかったときの動きも指定したい場合、「もし〜なら」ブロックには続きの部分が用意されていないか、ツールボックスを確認してみましょう。
- この判断を1回だけでなく毎ターン行うには、全体をどんなブロックで包む必要があるでしょうか(2章で学んだ「繰り返す」ブロックの、回数を指定しないタイプを思い出してみましょう)。
まずは自分で「もし〜なら、そうでなければ」の形を組んでみましょう。
解答例
解答例を見る
「上がブロックなら右へ、そうでなければ上へ進む」という判断をしたいとき、「もし〜なら」ブロックの条件部分に「自分の上のマスがBlockか」を入れ、「実行」の中に「右へ移動」を、「そうでなければ」の中に「上へ移動」を入れます。さらに全体を「ずっと繰り返す」ブロックで包むことで、毎ターンこの判断を繰り返し行うプログラムになります。
「ずっと繰り返す」で包む意味
2章で学んだ「〇回繰り返す」は、回数が決まっている繰り返しでした。しかし対戦は何ターン続くか事前にはわかりません。「ゲームが終わるまでずっと、毎ターン周りを確認して判断する」という動きを表現するために、回数を決めない「ずっと繰り返す」ブロックを使います。「ずっと繰り返す」の中に「周辺情報を取得する→もし〜なら判断する」という一連の流れを入れておくと、毎ターン最新の状況を取得し直してから判断できるようになります。これがCHaserで自律的に動くプログラムの基本形です。
注意したいこと
- 「そうでなければ」を付け忘れる:「もし〜なら」ブロックだけだと、条件が成り立たなかったときに何もしない(その場で待つ)動きになります。条件に当てはまらなかったら別の行動をしたい場合は、必ず「そうでなければ」の部分を追加しましょう。
- 条件の向きを逆にしてしまう:「上がブロックなら」のつもりが、ドロップダウンの選択ミスで別の方角や別の種類を指定していた、というのはよくある間違いです。条件ブロックの中身を、声に出して読み上げて確認する習慣をつけましょう。
- 「ずっと繰り返す」の中に周辺情報の取得を入れ忘れる:一度取得した周辺情報を使い回していると、状況が変わっても古い情報のまま判断し続けてしまいます。判断の直前に情報を取得し直しているか確認しましょう。
3-2 もし〜なら、そうでなくもし〜(if〜elif)
課題:3つの状況を優先順位付きで判定するプログラムを作ろう。「近くにアイテムがあれば取りに行く。なければ上がブロックかどうかを確認して、ブロックなら別方向へ、そうでなければ上へ進む」という判断をしたい。
ステージ3-2のマップとクリア条件
| クリア条件 | 内容 |
|---|---|
| アイテム | 6個ゲットする |
| ブロック数 | 7個以下 |
| ターン数 | 100ターン以内 |
黄色の枠が自分(Cool)のスタート位置です。すべての条件を同時に満たすとクリアです。
💡 考えるヒント
- 条件が2つ(if〜else)ではなく3つ以上になるとき、「もし〜なら」ブロックには条件を追加できる仕組みがあります。ツールボックスや、ブロック左上の設定アイコン(⚙)を確認してみましょう。
- 複数の条件を並べるとき、どの条件を1番上に置くかがとても重要です。「見つけたら絶対に優先したいこと」と「それ以外のときの判断」、どちらを先に確認すべきか考えてみましょう。
- 条件は上から順番に調べられ、最初に当てはまったものだけが実行される、という性質を思い出しましょう。
自分なりの優先順位で条件を並べてみて、意図どおりに動くか確認してから、解答例を見てみましょう。
解答例
解答例を見る
このステージでは、次の3つの条件を上から順番にチェックします。
- 左にアイテムがある → 取りに行く
- (1でなければ)上がブロック → 右へ
- (どちらでもなければ)それ以外 → 上へ
条件の並べ方が結果を左右する
たとえば「左にアイテムがあり、かつ上もブロックである」という状況を考えてみましょう。もし条件の順番を逆にして「上がブロックか」を先に判定してしまうと、本当は取りに行きたかった左のアイテムを無視して、右へ逃げてしまいます。「もし〜なら、そうでなくもし〜」ブロックは、上から順に調べて最初に当てはまったものだけを実行し、それ以降の条件は一切チェックしません。つまり、優先したい条件ほど上に置く、というのが基本ルールです。CHaserでは「アイテムを取れるチャンスは逃したくないが、危険(ブロックとの衝突や自縛)は絶対に避けたい」という場面が多いので、どちらをどれだけ優先するかを意識して条件を並べる練習をしておくと、後の章の複雑な判断にも役立ちます。
演習問題
- 「右にアイテムがあれば右へ、そうでなく下がブロックなら上へ、それ以外は下へ」という判断を、「もし〜なら、そうでなくもし〜、そうでなければ」の形で組んでみましょう。
- 3-2の例で、もし条件1と条件2の順番を入れ替えたら、どんな場合に結果が変わってしまうか、具体的な状況を1つ考えてみましょう。
付録2への案内:3章・4章に対応するステージ3は全6課題あります。本文で扱った3-1・3-2に加えて、3-3「アイテムをたどってみよう」、3-4「周りだけじゃわからない?」、3-5「ジグザグの迷路を進もう」、3-6「市松模様の壁を進もう」の解答例を、付録2「ステージ3 フィールド情報と条件分岐」に掲載しています。条件分岐をいくつも積み重ねると、どのくらいの規模のプログラムになるのかを実感できます。