Treasure Hunt

namespace SpriteKind {
    export const Jewel = SpriteKind.create()
    export const Queen = SpriteKind.create()
    export const Wizard = SpriteKind.create()
    export const EndGame = SpriteKind.create()
    export const Potion = SpriteKind.create()
}
namespace myTiles {
    //% blockIdentity=images._tile
    export const tile0 = img`
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
    `
    //% blockIdentity=images._tile
    export const tile1 = img`
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 8 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 7 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 7 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 8 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 7 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 8 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 7 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
    `
    //% blockIdentity=images._tile
    export const tile2 = img`
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 8 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 7 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 7 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 8 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 7 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 8 6 6 6 6
        6 6 6 8 8 6 6 6 6 6 6 7 6 6 6 6
        6 6 6 8 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 8 8 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 8 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
    `
    //% blockIdentity=images._tile
    export const tile3 = img`
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 8 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 7 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 7 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 8 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 7 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 8 6 6 6 6
        6 6 6 8 8 6 6 6 6 6 6 7 6 6 6 6
        6 6 6 8 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 8 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 8 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
        6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
    `
    //% blockIdentity=images._tile
    export const tile4 = img`
        f f 8 8 8 8 8 8 8 8 8 8 8 8 f f
        f f 8 8 8 8 8 8 8 8 8 8 8 8 f f
        f f 8 8 8 8 8 8 8 8 8 8 8 8 f f
        f f 8 8 8 8 8 8 8 8 8 8 8 8 f f
        f f 8 8 8 8 8 8 8 8 8 8 8 8 f f
        f f 8 8 8 8 8 8 8 8 8 8 8 8 f f
        f f 8 8 8 8 8 8 8 8 8 8 8 8 f f
        f f 8 f f 8 8 8 8 8 8 8 8 8 f f
        f f 8 f f 8 8 8 8 8 8 8 8 8 f f
        f f 8 8 8 8 8 8 8 8 8 8 8 8 f f
        f f 8 8 8 8 8 8 8 8 8 8 8 8 f f
        f f 8 8 8 8 8 8 8 8 8 8 8 8 f f
        f f 8 8 8 8 8 8 8 8 8 8 8 8 f f
        f f 8 8 8 8 8 8 8 8 8 8 8 8 f f
        f f 8 8 8 8 8 8 8 8 8 8 8 8 f f
        f f 8 8 8 8 8 8 8 8 8 8 8 8 f f
    `
    //% blockIdentity=images._tile
    export const tile5 = img`
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . d d d d d
        . . . . . . . . . . . d . . . d
        . . . . . . . . . . . d . . . d
        e d e d e d e d d e e d . . . d
        d d d d d d d d d d d d . . . d
        d . d . d . d . . . . d . . . d
        d . d . d . d . . . . d . . . d
        d . d . d . d . . . . d d d d d
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
    `
}
sprites.onOverlap(SpriteKind.Player, SpriteKind.Wizard, function (sprite, otherSprite) {
    if (haspotion) {
        music.playSound(music.sounds(Sounds.PowerUp))
        wizard.say("The password is: 42")
        pause(5000)
        wizard.destroy()
    }
})
scene.onOverlapTile(SpriteKind.Player, myTiles.tile5, function (sprite, location) {
    music.playSound(music.sounds(Sounds.PowerUp))
    tiles.setTileAt(location, sprites.castle.tileDarkGrass1)
    canopendoor = true
})
scene.onOverlapTile(SpriteKind.Player, myTiles.tile4, function (sprite, location) {
    if (canopendoor) {
        music.playSound(music.sounds(Sounds.PowerUp))
        tiles.setTileAt(location, sprites.castle.tileDarkGrass1)
    } else {
        mySprite.y += -1
    }
})
scene.onOverlapTile(SpriteKind.Player, sprites.dungeon.collectibleRedCrystal, function (sprite, location) {
    music.playSound(music.sounds(Sounds.PowerUp))
    tiles.setTileAt(location, sprites.castle.tileDarkGrass1)
    gifttoqueen = true
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.Queen, function (sprite, otherSprite) {
    if (gifttoqueen) {
        music.playSound(music.sounds(Sounds.PowerUp))
        queen.destroy()
        potion = sprites.create(img`
            . . . . . . . . . . . . . . 2 2
            . . . . . . . 2 2 2 . 2 2 . 2 2
            . . . . . . . 2 2 2 . 2 2 . . .
            . . . . . . . 2 9 . . . . . . .
            . . . . . . 2 9 9 . . . . . . .
            . . . . . . 2 9 9 . . . . . . .
            . . . . . . 9 9 9 9 . . . . . .
            . . . 9 9 9 9 9 9 9 9 9 . . . .
            . . 9 9 f f 9 9 9 9 9 9 9 9 . .
            . . 9 f f 9 9 9 9 9 9 9 9 9 9 .
            . 9 9 f 9 9 9 9 9 9 9 9 9 9 9 .
            . 9 9 f 9 9 9 9 9 9 9 9 9 9 9 .
            . . 9 f f 9 9 9 9 9 9 9 9 9 9 .
            . . 9 9 f f 9 9 9 9 9 9 9 9 . .
            . . . 9 9 9 9 9 9 9 9 9 9 . . .
            . . . . 9 9 9 9 9 9 9 9 . . . .
        `, SpriteKind.Potion)
        potion.x = 180
        potion.y = 30
        potion.setFlag(SpriteFlag.Ghost, true)
        haspotion = true
    }
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.EndGame, function (sprite, otherSprite) {
    music.playSound(music.sounds(Sounds.PowerUp))
    if (parseInt(game.askForString("")) == 42) {
        game.splash("Congratulations! You Win!!!")
        game.over(true)
    } else {
        pause(500)
    }
})
/**
 * Find the code to End the Game!
 *
 * The Wizard knows the answer in return for a magic potion which the Queen has.
 *
 * But the Queen demands a gift!
 */
let potion: Sprite = null
let wizard: Sprite = null
let queen: Sprite = null
let haspotion = false
let gifttoqueen = false
let canopendoor = false
let mySprite: Sprite = null
tiles.setTilemap(tiles.createTilemap(
            hex`1000100003050505010505050505050501050501050505050101010505050701010505010101010505050101050101010505010105050105050505050505050505050105050501010105010105010101050501050505050501050105050505010505010505050505010501050505050105050505050101010105010505050501050501050505050505050105050a05010505010509010101010501050504050105050105050505050105010105050101050501050505050501050505050505050505050505050505010505050505050101010105050505050105050505050501050505050505050501050505050505010505050505050505010505050505050105050505`,
            img`
                . . . . 2 . . . . . . . 2 . . 2
                . . . . 2 2 2 . . . . 2 2 . . 2
                2 2 2 . . . 2 2 . 2 2 2 . . 2 2
                . . 2 . . . . . . . . . . . 2 .
                . . 2 2 2 . 2 2 . 2 2 2 . . 2 .
                . . . . 2 . 2 . . . . 2 . . 2 .
                . . . . 2 . 2 . . . . 2 . . . .
                . 2 2 2 2 . 2 . . . . 2 . . 2 .
                . . . . . . 2 . . . . 2 . . 2 .
                . 2 2 2 2 . 2 . . . . 2 . . 2 .
                . . . . 2 . 2 2 . . 2 2 . . 2 .
                . . . . 2 . . . . . . . . . . .
                . . . . 2 . . . . . . 2 2 2 2 .
                . . . . 2 . . . . . . 2 . . . .
                . . . . 2 . . . . . . 2 . . . .
                . . . . 2 . . . . . . 2 . . . .
            `,
            [myTiles.tile0,sprites.castle.rock1,sprites.castle.tileGrass2,sprites.castle.tileDarkGrass2,sprites.castle.tileDarkGrass1,sprites.castle.tileDarkGrass3,myTiles.tile1,myTiles.tile2,myTiles.tile3,myTiles.tile4,myTiles.tile5],
            TileScale.Sixteen
        ))
scene.setBackgroundColor(6)
mySprite = sprites.create(img`
    . . . b b b b b b b b . . . .
    . . . b d d d d d d b b . . .
    . . . b d d 7 d 7 d d b . . .
    . . b b d d d d d d d b b . .
    . . b . d a d d d a d . b . .
    b b b . d d a a a d d . b b b
    . . . . d d d d d d d . . . .
    . . . . . . 2 2 2 . . . . . .
    . . 4 . . . 2 2 2 . . . 4 . .
    4 4 4 4 4 4 2 2 2 4 4 4 4 4 4
    . 4 4 . . . 2 2 2 . . . 4 4 .
    . . . . . 2 2 2 2 2 . . . . .
    . . . . 2 2 2 2 2 2 2 4 . . .
    . . . 4 2 2 2 2 2 2 2 4 . . .
    . . . 4 . . . . . . . 4 . . .
`, SpriteKind.Player)
tiles.placeOnRandomTile(mySprite, sprites.castle.tileDarkGrass2)
canopendoor = false
gifttoqueen = false
haspotion = false
queen = sprites.create(img`
    . . . . . . . . . . . . . . . .
    . . . a . e . 6 . e . c . . . .
    . . . e . 4 . e . 5 . e . . . .
    . . . e e e e e e e e e . . . .
    . . . . 8 8 8 8 8 8 8 8 . . . .
    . . . 8 8 d d d d d d 8 . . . .
    . . . 8 d 4 d d d 4 d 8 . . . .
    . . . 8 d d d d d d d 8 . . . .
    . . . 8 d b b d b b d 8 . . . .
    . . . 8 d d b b b d 8 8 . . . .
    . . . 8 . d d d d d 8 . . . . .
    . 8 8 8 . . 5 5 5 . 8 8 . . . .
    . 8 . . . . 5 5 5 . . 8 8 8 . .
    . . . . 5 5 5 5 5 5 5 . . . . .
    . . . . 5 5 5 5 5 5 5 5 . . . .
    . . . 5 5 5 5 5 5 5 5 5 . . . .
`, SpriteKind.Queen)
tiles.placeOnRandomTile(queen, myTiles.tile2)
wizard = sprites.create(img`
    . . . . . 4 4 . . . . . . . . .
    . . . . 4 4 4 . . . . . . . . .
    . . 4 4 4 4 4 4 4 4 . . . . . .
    4 4 4 4 4 4 4 4 4 4 . . . . . .
    . . . d d d d . . . . . . . . .
    e e . d f d d . . . . . . . . .
    a e . d d d d . . . . . . . . .
    a e . 9 9 d d . . . . . . . . .
    8 . . . 4 4 . . . . . . . . . .
    8 4 . . 4 4 4 . . . . . . . . .
    8 4 4 . 4 4 4 4 . . . . . . . .
    8 . 4 4 4 4 4 4 4 . . . . . . .
    . . . . . 4 4 4 4 4 4 . . . . .
    . . . . . 4 4 4 4 4 4 4 4 . . .
    . . . . . . 4 4 4 4 4 4 4 4 . .
    . . . . . . 4 4 4 4 4 4 4 4 . .
`, SpriteKind.Wizard)
wizard.x = 210
wizard.y = 230
let EndGame2 = sprites.create(img`
    . . . . . . . . . . . . . . . .
    . . 2 2 . . . . 2 . . 2 2 . . .
    . . . 2 2 . . . 2 . 2 2 . . . .
    . . . . 2 2 2 . 2 2 2 . . . . .
    . . . . . . 2 2 2 2 2 2 2 2 . .
    . . 2 2 2 2 2 2 2 2 . . . 2 . .
    . . 2 . . . . 2 e . . . . 2 . .
    . . . . . . e e e e . . . . . .
    . . . . . . e e e e e . . . . .
    . . . . e e e e e e e e . . . .
    . . . e e e e e e e e e . . . .
    . . . e e e e e d e e e e . . .
    . . e e e e e d d d e e e e . .
    . e e e e e d d d d d e e e e .
    . e e e e d d d a d d d e e e .
    e e e e d d d a a a d d d e e e
`, SpriteKind.EndGame)
EndGame2.x = 140
EndGame2.y = 240
controller.moveSprite(mySprite)
game.onUpdate(function () {
    scene.cameraFollowSprite(mySprite)
    if (potion) {
        potion.left = mySprite.right
        potion.bottom = mySprite.bottom
    }
})