8章 ブロック設置とアタック攻撃
第1部5章で学んだとおり、相手のいるマスにブロックを設置すると「アタック勝ち」になります。この章では、実際にブロックを設置して相手を攻撃するプログラムの組み方を学びます。
ブロック設置コマンド:put
まず、ブロックを設置する命令そのものを確認しましょう。移動が「〇〇方向に移動する」ブロックだったのに対し、ブロック設置には別の専用ブロックが用意されています。ツールボックスから探してみましょう。
「〇〇方向にブロックを設置する」ブロックを使うと、指定した方向の隣接マスにブロックを置くことができ、上下左右4方向に設置可能です。
改めて確認しておきたいのは、この1つのブロックが持つ2つの意味です。相手のマスに設置すればアタック勝ちですが、自分の逃げ道をふさぐようにブロックを置いてしまうと、後で自分が動けなくなる原因にもなります。「攻撃の武器」であると同時に「使い方を誤ると自分を苦しめる諸刃の剣」でもあることを、常に意識しておきましょう。
6-1 相手にブロックを設置しよう
課題:右隣に相手がいればブロックを設置して撃破し、それ以外のときは右へ移動するプログラムを作ろう。
ステージ6-1のマップとクリア条件
| クリア条件 | 内容 |
|---|---|
| 勝ち方 | 相手(Hot)にブロックを置いて撃破する |
| ブロック数 | 8個以下 |
| ターン数 | 100ターン以内 |
| 相手 | CPU(レベル1)がいる |
黄色の枠が自分(Cool)のスタート位置です。すべての条件を同時に満たすとクリアです。
💡 考えるヒント
- 組み立て方は4章で学んだ「もし〜なら、そうでなければ」の形とよく似ています。何が変わるでしょうか(ヒント:条件の中身が「マスの種類がBlockかどうか」ではなく、別の種類になります)。
- 7章で学んだ「自分のターンを待つ」ブロックを、どこに置く必要があるか思い出しましょう。
- 「実行」の中身は移動ではなく、設置のブロックになります。
自分で条件分岐と設置ブロックを組み合わせて挑戦してみましょう。
解答例
解答例を見る
このステージの課題は「右隣に相手がいればブロックを設置して撃破! それ以外は右へ移動」というものです。組み立て方は3章・4章で学んだ「もし〜なら、そうでなければ」の形とほぼ同じで、条件が「マスの種類がBlockかどうか」から「マスの種類がEnemyかどうか」に変わっただけです。7章で学んだ「自分のターンを待つ」ブロックを繰り返しの中に入れ、毎ターン最新の周辺情報をもとに、右隣が相手かどうかを判定します。相手も毎ターン自由に動くので、一度だけの判定ではなく、「ずっと繰り返す」の中で判定し続けることではじめて相手の動きに対応できます。
6-4 動く相手にブロックを設置しよう
課題:相手は動き回っていて、上下左右どこから来るか分からない。いずれかの方向に相手が来たらすかさずブロックを設置し、来ていなければ相手を追いかけて動こう。
ステージ6-4のマップとクリア条件
| クリア条件 | 内容 |
|---|---|
| 勝ち方 | 相手(Hot)にブロックを置いて撃破する |
| ブロック数 | 実質、制限なし |
| ターン数 | 30ターン以内 |
| 相手 | CPU(レベル2)がいる |
黄色の枠が自分(Cool)のスタート位置です。すべての条件を同時に満たすとクリアです。
このステージのフィールドは、中央に3×3のブロックの輪があり、その左右にCoolとHotが立っています。輪のまわりをぐるぐる回りながら追いかけっこをする形になります。しかも残りターン数は30と短く、のんびり探している余裕はありません。
💡 考えるヒント
- 6-1では「右」だけを確認していましたが、今度は上下左右の4方向すべてを確認する必要があります。
- 1つの方向について、判断は3通りあります。①その方向に相手がいる → ブロックを置く ②その方向が空いている → そちらへ進む ③その方向がブロック → その方向はあきらめて、次の方向を調べる。この3通りを「もし〜なら、そうでなくもし〜、そうでなければ」で書けないでしょうか。
- ③の「次の方向を調べる」は、「そうでなければ」の中に、次の方向についての同じ判断をまるごと入れることで表せます。方向の数だけ、入れ子が深くなっていきます。
- 一気に完成させようとせず、まず1方向分だけを作って動きを確認し、それから残りの方向を1つずつ足していくと組み立てやすくなります。
- どの深さで判断していても、行動する前には毎回「自分のターンを待つ」を通る必要があります(7章)。
自分なりに4方向分の判定を組み合わせて挑戦してみましょう。
解答例
解答例を見る
これまでのステージより一段階複雑になります。「相手がいれば置く/空いていれば進む/ブロックなら次の方向へ」という3択の判断を、下→右→上→左の順に、「そうでなければ」の中へ入れ子にして4段重ねる、という組み立てになります。1段深くなるたびに、調べる方向が1つずつ切り替わっていきます。
実際に組み上がったブロックの全体像は、付録2「チュートリアル解答例集」の6-4に掲載しています。ここまで説明した骨組みが、そのままブロックの形になっていることを確認してみてください。
注意したいこと
- 4方向のチェックを一部省略してしまう:上下左右のうち、たとえば「上」の確認を忘れると、上から来た相手を取り逃してしまいます。4方向すべてを1つずつ、抜け漏れなく確認しましょう。
- ブロックを置く方向と相手がいる方向を取り違える:「右に相手がいるなら、右にブロックを置く」というように、判定した方角とブロックを置く方角を必ず一致させましょう。
- 入れ子が深くなって、今どの方向を調べているか見失う:4段も入れ子にすると、画面の右のほうへどんどんブロックがずれていきます。1段ずつ「これは何方向を調べているブロックか」を指で追って確認しましょう。組みながら不安になったら、いったん実行して動きを見るのが確実です。
- どこかの分岐で「自分のターンを待つ」を入れ忘れる:入れ子の各段の最後に「自分のターンを待つ」が必要です。1か所でも抜けると、その分岐に入ったときだけ情報が更新されなくなります。
演習問題
- 6-1のプログラムに、上下左右すべての方向を確認する条件を追加し、「上下左右いずれかに相手がいれば設置する」プログラムに拡張してみましょう。
- アタック勝ちと衝突(敗北)は、どちらも「ブロックのあるマスに関係する」できごとです。この2つを混同しないために、どんなことに注意すればよいか考えてみましょう。
付録2への案内:ステージ6は全4課題あります。本文で扱った6-1・6-4に加えて、6-2「広いマップでブロックを置こう」、6-3「相手にブロックを置いてみよう2」の解答例を、付録2「ステージ6 ブロック設置とアタック」に掲載しています。この2つは、6-1から6-4へ向かう階段のちょうど中間にあたります。とくに6-2は、相手がはじめて動き回るステージです(6-1と6-3の相手は動きません)。プログラムの形は6-1とほとんど同じなのに、たった1個ブロックを足さないと絶対にクリアできない、という不思議な課題になっています。その1個が何なのかは、ぜひ自分で考えてから付録2を見てください。