スポンサーリンク
スポンサーリンク
解答例
let allCoordinates = world.allPossibleCoordinates
for coordinate in allCoordinates {
// 各座標について、その列と行の値を足したものを高さに設定します。
let height = coordinate.column + coordinate.row
for i in 0...height {
world.place(Block(), at: coordinate)
}
if height >= 8 && height < 10 {
world.place(Character(name: .blu), at: coordinate)
} else if height > 9 {
world.place(Character(name: .hopper), at: coordinate)
}
}
// ステージ内にすでにいるキャラクターを含む配列を初期化します。
let characters = world.existingCharacters(at: allCoordinates)
// 各キャラクターを動かします。
for character in characters {
character.turnUp()
}
解説
for-inループの中で指示されている通りに、heightを『列と行の値を足したもの』にします。
let height = coordinate.column + coordinate.row
足された値の数だけブロックを積み上げていくので、
例えば『0,0』の座標には0段、『3,4』の座標には7段のブロックが積まれているはずです。
座標の値はcolumnもrowも、奥に行くに従って大きくなっていくので
このステージも、一番奥が一番高くブロックが積まれています。
そして、heightの値が『8か9』の場合はBlue、
『10、11、12』の場合はHopperが置かれます。
(このステージの座標は『6,6』が最大なので、足して『12』が最大値になりますね)
そして、次に
let characters = world.existingCharacters(at: allCoordinates)
とすることによって、上記に配置されているキャラクターたちの全ての配列を『characters』に入れます。
そうすると、charactersに入っているすべてのキャラクターに指示できるようになります。
(existは、存在する、という意味ですね)
『コードを学ぼう1』の最初の頃やったように、コードは上から順番に実行されます。
最初にキャラクターを配置して、それを『存在するキャラクター』として使うわけですね。
あとは、for-inループでキャラクターたちに好きなメソッドで動作をさせます。
私は、turnUp()がお気に入りです。
Hopperが、昔のアイドルのようなダンスをするのでかわいくて。
みなさんは、どの動作が一番好きですか?(⌒▽⌒)
『』に英語の意味、そしてそれぞれの挙動をまとめておきます。
danceLikeNoOneIsWatching() | 『誰にも見られてない感じでダンス』 Blu:片手ずつ上げる Hopper:片手ずつ上げて一回転 |
---|---|
turnUp() | 『めちゃいい感じ、ひょっこり現れる』 Blu:前転 Hopper:聖子風ダンス |
breakItDown() | 『ぶっ壊せ、ふざけるな』 Blu:3回ジャンプ Hopper:盆踊り?と1回転 |
grumbleGrumble() | 『愚痴を言う』 Blu:大きなため息 Hopper:上を向いて顔をさわる |
argh() | 『嫌悪、苛立ち、げー!あー!(読み方はあー!)』 Blu:片足ふんでくやしそう Hopper:残念な顔 |
要点まとめ
・すでに存在するキャラクターの配列を初期化して使うことができる
スポンサーリンク