コマンド
コマンドを使う
目標: Swift コマンドを使って Byte を動かして、宝石を集めましょう。
回答コード例↓
func move(distance: Int){
for i in 1 ... distance {
moveForward()
}
}
move(distance: 3)
collectGem()
◇何をやってるの?
func
キーワードを使って、好きに指定した数だけ前進する、move()
という名前の関数を作っています。- 作った
move()
関数のdistance
というパラメータに 3 を渡しています。 move()
関数の中にはfor
文があり、この for 文の中には moveForward() という関数が入っています。for 文が、パラメータに渡された数(ここでは 3 回)分実行されるので、前に 3 歩進みます。- collectGem() で宝石を回収します。
◇コードを詳しく見てみよう!
-
func move(distance: Int)
func
キーワードを使って、move()
という関数を作りました。
Int
型の distance(距離) というパラメータを作りました。この distance というパラメータ名は、自分で好きに決めることができます。 -
for i in 1 ... distance
for
文です。i はループ関数と呼ばれ、i の代わりに Kaisuu など、好きに決めることができます。
ここでは distance というパラメータが指定されているので、1 回から distance 回まで繰り返し実行するという意味です。
(正確には、 i に 1 から distance までの数値が順に代入されるので、数値によって処理を分岐したいという時に i を使うことができます) -
moveForward()
Swift Playground 用に用意されている演習用の関数です。(括弧が付いているものは関数とよぶのでしたよね。)
キャラクターを前に歩かせるためのコマンドで、ここでは for 文の中に入っています。
つまり、for 文で指定された回数分、繰り返し実行されます。 -
move(distance: 3)
上記で定義した、前に distance 分前進する関数を呼び出しています。
ここでは 3 を distance に渡しているので、3 回 for 文が回り、キャラクターが 3 歩前進します。 -
collectGem()
これも Swift Playground 用に用意されている演習用の関数で、キャラクターが宝石を回収するコマンドです。…特に説明はありません。
目の前の宝石に向かって for 分を回して移動し、回収するだけのステージなので目標もシンプルだったと思います。for 文はプログラミングの基本なのでしっかり押さえておきましょう。
新しいコマンドを追加する
目標: 動かすコマンドと向きを変えるコマンドを組み合わせて、宝石を集めましょう。
回答コード例↓
func move(distance: Int) {
for i in 1 ... distance {
moveForward()
}
}
move(distance: 2)
turnLeft()
move(distance: 2)
collectGem()
◇何をやってるの?
- 前セクションと同じで、
move()
という関数を作り、distance パラメータに 2 を渡して前に 2 歩前進させます。 - turnLeft() という Swift Playground 用のコマンドでキャラクターに左を向かせます。
- move(distance: 2) のコマンドで更に 2 歩前進させます。
- collectGem() で宝石を回収します。
◇コードを詳しく見てみよう!
func move(distance: Int) {
for i in 1 ... distance {
moveForward()
}
}
move(distance: 2)
ここまでは前セクションとほぼ同じで、move()
という関数を作って、前に 2 歩前進させています。
-
キャラクターに左を向かせるためのコマンドです。今回の核となるコマンドですね。turnLeft()
このコマンドを組み合わせることにより、前進しかできなかったキャラクターに方向転換を行わせることができるようになりました。
このコードの後のコマンドも、前セクションとほぼ同じなので解説は割愛します。
スイッチを切り替える
目標: 宝石を集めたら、スイッチを切り替えましょう。
回答コード例↓
func move(distance: Int) {
for i in 1 ... distance {
moveForward()
}
}
move(distance: 2)
turnLeft()
moveForward()
collectGem()
moveForward()
turnLeft()
move(distance: 2)
toggleSwitch()
◇何をやってるの?
- 前セクションと同じで、
move()
という関数を作り、distance パラメータに 2 を渡して前に 2 歩前進させます。 collectGem()
やturnLeft()
など基本的なコマンドでマップ内を移動しています。toggleSwitch()
という新しいコマンドで、地面のスイッチをトグっています。
toggleSwitch()
という Swift Playground 用のコマンドが登場しただけなので、コードの解説は割愛します。
ワープの練習
目標: 抜け穴を使って、宝石を集めましょう。
回答コード例↓
func move(distance: Int) {
for i in 1 ... distance {
moveForward()
}
}
move(distance: 3)
turnLeft()
move(distance: 2)
toggleSwitch()
move(distance: 2)
turnLeft()
move(distance: 2)
collectGem()
◇何をやってるの?
- 前セクションと同じで、
move()
という関数を作り、前に 2 〜 3 歩前進させます。 collectGem()
やturnLeft()
など基本的なコマンドでマップ内を移動しています。- フィールドに設置されたワープ装置で離れた場所に移動しながらジェムを集めます。
このコードも、全体的には特別なことはしていないので、コードの詳しい解説は割愛します。
バグを見つけて直す
目標: バグを見つけて、直しましょう。
修正前のコード↓
// 修正前
moveForward()
turnLeft()
moveForward()
moveForward()
collectGem()
moveForward()
toggleSwitch()
回答コード例↓
// 修正後
moveForward()
moveForward() // turnLeft() と入れ替え
turnLeft() // moveForward() と入れ替え
moveForward()
collectGem()
moveForward()
toggleSwitch()
◇何をやってるの?
- 上から二行目の
turnLeft()
と三行目のmoveForward()
を入れ替えました。
このコードも、全体的には特別なことはしていないので、コードの詳しい解説は割愛します。
バグつぶしの練習
目標: コマンドを並べ替えて、コードをデバッグしましょう。
修正前のコード↓
// 修正前
moveForward()
moveForward()
moveForward()
turnLeft()
toggleSwitch()
moveForward()
moveForward()
moveForward()
collectGem()
moveForward()
回答コード例↓
// 修正後
moveForward()
turnLeft() // moveForward() と入れ替え
moveForward()
moveForward() // turnYeft() と入れ替え
toggleSwitch()
moveForward()
moveForward()
moveForward()
moveForward() // collectGem() と入れ替え
collectGem() // moveForward() と入れ替え
◇何をやってるの?
- 上から二行目の
moveForward()
と 四行目のturnLeft()
を入れ替えました。 - 一番下の
collectGem()
と、下から二行目のmoveForward()
を入れ替えました。
このコードも、全体的には特別なことはしていないので、コードの詳しい解説は割愛します。
最短の道順
目標: さまざまな方法を考えて、最短の道順を選びましょう。
回答コード例↓
func move(steps: Int) {
for i in 1 ... steps {
moveForward()
}
}
move(steps: 3)
collectGem()
move(steps: 4)
toggleSwitch()
◇何をやってるの?
- マップ全体のギミックを見渡したところ、ワープ装置を使うと、前に進むだけでよさそうということが分かりました。
func
キーワードを使って、いつものようにmove()
関数を定義しました。collectGem()
とtoggleSwitch()
も使って、マップ上の宝石とスイッチを攻略しました。
ワープ装置を使うと全体で 7 歩でクリアできますが、左に曲がりながら移動すると 10 歩移動することになります。今回はらいたんの経路を通ってクリアするのが目標のため、ワープ装置を使いました。
このコードも全体的には特別なことはしていないので、コードの詳しい解説は割愛します。