パラメータ 7. 2つのエキスパート

このステージのポイントはキャラクターが両方ともExpert型だということです。なので両方ともexpertやexという名前にしてしまうと混乱してしまいます(というかエラーになります)。そこで、私はex1とex2のように番号をふった名前にしてみました。taroとhanakoでも構いません。
それぞれの違いにだけ気をつけて、あとはじっくり順をおって作り込んでいけば大丈夫です。

パラメータ 6. 2つのキャラクターを置く

2つのキャラクターを使い分ける練習です。Character型のキャラに.jump()という能力(メソッド)が追加されました。isBlockedな場面でも1段分の高さなら飛び乗ったり飛び降りたりできるようになります。適切な場面で活用してクリアを目指しましょう。

パラメータ 5. 川を渡る

キャラクターをステージの好きな位置に移動する.placeメソッドに向きを指定できるプロパティが追加されました。同じ.placeでも
前ステージやったのはこういう形でした。

今回はこうです。

facing:が2番目のパラメータとして追加されていますね。facingにもたせるべき値は向きを示す東西南北の情報ですが、説明文によるとDirection.east、Direction.west、Direction.north、Direction.southという「列挙」という形式で指定するとあります。列挙がなにかはここではあまり気にしなくて良いでしょう。Bool型がtrueとfalseしか受け付けないように、予め決まった候補だけを指定できるものと考えておいてください。ただしDirectionは省略して、.west、.southなどドット以降だけで大丈夫とも書かれています。というか、予測候補には単にwest、southとドットもなしで出てくるし、実際それでエラーにもならないみたいですね。まぁ、これは.placeメソッドの設計がたまたまそうであるということで、常にメソッドのパラメーターはそういうものである、ということではないので、ここではそういうものだと思っておきましょう。いつか自分でメソッドを設計することになったら、自分でその辺りも決めることになります。

今回、expertと打つのがめんどくさいので省略してexとしました。その場合、他のあらゆる部分でもそれに統一していることに注目してください(もちろんいままで通りexpertとしてもいいですし、全然別の名前をつけてみてもOKです)。

ナビゲーションとしては、「行き止まりまで進みつつ、途中見つけた宝石を取っていく」と「それをした後、突き当たりにあるスイッチを操作。また左右曲がれる方向に曲がる」という2つの関数を作成しました。スイッチ操作は上げるべき箇所と下げるべき箇所があるので、さっそくパラメータをもたせる技を活用してみました。以前のステージであったように、func文の先頭行にある()にup:boolと書いておきます。

そうするとupという名前でtrueかfalseのどちらかを受け付けるようになります。そして関数内の処理で実際にturnLockする時のupにupを指定します。

ややこしいですが、ひとつめのupはturnLockメソッドのパラメーターを区別する名前、:の後の2つ目のupはfunc文で決めた変数の名前です。赤字部分同士が対応付いています。

もし、区別しやすくするなら、それぞれisUpと変えてもOKです。

これで、上げるか下げるかだけは都度変更できる関数が実現し、一箇所違うだけなのにわざわざ別々の関数を用意する必要がなくなりました。

パラメータ 4. 決まった位置に置く

メソッドは関数と似ていますが、

のように特定のオブジェクト(インスタンスなど)に向かって出すコマンドのことです。メソッドにも()がついてましたが、そこに規定の引数をもたせることができます。
このステージでは、world(世界)というオブジェクトに対してplaceというメソッドを使い、好きなキャラクターの位置や向きを移動させます。今まではlet文で用意するだけでいい感じの場所に勝手に配置してくれましたが、ここからはそれも自分で指定しなければなりません。
placeメソッドはworldの設計図にあらかじめ書き込まれているので、自分でfunc文で用意する必要はありません。アプリの出題文にあるように、

などとします。最初のexpertは動かしたい対象、atColumnとrowはコマを指定する為の列番号と行番号です。マップ上の好きなコマをタップすると「(3,0)」のように2つの数字が表示されます。これらをこの順番でatColumnとrowのところに入れてやればOKです。連続2回続けての処理なので関数にしなくてもfor文で繰り返すのが早いでしょう。

ステージのルートとしては、赤いスイッチと宝石の間を基点とすると、「宝石を取り、スイッチを操作し、道を5マス進む」を2回繰り返すとよさそうです。

パラメータ 3. 上げたり下げたり

このステージでもexpert君とcharacterちゃんの2体を交互に操作してクリアを目指します。
expert君は基本同じ場所から動けず、両側にあるスイッチをふり返りながら操作するだけ。実際に動いて宝石を集めるのはもっぱらcharacterちゃんの役目です。
どちらに指示を出しているのか気をつけてドット記法でコードを書けば、行数は多いですがさほど難しいステージではないでしょう。
共通パターンとして「目の前のマスの宝石をとって振り返って最初のマスに戻る」というのがあちこちにあるなと思い関数化しました。