Swift Playgrounds

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

ステージを作る

解答例

// 座標の領域を作成します。
let allCoordinates = world.allPossibleCoordinates
let backRow = world.coordinates(inRows: [11])
let insideSquare = world.coordinates(inColumns: [5,6], intersectingRows: [5,6])
let squareCorners = world.coordinates(inColumns: [3,4,7,8], intersectingRows: [4,8])

// 地面を動かす鍵を置きます。
let squareLock = PlatformLock(color: .green)
world.place(squareLock, at: Coordinate(column: 1, row: 1))
let cornerLock = PlatformLock(color: .pink)
world.place(cornerLock, at: Coordinate(column: 10, row: 1))
let backLock = PlatformLock(color: .blue)
world.place(backLock, at: Coordinate(column: 5, row: 1))

// キャラクターと地面を置きます。
for coor in insideSquare {
    world.place(Platform(onLevel: 4, controlledBy: squareLock), at: coor)
    world.place(Character(name: .hopper), at: coor)
}

for coor in squareCorners {
    world.place(Platform(onLevel: 4, controlledBy: cornerLock), at: coor)
    world.place(Expert(), at: coor)
    world.place(Gem(), at: coor)
}

for coor in backRow {
    world.place(Platform(onLevel: 2, controlledBy: backLock), at: Coordinate(column: coor.column, row: coor.row + 1))
    world.place(Character(name: .blu), facing: north, at: coor)
}

// ステージ内のすでにいるキャラクターの配列を作成します。
let blus = world.existingCharacters(at: backRow)
let hoppers = world.existingCharacters(at: insideSquare)
let experts = world.existingExperts(at: squareCorners)

// 好きなことをしてみましょう🤓。
squareLock.movePlatforms(up: true, numberOfTimes: 3)

for hopper in hoppers {
    hopper.turnUp()
}

cornerLock.movePlatforms(up: true, numberOfTimes: 7)

for expert in experts {
    expert.collectGem()
}

for blu in blus {
    blu.jump()
}
backLock.movePlatforms(up: true, numberOfTimes: 11)


for blu in blus {
    blu.turnLeft()
    blu.turnLeft()
    blu.danceLikeNoOneIsWatching()
}

let frontRow = world.coordinates(inRows: [0])

for coor in frontRow {
    world.place(Gem(), at: coor)
}

for coor in frontRow {
    world.removeItems(at: coor)
}

let space = allCoordinates
for coordinate in space {
    world.removeAllBlocks(at: coordinate)
}

解説

ついに最後の課題までやってきました。
今回の解答例は、今までのものをコピペして、数値を若干変えたりしているだけです。
宙に浮いてる感じにしてみました。
ステージを作る
ぜひ、課題にあるような内容を元に
オリジナリティあふれる自分だけのステージを作ってみてください。
今までやってきたことを振り返ったり、
思い出してアウトプットする作業は大切です。
エラーが出てもくじけず、プログラミングを楽しんでいきましょう。

色々、つたない説明ですみませんでした。
もっとちゃんとした(笑)書籍などが出ているので、
どうしても分からない場合は、そういうのも駆使して頑張ってください。

これで『コードを学ぼう2』が終わります。
解答例と言いつつ、解答は複数ある場合があり
ひとつの参考としていただけたら幸いです。
もっと良いコード、考え方はたくさんあると思います。
それから、何かミスがあったり動作がおかしかったりする場合、
ぜひお知らせください
出来る限り誰かのお力になれるよう、改善していこうと思っています。