今度は階段を作ります。階段の場合、インスタンス、向き、座標(行と列)の4つのパラメーターを.place()メソッドに渡してあげます。
ただし、今回は8つも階段を作る必要があり、いちいち、
1 2 3 4 5 6 7 8 9 |
let stair1 = Stair() world.place(stair1, facing: south, atColumn: 3, row: 1) let stair2 = Stair() world.place(stair2, facing: south, atColumn: 3, row: 3) let stair3 = Stair() world.place(stair3, facing: east, atColumn: 5, row: 4) (以下8まで繰り返し) |
などと8つもインスタンスを作って、それをさらに.place()で配置していくのは面倒です。また、ポータルのように後で名前を指定して操作(ON/OFFなど)をする必要がないので、どれがどんな名前か自分で把握しておく必要もありません。
こういう時には出題文にあるちょっとした省略形が使えます。Stair()をいちいちletで変数に入れなくても、.place()文の1つめのパラメーターとして直接書くことができます。こうすることで毎回適当な名前で別々のStair()型インスタンスが出来て、続く向きや座標の通りに.place()文で配置されます。ただしそれぞれがなんて名前なのかはわからないので、後から変更したりはできないことになります。
このように、後で名前を指定して参照する必要がないオブジェクトならば自分でletで名前付きで宣言せずに直接.place文に型だけ指定する方法があると憶えておきましょう。逆に、CharacterやExpert、Portalなど、後から、ドット記法でch.moveForward()のように操作する必要がある場合は、自分でletから書いて名前を付けておく、という使い分け方です。
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 |
//必要な8カ所に階段を設置する world.place(Stair(), facing: south, atColumn: 3, row: 1) world.place(Stair(), facing: south, atColumn: 3, row: 3) world.place(Stair(), facing: east, atColumn: 5, row: 4) world.place(Stair(), facing: east, atColumn: 5, row: 6) world.place(Stair(), facing: north, atColumn: 4, row: 7) world.place(Stair(), facing: north, atColumn: 2, row: 7) world.place(Stair(), facing: west, atColumn: 1, row: 6) world.place(Stair(), facing: west, atColumn: 1, row: 4) //繰り返しパターンの開始位置まで移動 move(distance: 4) turnRight() moveForward() //真ん中の高台から降りて3つのスイッチを入れまた高台に上る、というパターンを3回繰り返す for i in 1 ... 3 { move(distance: 2) turnLeft() toggleSwitch() moveForward() toggleSwitch() moveForward() toggleSwitch() turnLeft() move(distance: 2) turnRight() } |