ここでもexpertインスタンスを自分で初期化し、ドット記法で命令を与えていく点以外はいままでと変わりません。
ドット記法は面倒くさいので、関数や繰り返しを上手く使って、なるべく短い行数で済むよう知恵を絞りましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
let expert = Expert() //expertが2歩進む関数 func move2() { expert.moveForward() expert.moveForward() } //宝石を取って元の位置に戻る関数 func getGem() { move2() expert.collectGem() expert.turnLeft() expert.turnLeft() move2() expert.turnRight() } //ここから本編 //スタート地点から近い2つをまず取る for i in 1 ... 2 { getGem() } //次の1つは取るついでにスイッチ操作も必要なので関数は使わずに処理 move2() expert.collectGem() expert.turnLockDown() //ここだけgetGem()関数と違う expert.turnLeft() expert.turnLeft() move2() expert.turnRight() //反対側のゾーンのスタート位置に着く for i in 1 ... 3 { expert.moveForward() } expert.turnRight() //残り三つをgetGem()関数の繰り返して取る for i in 1 ... 3 { getGem() } |
こうしてみると、turnLeftを2回連続で行って振り返る箇所がちらほらありますね。ここも関数にしてみたらどうでしょう?
宝石を取ってからすぐに方向転換してたら、地面の切り替えができない。だからT字路全部で行きと帰りまで自動化するループにするわけにはいきませんね。
初学者なのでそんなことに気付くのにも苦戦しましたw