Swift Playgrounds

コードを学ぼう2【島を作る】解答例と解説

島を作る

解答例

let allCoordinates = world.allPossibleCoordinates

// [Coordinate]型の空の配列を2つ作成します。
var island: [Coordinate] = []
var sea: [Coordinate] = []

for coordinate in allCoordinates {
if coordinate.column > 3 && coordinate.column < 7 && coordinate.row > 3 && coordinate.row < 7 {

  // 陸地の配列に追加します。
  island.append(coordinate)

  } else {
  // 海の配列に追加します。
  sea.append(coordinate)
  }
}

// 陸地の配列内の各座標に、ブロックを配置します。
for coordinate in island {
  world.place(Block(), at: coordinate)
}

// 海の配列内の各座標に、水を配置します。
for coordinate in sea {
  world.removeAllBlocks(at: coordinate)
  world.place(Water(), at: coordinate)
}

解説

前回同様、最初に
let allCoordinates = world.allPossibleCoordinates
として、全ての座標の配列を初期化し、処理できるようにします。

『海に囲まれた島』を作るため、『島』と『海』の情報が入る配列が必要になります。
var island: [Coordinate] = [] 、var sea: [Coordinate] = []として、
島と海それぞれの、Coordinate型の空の配列を2つ作りました。
これらに、条件に合った座標の配列を追加していきます。

今回の課題では、一番大きな座標の値は(11,11)ですので、真ん中に3つか4つ(解答例は3つ)のブロックを置くとすると
座標の中の

if coordinate.column > 3 && //3列目より大きく
   coordinate.column < 7 && //7列目より小さく
   coordinate.row > 3 &&  //3行目より大きく
  coordinate.row < 7 //7行目より小さい

という条件の場所に、
island.append(coordinate)
として、後でブロックを入れるためのislandの配列を準備します。
それ以外の場所は、全て『海』にするため、
else { sea.append(coordinate) }
でseaに海の配列を入れます。

次に、陸地の配列の座標にブロックを置いていきます。
for-inループを使うと陸地が設置されます。
for-inループは、オブジェクトから取り出した中身(プロパティ)を
1つずつ変数に代入していきます。
そして、プロパティが無くなると、ループが終了となります。

for ( 変数 in オブジェクト(配列の名前など)) {
実行させたい処理
}

最後に、『海』の配列のブロックを取り除き、水を配置します。
陸と同様に、for-inループを使い、2つの処理を実行するとゴールです。

このようになりました。
島を作る

要点まとめ

・まず空の配列を作り、そこに座標の配列を追加、最後はfor-inでそれぞれのアイテムを設置する