いよいよステージ上に複数のキャラクター(characterとexpert)を登場させて使い分ける必要が出てきます。
expert君はExpert()、characterちゃんはCharacter()とそれぞれ違う型から生まれたインスタンスなので、それぞれできることが違います。鍵を操作して移動式の床板を浮かべたり沈めたりできるのはExpert()型の能力を与えられたexpert君のみです。
expert君のcharacterちゃんのどちらに対する指示なのかをドット記法ではっきりさせながらコードを書いていきます。
関数を作る必要もないようなシンプルなステージなので、二人への呼び分けをじっくり練習しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
//2タイプのインスタンスを初期化 let expert = Expert() let character = Character() //expert君への指示 expert.moveForward() expert.moveForward() expert.turnLockUp() //characterちゃんへの指示 character.moveForward() character.collectGem() character.moveForward() character.turnRight() character.moveForward() character.moveForward() //再びexpert君への指示 expert.turnLockDown() expert.turnLockDown() //もういっぺんcharacterちゃんへの指示 character.moveForward() character.collectGem() |
「expert.moveForward()」が1個多いですよ!
↓ なお、自分は無駄に関数で書きました。
let expert = Expert()
let character = Character()
func goANDstop() { // characterの移動&処理の関数
while !character.isOnGem && !character.isBlocked { // 「宝石上ではない かつ 前行き止まりではない」限り前進
character.moveForward()
}
if character.isOnGem { // 宝石上なら取る
character.collectGem()
}
}
//// —ここからメイン— ////
// character //
goANDstop() // 前進、宝石上まで来たら移動ループ外れて取る
// expert //
expert.moveForward()
expert.turnLockUp()
// character //
character.moveForward()
character.turnRight()
goANDstop()
// expert //
expert.turnLockDown()
expert.turnLockDown()
goANDstop() // 宝石まで行って止まる