関数 4. 往復する

宝石が3行x3列の合計9つあるので、1列分をとる処理いを関数get3gems()とし、それを三回繰り返す形にしてみました。合間合間で方向転換を指示します。
もちろんこれ以外のやり方でもOKです。自分でパターンを見つけ出して関数にして使ってみましょう。

関数 2. 新しい関数を作る

前ステージで、turnLeft()を3回連続で使うと90°x3=270°回って結果的に右向きになれることがわかりましたが、それを毎回打つとコードが長くなって見づらくなってしまいます。
そこで登場するのがfuncコマンドです。あるコマンドのセットをパックにして名前を付けて、その名前をコマンドとして呼び出せば、セットの中身を連続して実行してくれるというものです。このセットのことを関数と呼びます。数学の言葉なのでやや馴染みづらいですが、英語のfunctionを訳したもので、コマンド名のfuncはそれを略したものです。
使い方は、

という感じです。関数の名前は自分で好きに決められます。その後に()をつけます(意味は追々わかります)。次に{を書いて最初の行は終わりです。次の行からセットで実行したいコマンドを順に書いていきます。何行でも構いません。そして最後のコマンドを書いたらもう一度改行して最後に}を書きます。{と}ではさまれた行がセット内容ということです。

ではさっそくfuncを使って、turnRight()とするとturnLeft()が3回連続で実行される関数を作り、それを使ってステージをクリアしてみましょう。

必須ではありませんが、{と}の間にある行は、先頭に空白を4つ入れて右にズラしておくと、コードを眺めた時にどこからどこが関数の内容なのか見やすくなります。アプリが自動でやってくれる場合もあります。

関数 1. 新しい挙動を作る

このステージでは右に曲がる必要が出てきます。しかし方向を変えるコマンドはturnLeft()しかないので、これをどうにかして利用して宝石のある方を向く必要があります。

こんな感じでできたでしょうか?
ちょっとめんどくさいですね、、ってとろこで次ステージへ続きます。

関数 3. 集めて、切り替えて、繰り返す

まず、このステージをバイト君がクリアする手順をじっくり考えましょう。四角形のステージでそれぞれの辺の中心辺りに宝石と閉スイッチが あるという法則が見えてくると思います。この共通部分を関数にするとしたら、

のような関数が作れるでしょうか。さらにその前後も毎回同じコマンドが連続してたりするかも知れません。ただしこのステージは正方形ではないので、短辺部分と長辺部分で少しだけ処理が違ってきます。宝石とスイッチの前後どこまでを関数に入れて、どの部分は本編部分で個別にコマンドを書くか見極めましょう。

例えばこんな解き方ができます。

コマンド 7. 最短の道順

宝石を1つ取り、スイッチを1つ操作するのが目標です。ワープも含め色々な道順が考えられると思います。いきなりコードを書き始めるのではなく、まず色々な道順を検討してみましょう。それぞれのルートを通った場合、moveForward()が必要な回数(=歩数)も考えてみて、もっとも少ないmoveForward()でクリアできるやり方を見つけ出しましょう。

以下は緑ワープを使って7歩でクリアできる例です。

青ワープを使っても7歩で行けますが向きを変える操作も数えるとどうでしょう?
一般的にはコードの行数がなるべく少なく済むやり方が効率的と考えられます。