戌咬音かんぬき(inugaminé)'s avatar

戌咬音かんぬき(inugaminé)

コマンド

コマンドを使う

目標: Swift コマンドを使って Byte を動かして、宝石を集めましょう。

回答コード例↓

func move(distance: Int){
    for i in 1 ... distance {
        moveForward()
    }
}
move(distance: 3)
collectGem()

◇何をやってるの?

  1. func キーワードを使って、好きに指定した数だけ前進する、move() という名前の関数を作っています。
  2. 作った move() 関数の distance というパラメータに 3 を渡しています。
  3. move() 関数の中には for 文があり、この for 文の中には moveForward() という関数が入っています。for 文が、パラメータに渡された数(ここでは 3 回)分実行されるので、前に 3 歩進みます。
  4. 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()

◇何をやってるの?

  1. 前セクションと同じで、move() という関数を作り、distance パラメータに 2 を渡して前に 2 歩前進させます。
  2. turnLeft() という Swift Playground 用のコマンドでキャラクターに左を向かせます。
  3. move(distance: 2) のコマンドで更に 2 歩前進させます。
  4. 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()

◇何をやってるの?

  1. 前セクションと同じで、move() という関数を作り、distance パラメータに 2 を渡して前に 2 歩前進させます。
  2. collectGem()turnLeft() など基本的なコマンドでマップ内を移動しています。
  3. 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()

◇何をやってるの?

  1. 前セクションと同じで、move() という関数を作り、前に 2 〜 3 歩前進させます。
  2. collectGem()turnLeft() など基本的なコマンドでマップ内を移動しています。
  3. フィールドに設置されたワープ装置で離れた場所に移動しながらジェムを集めます。

このコードも、全体的には特別なことはしていないので、コードの詳しい解説は割愛します。


バグを見つけて直す

目標: バグを見つけて、直しましょう。

修正前のコード↓

// 修正前
moveForward()
turnLeft()
moveForward()
moveForward()
collectGem()
moveForward()
toggleSwitch()

回答コード例↓

// 修正後
moveForward()
moveForward() // turnLeft() と入れ替え
turnLeft()   // moveForward() と入れ替え
moveForward()
collectGem()
moveForward()
toggleSwitch()

◇何をやってるの?

  1. 上から二行目の 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() と入れ替え

◇何をやってるの?

  1. 上から二行目の moveForward() と 四行目の turnLeft() を入れ替えました。
  2. 一番下の collectGem() と、下から二行目の moveForward() を入れ替えました。

このコードも、全体的には特別なことはしていないので、コードの詳しい解説は割愛します。


最短の道順

目標: さまざまな方法を考えて、最短の道順を選びましょう。

回答コード例↓

func move(steps: Int) {
    for i in 1 ... steps {
        moveForward()
    }
}

move(steps: 3)
collectGem()
move(steps: 4)
toggleSwitch()

◇何をやってるの?

  1. マップ全体のギミックを見渡したところ、ワープ装置を使うと、前に進むだけでよさそうということが分かりました。
  2. func キーワードを使って、いつものように move() 関数を定義しました。
  3. collectGem()toggleSwitch() も使って、マップ上の宝石とスイッチを攻略しました。

ワープ装置を使うと全体で 7 歩でクリアできますが、左に曲がりながら移動すると 10 歩移動することになります。今回はらいたんの経路を通ってクリアするのが目標のため、ワープ装置を使いました。
このコードも全体的には特別なことはしていないので、コードの詳しい解説は割愛します。