スポンサーリンク
スポンサーリンク
解答例
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関数を使うと、ランダムな数が指定された数値の範囲で選ばれる
スポンサーリンク