[ クリア条件 ]
ステージ上にあるスイッチを3個をすべてオープン
[ 使用するコマンド・条件式 ]
collectGem() moveForward() turnLeft() turnRight() toggleSwitch()
【攻略のポイント】コマンドを自作しよう
今回取り上げる「Creating?a?New?Function」の前のステージである「Compositing a New Behavior」(この特集では扱っていません)と同様に、ここではバイトに「右に曲がって」と命令するコマンドがありません。とはいえ、毎回左折を繰り返すコマンドをエディタに書き続けるのは、効率的とは言えません。そこで「Function(関数)」を使って一連の動作をまとめたオリジナルのコマンドを作ってみましょう。
コースを選ぼう
このチャレンジをクリアするための条件は、スイッチを3個をすべてオープンすることです。しかし、実際にはすでに2つのスイッチは開始時にオープンしているので、目標はステージの一番奥まった場所にある最後のスイッチにたどり着き、これをオープンすることです。
そのため最初のT字路を「どちらに曲がるか?」が1つのポイントになるように見えます。しかし、ここは右ルートでは段差がなく地続きで、左ルートでもポータルを使って移動してスイッチにたどり着くことができます。つまり、左右どちらのルートでも実際には攻略が可能なので、好みでどちらで選むか決めてコードを書いていいチャレンジとなっています。
ポータルがあるので左ルートが正解…と思いきや右ルートでもOKという引っ掛けがあるステージです。
決め手は関数
このページで重要なのはコース選びではなく、どちらのルートでスイッチにたどり着くにせよ、3~4回程度はバイトに「右折」するようにコマンドで指示することです(右ルートはすべて右折が必要です)。右折のたびにturnLeft() を3回ずつ書いていると10数ブロック離れたスイッチに辿り着くためにmoveForward()やturnLeft()が溢れる30行近いコードを書く必要が出てきてしまい、チェックがとても大変です。
そこで登場するのが「Function(関数)」です。これは新しいコマンドを定義することができるプログラミングの基本的な機能で、ここでは新たに turnLeft() コマンドを3回実行して右を向かせる turnRight()を新たに定義するのが狙いです。こういった「よく使う一連の動作」を関数で定義することにより、自分だけのコマンドをどんどん作り出して効率よくコードを書いていくことができます。コード全体も短くなり、繰り返し行われるアクションを設計できるのです。
ファンクションを定義するには「func」と書いて次に関数名、そして{ }(波括弧)の中に実行するコマンドを記述します。