Swift Playgrounds

コードを学ぼう2【ランダムな地形】解答例と解説

ランダムな地形

解答例

let allCoordinates = world.allPossibleCoordinates
var heights: [Int] = []

// 高さの配列にランダムな数を追加します。
for i in 1 ... 8 {
  heights.append(randomInt(from: 0, to: 12))
}

var index = 0

for coordinate in allCoordinates {
  if index == heights.count {
  index = 0
}

// 現在のインデックス位置の高さをcurrentHeightに保存します。
var currentHeight = heights[index]

if currentHeight == 0 {

  // currentHeightが0の場合に何かおもしろいことをしてみましょう。
  world.removeAllBlocks(at: coordinate)

  } else {
    for i in 1...currentHeight {
      world.place(Block(), at: coordinate)
    }

    if currentHeight > 9 {
      // キャラクターを置くなど、何か別のことをします。
      world.place(Character(), at: coordinate)

    } else if coordinate.column == 7 {
      world.place(Expert(), at: coordinate)

    } else if coordinate.column >= 3 && coordinate.column < 7 {
      // 水を置くなど、さらに別のことをします。
      world.removeAllBlocks(at: coordinate)
      world.place(Water(), at: coordinate)

    // さらにコードを追加して、自分だけのステージを作りましょう。
    } else {
      world.place(Gem(), at: coordinate)
    }
  }
  index += 1
}

解説

今回も、何もないフィールドにステージを作っていきます。
ランダムな数字で作るため、出来上がりは毎回違うし、
条件も自分の好きなように作れるみたいです。
解答例は、あくまでも『』ですので
置くアイテムや数値など、思うようにやってみてくださいね。

heights.append(randomInt(from: 整数, to: 整数))で、
最初にInt型で宣言したheightsに、ランダムな数字を入れることができます。
その数値を元に、ifで条件をつけて、地形を作っていきます。

また、インデックスの範囲外エラーにならないように、

if index == heights.count { index = 0 }とします。
こうすると、heightsの数がindexと同じになると、indexがまた0から始まります。
index += 1とセットで使われます。

あとはif文の中を自由に考えればOKです。
今回は、

0〜2列目・・・宝石
3〜6列目・・・ブロックを取り除いて水を配置
7列目・・・エキスパート
になり、ブロックの高さが10〜12の場合、上記の条件よりもキャラクター設置が優先されます。

今回、わかりやすいように、forループを8回にしています。
ランダムに変化しますが、こんな感じでゴールします。
ランダムな地形

要点まとめ

・randomInt関数を使うと、ランダムな数が指定された数値の範囲で選ばれる