解答例
// 行2のすべての座標を含む配列を作成します。
var row2 = world.row(2)
// 座標を入れるための空の配列を作成します。
var discardedCoordinates: [Coordinate] = []
for i in 1...12 {
for coordinate in row2 {
world.place(Block(), at: coordinate)
}
// 座標を取り除いて、空の配列に追加します。
discardedCoordinates.append(row2.removeFirst())
}
// 空の配列に追加した各座標にキャラクターを置きます。
for coordinate in discardedCoordinates {
world.place(Character(), at: coordinate)
}
解説
まず最初に、『row2』という変数を宣言します。
rowは『行』のことでしたね。
クリックしてみると、真ん中が『2行目』でした。
この2行目の全ての座標の配列を、『row2』にするため、
var row2 = world.row(2)
とします。
worldインスタンスのメソッドを使って、
var row2 = world.coordinates(inRows:[ 2 ])
とすることもできます。
こちらは、整数の間に『,』で区切って、複数行の配列を作る場合にも使える形です。
次に、座標を入れるための空の配列を作ります。
空の配列を作る時は、変数名(discardedCoordinates、取り除かれた座標という意味。後で使うので、わかりやすいものにしましょう)と
[]で『型』を宣言するんでしたね。
forループが元々書いてあり、12回中身を繰り返します。
その中身は、for-inループになっており、2行目にブロックを置くことになっています。
それから、『座標の配列から項目を1つ取り除き、それを空の配列に追加』とあるので
先ほど作った『discardedCoordinates』という空の配列に、『append』メソッドで()の中身を追加していきます。
appendの()の中身、つまりrow2.removeFirst()
ですが、
removeFirst()は以前、『順番に並べる』の配列にも出てきましたが
〝最初の要素を取り除いて戻す〟メソッドです。
選択肢の中に出てくるので、使ってみましょう。
最初の要素とは、座標でいうと『0,2』です。
そして次のforループでの最初の要素は、『0,2』は取り除かれているため、
『1,2』、次は『2,2』…という感じになります。
その取り除いた最初の座標を、discardedCoordinatesに追加(append)し、
forループでそれを12回繰り返します。
最初がないので、段々の形になっています。
空の座標には、取り除かれた座標が追加されました。
そこに、またfor-inループでキャラクターを置いていきます。
座標は12回繰り返して作られたので、12体のキャラクターが設置されました。
完成図。壮観ですね。てか、ちょっと笑える(⌒▽⌒)
・remove,append,insertなどのメソッドを使えるようになろう