回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【花雕动手做】Kitronik 可编程游戏开发板基于 ARCADE MakeCode之板条箱地牢 简单

头像 驴友花雕 2025.09.23 3 0

00 (2).jpg

Kitronik ARCADE 是一款由英国教育科技公司 Kitronik 精心打造的可编程游戏机开发板,专为编程教学与创客实践而设计。该设备原生支持微软的 MakeCode Arcade 平台,用户可通过图形化或 JavaScript 编程方式,轻松创建、下载并运行复古风格的街机游戏。

它集成了彩色 LCD 显示屏、方向控制键、功能按键、蜂鸣器和震动马达等交互组件,提供完整的游戏输入输出体验。无论是初学者进行编程启蒙,还是创客群体开发交互式作品,Kitronik ARCADE 都能作为理想的硬件载体,助力创意实现。

凭借其开源友好、易于上手、兼容性强等特点,该开发板广泛应用于中小学编程课程、创客工作坊、游戏开发教学以及个人项目原型设计,深受教育者与技术爱好者的喜爱。

 

00 (3).jpg
00 (4).jpg

作为学习、练习与尝试,这里创建一个板条箱地牢的小游戏。
打开网页版:https://arcade.makecode.com/,设置项目名称:板条箱地牢

MicroPython实验代码

 

代码
@namespace
class SpriteKind:
    Stupid = SpriteKind.create()
    PlaceHolder = SpriteKind.create()
    Box = SpriteKind.create()
    Item = SpriteKind.create()
    Book = SpriteKind.create()

def on_overlap_tile(sprite, location):
    tiles.set_tile_at(location, assets.tile("""
        transparency8
        """))
    tiles.set_wall_at(location, False)
scene.on_overlap_tile(SpriteKind.food,
    assets.tile("""
        breakible wall0
        """),
    on_overlap_tile)

# WALLS ARE BUGGY FIX LTR
def PushTiles(Pusher: Sprite, Pushing: Sprite):
    characterAnimations.clear_character_state(Pushing)
    sprites.set_data_boolean(Pushing, "RecentlyPushed", True)
    if characterAnimations.matches_rule(Pusher, characterAnimations.rule(Predicate.MOVING_LEFT)):
        if not (tiles.tile_at_location_is_wall(grid.add(grid.get_location(Pushing), -1, 0))):
            characterAnimations.set_character_state(Pushing, characterAnimations.rule(Predicate.MOVING_LEFT))
            grid.move(Pushing, -1, 0)
        else:
            grid.move(sprites.read_data_sprite(Something, "S-Control"), 1, 0)
            if Pusher.kind() == SpriteKind.Box:
                characterAnimations.set_character_state(Pusher, characterAnimations.rule(Predicate.MOVING_RIGHT))
                grid.move(Pusher, 1, 0)
    if characterAnimations.matches_rule(Pusher, characterAnimations.rule(Predicate.MOVING_RIGHT)):
        if not (tiles.tile_at_location_is_wall(grid.add(grid.get_location(Pushing), 1, 0))):
            characterAnimations.set_character_state(Pushing, characterAnimations.rule(Predicate.MOVING_RIGHT))
            grid.move(Pushing, 1, 0)
        else:
            grid.move(sprites.read_data_sprite(Something, "S-Control"), -1, 0)
            if Pusher.kind() == SpriteKind.Box:
                characterAnimations.set_character_state(Pusher, characterAnimations.rule(Predicate.MOVING_LEFT))
                grid.move(Pusher, -1, 0)
    if characterAnimations.matches_rule(Pusher, characterAnimations.rule(Predicate.MOVING_DOWN)):
        if not (tiles.tile_at_location_is_wall(grid.add(grid.get_location(Pushing), 0, 1))):
            characterAnimations.set_character_state(Pushing, characterAnimations.rule(Predicate.MOVING_DOWN))
            grid.move(Pushing, 0, 1)
        else:
            grid.move(sprites.read_data_sprite(Something, "S-Control"), 0, -1)
            if Pusher.kind() == SpriteKind.Box:
                characterAnimations.set_character_state(Pusher, characterAnimations.rule(Predicate.MOVING_UP))
                grid.move(Pusher, 0, -1)
    if characterAnimations.matches_rule(Pusher, characterAnimations.rule(Predicate.MOVING_UP)):
        if not (tiles.tile_at_location_is_wall(grid.add(grid.get_location(Pushing), 0, -1))):
            characterAnimations.set_character_state(Pushing, characterAnimations.rule(Predicate.MOVING_UP))
            grid.move(Pushing, 0, -1)
        else:
            grid.move(sprites.read_data_sprite(Something, "S-Control"), 0, 1)
            if Pusher.kind() == SpriteKind.Box:
                characterAnimations.set_character_state(Pusher, characterAnimations.rule(Predicate.MOVING_DOWN))
                grid.move(Pusher, 0, 1)
    
    def on_after():
        sprites.set_data_boolean(Pushing, "RecentlyPushed", False)
    timer.after(100, on_after)
    
    
    def on_background():
        pass
    timer.background(on_background)
    

def on_create_renderable(screen2):
    if lvl >= 17 and not (lvl == 99):
        screen2.replace(11, 8)
        screen2.replace(15, 12)
spriteutils.create_renderable(0, on_create_renderable)

def on_overlap_tile2(sprite2, location2):
    Customeffects("Fall", sprite2, True, 1, 1, 100)
    sprites.destroy(sprite2)
    tiles.set_tile_at(location2, assets.tile("""
        BoxCovering Pit
        """))
scene.on_overlap_tile(SpriteKind.Box,
    assets.tile("""
        Pit
        """),
    on_overlap_tile2)

def on_overlap_tile3(sprite3, location3):
    if sprites.read_data_string(sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand"),
        "I-Type") == "Key":
        tiles.set_tile_at(location3, assets.tile("""
            transparency8
            """))
        Customeffects("Twinkle", sprite3, True, 1, 1, 200)
        sprites.set_data_string(sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand"),
            "I-Type",
            "Null")
        sprites.destroy(sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand"))
    else:
        if characterAnimations.matches_rule(sprites.read_data_sprite(Something, "S-Control"),
            characterAnimations.rule(Predicate.MOVING_LEFT)):
            grid.move(sprites.read_data_sprite(Something, "S-Control"), 1, 0)
        if characterAnimations.matches_rule(sprites.read_data_sprite(Something, "S-Control"),
            characterAnimations.rule(SpriteKind.player)):
            grid.move(sprites.read_data_sprite(Something, "S-Control"), -1, 0)
        if characterAnimations.matches_rule(sprites.read_data_sprite(Something, "S-Control"),
            characterAnimations.rule(Predicate.MOVING_UP)):
            grid.move(sprites.read_data_sprite(Something, "S-Control"), 0, 1)
        if characterAnimations.matches_rule(sprites.read_data_sprite(Something, "S-Control"),
            characterAnimations.rule(Predicate.MOVING_DOWN)):
            grid.move(sprites.read_data_sprite(Something, "S-Control"), 0, -1)
scene.on_overlap_tile(SpriteKind.player,
    assets.tile("""
        Lock
        """),
    on_overlap_tile3)

def on_on_overlap(sprite4, otherSprite):
    if controller.A.is_pressed():
        sprites.set_data_sprite(sprite4, "H-Hand", otherSprite)
        music.play(music.create_sound_effect(WaveShape.NOISE,
                1,
                973,
                98,
                0,
                100,
                SoundExpressionEffect.VIBRATO,
                InterpolationCurve.LINEAR),
            music.PlaybackMode.IN_BACKGROUND)
sprites.on_overlap(SpriteKind.player, SpriteKind.Item, on_on_overlap)

def on_overlap_tile4(sprite5, location4):
    tiles.set_tile_at(location4, assets.tile("""
        transparency8
        """))
    tiles.set_wall_at(location4, False)
scene.on_overlap_tile(SpriteKind.food,
    assets.tile("""
        Cannon LR
        """),
    on_overlap_tile4)

def on_overlap_tile5(sprite6, location5):
    tiles.set_tile_at(location5, assets.tile("""
        transparency8
        """))
    Customeffects("Twinkle", sprite6, True, 1, 1, 500)
    SwapBlocks(1)
scene.on_overlap_tile(SpriteKind.player,
    assets.tile("""
        RButton2
        """),
    on_overlap_tile5)

def on_b_pressed():
    global Placeholder
    if sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand") != spriteutils.null_consts(spriteutils.NullConsts.NULL):
        sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand").set_position(sprites.read_data_sprite(Something, "S-Control").x,
            sprites.read_data_sprite(Something, "S-Control").y)
        Placeholder = sprites.create(assets.image("""
            Door Open
            """), SpriteKind.Item)
        sprites.set_data_sprite(sprites.read_data_sprite(Something, "S-Control"),
            "H-Hand",
            Placeholder)
        sprites.destroy(Placeholder)
        music.play(music.create_sound_effect(WaveShape.SQUARE,
                694,
                583,
                59,
                0,
                100,
                SoundExpressionEffect.NONE,
                InterpolationCurve.LINEAR),
            music.PlaybackMode.IN_BACKGROUND)
controller.B.on_event(ControllerButtonEvent.PRESSED, on_b_pressed)

def on_menu_pressed():
    Level(lvl)
controller.menu.on_event(ControllerButtonEvent.PRESSED, on_menu_pressed)

def ColorGrid(Color1: number, Color2: number):
    global picture
    picture = assets.image("""
        BG
        """)
    picture.replace(1, Color1)
    scene.set_background_image(picture)
    scene.set_background_color(Color2)

def on_a_pressed():
    if mySprite:
        if not (sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand") == spriteutils.null_consts(spriteutils.NullConsts.NULL)):
            Use_Item(sprites.read_data_string(sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand"),
                    "I-Type"))
controller.A.on_event(ControllerButtonEvent.PRESSED, on_a_pressed)

def on_overlap_tile6(sprite7, location6):
    tiles.set_tile_at(location6, assets.tile("""
        TeleporterOff
        """))
    sprite7.set_flag(SpriteFlag.GHOST_THROUGH_TILES, True)
    tiles.place_on_random_tile(sprite7, assets.tile("""
        Teleporter
        """))
    grid.place(sprite7, sprite7.tilemap_location())
    tiles.set_tile_at(grid.get_location(sprite7),
        assets.tile("""
            TeleporterOff
            """))
    sprite7.set_flag(SpriteFlag.GHOST_THROUGH_TILES, False)
    
    def on_background2():
        tiles.set_tile_at(location6, assets.tile("""
            Teleporter
            """))
        
        def on_pause_until():
            pass
        pause_until(on_pause_until)
        
        for value in tiles.get_tiles_by_type(assets.tile("""
            TeleporterOff
            """)):
            tiles.set_tile_at(value, assets.tile("""
                Teleporter
                """))
    timer.background(on_background2)
    
scene.on_overlap_tile(SpriteKind.Box,
    assets.tile("""
        Teleporter
        """),
    on_overlap_tile6)

def on_overlap_tile7(sprite8, location7):
    if sprites.read_data_string(sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand"),
        "I-Type") == "Key":
        tiles.set_tile_at(location7, assets.tile("""
            Exit
            """))
        Customeffects("Twinkle", sprite8, True, 1, 1, 200)
        sprites.set_data_string(sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand"),
            "I-Type",
            "Null")
        sprites.destroy(sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand"))
scene.on_overlap_tile(SpriteKind.player,
    assets.tile("""
        Lock0
        """),
    on_overlap_tile7)

def on_left_pressed():
    if not (tiles.tile_at_location_is_wall(tiles.get_tile_location(-1 + sprites.read_data_sprite(Something, "S-Control").tilemap_location().column,
            sprites.read_data_sprite(Something, "S-Control").tilemap_location().row))):
        Customeffects("Steps",
            sprites.read_data_sprite(Something, "S-Control"),
            False,
            sprites.read_data_sprite(Something, "S-Control").x,
            sprites.read_data_sprite(Something, "S-Control").y,
            400)
        grid.move(sprites.read_data_sprite(Something, "S-Control"), -1, 0)
        music.play(music.create_sound_effect(WaveShape.NOISE,
                randint(300, 350),
                0,
                127,
                0,
                100,
                SoundExpressionEffect.NONE,
                InterpolationCurve.LINEAR),
            music.PlaybackMode.IN_BACKGROUND)
controller.left.on_event(ControllerButtonEvent.PRESSED, on_left_pressed)

def SwapBlocks(Stage: number):
    if 1 == Stage:
        tiles.replace_all_tiles(assets.tile("""
                RedTileOFF
                """),
            assets.tile("""
                HiddenGem
                """))
        tiles.replace_all_tiles(assets.tile("""
                RedTileOn0
                """),
            assets.tile("""
                RedTileOFF
                """))
        tiles.replace_all_tiles(assets.tile("""
                HiddenGem
                """),
            assets.tile("""
                RedTileOn0
                """))
        for value2 in tiles.get_tiles_by_type(assets.tile("""
            RedTileOFF
            """)):
            Customeffects("Twinkle",
                mySprite,
                False,
                4 + 8 * value2.column,
                4 + 8 * value2.row,
                100)
            tiles.set_wall_at(value2, False)
        for value22 in tiles.get_tiles_by_type(assets.tile("""
            RedTileOn0
            """)):
            Customeffects("Twinkle",
                mySprite,
                False,
                4 + 8 * value22.column,
                4 + 8 * value22.row,
                100)
            tiles.set_wall_at(value22, True)
        music.play(music.create_sound_effect(WaveShape.NOISE,
                839,
                0,
                255,
                0,
                200,
                SoundExpressionEffect.NONE,
                InterpolationCurve.LINEAR),
            music.PlaybackMode.IN_BACKGROUND)
    elif 2 == Stage:
        music.play(music.create_sound_effect(WaveShape.TRIANGLE,
                692,
                1,
                131,
                0,
                200,
                SoundExpressionEffect.NONE,
                InterpolationCurve.LINEAR),
            music.PlaybackMode.IN_BACKGROUND)
        tiles.replace_all_tiles(assets.tile("""
                BlueTileOFF
                """),
            assets.tile("""
                HiddenGem
                """))
        tiles.replace_all_tiles(assets.tile("""
                BlueTileOn
                """),
            assets.tile("""
                BlueTileOFF
                """))
        tiles.replace_all_tiles(assets.tile("""
                HiddenGem
                """),
            assets.tile("""
                BlueTileOn
                """))
        for value3 in tiles.get_tiles_by_type(assets.tile("""
            BlueTileOFF
            """)):
            Customeffects("Wand",
                mySprite,
                False,
                4 + 8 * value3.column,
                4 + 8 * value3.row,
                100)
            tiles.set_wall_at(value3, False)
        for value23 in tiles.get_tiles_by_type(assets.tile("""
            BlueTileOn
            """)):
            Customeffects("Wand",
                mySprite,
                False,
                4 + 8 * value23.column,
                4 + 8 * value23.row,
                100)
            tiles.set_wall_at(value23, True)
    else:
        pass

def on_on_overlap2(sprite9, otherSprite2):
    if sprites.read_data_boolean(otherSprite2, "RecentlyPushed"):
        PushTiles(otherSprite2, sprite9)
        sprites.set_data_boolean(otherSprite2, "RecentlyPushed", False)
    elif sprites.read_data_boolean(sprite9, "RecentlyPushed"):
        PushTiles(sprite9, otherSprite2)
        sprites.set_data_boolean(sprite9, "RecentlyPushed", False)
sprites.on_overlap(SpriteKind.Box, SpriteKind.Box, on_on_overlap2)

def Use_Item(Text: str):
    global Placeholder, PlayCutScene
    if Text == "Sword":
        Placeholder = sprites.create(img("""
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                """),
            SpriteKind.food)
        Placeholder.set_flag(SpriteFlag.GHOST_THROUGH_WALLS, True)
        Placeholder.set_position(sprites.read_data_sprite(Something, "S-Control").x,
            sprites.read_data_sprite(Something, "S-Control").y)
        animation.run_image_animation(Placeholder,
            [img("""
                    . . . . . . . . . . . . . .
                    . . . 4 4 4 4 . . 4 4 . . .
                    . . 4 1 1 1 . . 1 1 1 4 . .
                    . 4 1 . . . . . . . . 1 4 .
                    . 4 1 . . . . . . . . 1 4 .
                    . . 1 . . . . . . . . 1 4 .
                    . . . . . . . . . . . . 4 .
                    . 4 . . . . . . . . . . . .
                    . 4 1 . . . . . . . . 1 . .
                    . 4 1 . . . . . . . . 1 4 .
                    . 4 1 . . . . . . . . 1 4 .
                    . . 4 1 1 1 . . 1 1 1 4 . .
                    . . . 4 4 . . 4 4 4 4 . . .
                    . . . . . . . . . . . . . .
                    """),
                img("""
                    . . . . . . . . . . . . . .
                    . . . 4 4 4 4 4 . . 4 . . .
                    . . 4 1 1 1 1 . . 1 1 4 . .
                    . 4 1 . . . . . . . . 1 4 .
                    . . 1 . . . . . . . . 1 4 .
                    . . . . . . . . . . . 1 4 .
                    . 4 . . . . . . . . . 1 4 .
                    . 4 1 . . . . . . . . . 4 .
                    . 4 1 . . . . . . . . . . .
                    . 4 1 . . . . . . . . 1 . .
                    . 4 1 . . . . . . . . 1 4 .
                    . . 4 1 1 . . 1 1 1 1 4 . .
                    . . . 4 . . 4 4 4 4 4 . . .
                    . . . . . . . . . . . . . .
                    """),
                img("""
                    . . . . . . . . . . . . . .
                    . . . . 4 4 4 4 4 4 4 . . .
                    . . . 4 1 1 1 1 1 1 . . . .
                    . 4 . . . . . . . . . 4 . .
                    . 4 1 . . . . . . . . 1 4 .
                    . 4 1 . . . . . . . . 1 4 .
                    . 4 1 . . . . . . . . 1 4 .
                    . 4 1 . . . . . . . . 1 4 .
                    . 4 1 . . . . . . . . 1 4 .
                    . 4 1 . . . . . . . . 1 4 .
                    . . 4 . . . . . . . . . 4 .
                    . . . . 1 1 1 1 1 1 4 . . .
                    . . . 4 4 4 4 4 4 4 . . . .
                    . . . . . . . . . . . . . .
                    """),
                img("""
                    . . . . . . . . . . . . . .
                    . . . . 4 4 4 4 . . . . . .
                    . . . 4 1 1 1 1 1 4 4 . . .
                    . . 4 1 . . . . . . 1 4 . .
                    . . 4 . . . . . . . . 1 4 .
                    . . 1 . . . . . . . . 1 4 .
                    . 4 1 . . . . . . . . 1 4 .
                    . 4 1 . . . . . . . . 1 4 .
                    . 4 1 . . . . . . . . 1 . .
                    . 4 1 . . . . . . . . 4 . .
                    . . 4 1 . . . . . . 1 4 . .
                    . . . 4 4 1 1 1 1 1 4 . . .
                    . . . . . . 4 4 4 4 . . . .
                    . . . . . . . . . . . . . .
                    """),
                img("""
                    . . . . . . . . . . . . . .
                    . . . . 4 . . . . . . . . .
                    . . . 4 1 4 4 4 4 4 4 . . .
                    . . 4 1 1 . 1 1 1 1 1 4 . .
                    . . 4 1 . . . . . . 1 1 4 .
                    . . 4 1 . . . . . . . 4 . .
                    . . 4 1 . . . . . . 1 4 . .
                    . . 4 1 . . . . . . 1 4 . .
                    . . 4 . . . . . . . 1 4 . .
                    . 4 1 1 . . . . . . 1 4 . .
                    . . 4 1 1 1 1 1 . 1 1 4 . .
                    . . . 4 4 4 4 4 4 1 4 . . .
                    . . . . . . . . . 4 . . . .
                    . . . . . . . . . . . . . .
                    """),
                img("""
                    . . . . . . . . . . . . . .
                    . . . . . . . . . . . . . .
                    . . . . 4 4 4 4 4 4 . . . .
                    . . . 4 1 1 1 1 1 1 4 . . .
                    . . 4 1 1 . . . . 1 1 4 . .
                    . . 4 1 . . . . . . 1 4 . .
                    . . 4 1 . . . . . . 1 4 . .
                    . . 4 1 . . . . . . 1 4 . .
                    . . 4 1 . . . . . . 1 4 . .
                    . . 4 1 1 . . . . 1 1 4 . .
                    . . . 4 1 1 1 1 1 1 4 . . .
                    . . . . 4 4 4 4 4 4 . . . .
                    . . . . . . . . . . . . . .
                    . . . . . . . . . . . . . .
                    """),
                img("""
                    . . . . . . . . . . . . . .
                    . . . . . . . . . . . . . .
                    . . . . . . . . . . . . . .
                    . . . . . 4 4 4 4 . . . . .
                    . . . . 4 1 1 1 1 4 . . . .
                    . . . 4 1 . . . . 1 4 . . .
                    . . . 4 1 . . . . 1 4 . . .
                    . . . 4 1 . . . . 1 4 . . .
                    . . . 4 1 . . . . 1 4 . . .
                    . . . . 4 1 1 1 1 4 . . . .
                    . . . . . 4 4 4 4 . . . . .
                    . . . . . . . . . . . . . .
                    . . . . . . . . . . . . . .
                    . . . . . . . . . . . . . .
                    """)],
            100,
            False)
        music.play(music.create_sound_effect(WaveShape.SAWTOOTH,
                randint(770, 800),
                0,
                98,
                0,
                100,
                SoundExpressionEffect.NONE,
                InterpolationCurve.LINEAR),
            music.PlaybackMode.IN_BACKGROUND)
        Placeholder.lifespan = 700
    elif Text == "Book":
        PlayCutScene = True
        Level(99)
    else:
        pass
def CutScene(Text1: str, Text2: str, Background: Image, Time: number):
    global textSprite, textSprite2
    if PlayCutScene:
        mySprite.set_flag(SpriteFlag.INVISIBLE, True)
        tiles.load_map(tiles.create_small_map(tilemap("""
            EmptyTilemap
            """)))
        scene.set_background_image(Background)
        scene.set_background_color(15)
        textSprite = textsprite.create(Text1, 0, 15)
        textSprite2 = textsprite.create(Text2, 0, 15)
        textSprite.scale = 0
        textSprite2.scale = 0
        textSprite.set_outline(1, 1)
        textSprite2.set_outline(1, 1)
        textSprite.set_position(80, 50)
        textSprite2.set_position(80, 70)
        for index in range(10):
            textSprite.scale += 0.1
            textSprite2.scale += 0.1
            pause(50)
        pause(Time)
        for index2 in range(10):
            textSprite.scale += -0.1
            textSprite2.scale += -0.1
            pause(50)
        sprites.destroy(textSprite)
        sprites.destroy(textSprite2)
        mySprite.set_flag(SpriteFlag.INVISIBLE, False)
        scene.set_background_color(15)

def on_overlap_tile8(sprite10, location8):
    SwapBlocks(2)
    tiles.set_tile_at(location8, assets.tile("""
        BButtonPressed
        """))
    Customeffects("Wand", sprite10, True, 1, 1, 200)
    
    def on_background3():
        
        def on_pause_until2():
            pass
        pause_until(on_pause_until2)
        
        tiles.set_tile_at(location8, assets.tile("""
            BButton
            """))
    timer.background(on_background3)
    
scene.on_overlap_tile(SpriteKind.player,
    assets.tile("""
        BButton
        """),
    on_overlap_tile8)

def on_overlap_tile9(sprite11, location9):
    global Placeholder
    if sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand") != spriteutils.null_consts(spriteutils.NullConsts.NULL):
        sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand").set_position(sprites.read_data_sprite(Something, "S-Control").x,
            sprites.read_data_sprite(Something, "S-Control").y)
        Placeholder = sprites.create(assets.image("""
            Door Open
            """), SpriteKind.Item)
        sprites.set_data_sprite(sprites.read_data_sprite(Something, "S-Control"),
            "H-Hand",
            Placeholder)
        sprites.destroy(Placeholder)
        music.play(music.create_sound_effect(WaveShape.SQUARE,
                694,
                583,
                59,
                0,
                100,
                SoundExpressionEffect.NONE,
                InterpolationCurve.LINEAR),
            music.PlaybackMode.IN_BACKGROUND)
    tiles.set_tile_at(location9, assets.tile("""
        TeleporterOff
        """))
    sprite11.set_flag(SpriteFlag.GHOST_THROUGH_TILES, True)
    tiles.place_on_random_tile(sprite11, assets.tile("""
        Teleporter
        """))
    grid.place(sprite11, sprite11.tilemap_location())
    tiles.set_tile_at(grid.get_location(sprite11),
        assets.tile("""
            TeleporterOff
            """))
    sprite11.set_flag(SpriteFlag.GHOST_THROUGH_TILES, False)
    
    def on_background4():
        tiles.set_tile_at(location9, assets.tile("""
            Teleporter
            """))
        
        def on_pause_until3():
            pass
        pause_until(on_pause_until3)
        
        for value4 in tiles.get_tiles_by_type(assets.tile("""
            TeleporterOff
            """)):
            tiles.set_tile_at(value4, assets.tile("""
                Teleporter
                """))
    timer.background(on_background4)
    
scene.on_overlap_tile(SpriteKind.player,
    assets.tile("""
        Teleporter
        """),
    on_overlap_tile9)

def Customeffects(Type: str, Sprite2: Sprite, Onsprite: bool, X: number, Y: number, Time2: number):
    global myEffect
    myEffect.z = -5
    if Type == "Steps":
        myEffect = extraEffects.create_custom_spread_effect_data([1, 11],
            True,
            [3, 2, 1],
            extraEffects.create_percentage_range(0, 0),
            extraEffects.create_percentage_range(0, 0),
            extraEffects.create_time_range(200, 300),
            0,
            0,
            extraEffects.create_percentage_range(50, 100),
            0,
            0,
            200)
    elif Type == "Wand":
        myEffect = extraEffects.create_custom_spread_effect_data([9, 8, 6],
            False,
            extraEffects.create_shrinking_size_table(8),
            extraEffects.create_percentage_range(0, 0),
            extraEffects.create_percentage_range(20, 20),
            extraEffects.create_time_range(200, 600),
            0,
            0,
            extraEffects.create_percentage_range(50, 100),
            0,
            0,
            500)
    elif Type == "Twinkle":
        myEffect.z = 4
        myEffect = extraEffects.create_custom_spread_effect_data([2, 4, 5],
            True,
            extraEffects.create_shrinking_size_table(8),
            extraEffects.create_percentage_range(0, 0),
            extraEffects.create_percentage_range(20, 20),
            extraEffects.create_time_range(200, 600),
            0,
            0,
            extraEffects.create_percentage_range(50, 100),
            0,
            0,
            500)
    elif Type == "Victory":
        myEffect = extraEffects.create_custom_spread_effect_data([14, 14, 13, 13, 7],
            False,
            [1, 4, 8, 4, 1],
            extraEffects.create_percentage_range(40, 40),
            extraEffects.create_percentage_range(0, 0),
            extraEffects.create_time_range(1000, 1000))
    elif Type == "Fadeout":
        myEffect.z = 4
        myEffect = extraEffects.create_custom_spread_effect_data([15],
            False,
            extraEffects.create_growing_size_table(450),
            extraEffects.create_percentage_range(0, 0),
            extraEffects.create_percentage_range(0, 0),
            extraEffects.create_time_range(1500, 1500))
    elif Type == "Fadein":
        myEffect.z = 5
        myEffect = extraEffects.create_custom_spread_effect_data([15, 15, 15, 15, 15, 15, 1],
            False,
            extraEffects.create_shrinking_size_table(450),
            extraEffects.create_percentage_range(0, 0),
            extraEffects.create_percentage_range(0, 0),
            extraEffects.create_time_range(1500, 1500))
    elif Type == "fall":
        myEffect = extraEffects.create_custom_spread_effect_data([0, 15, 15],
            False,
            extraEffects.create_shrinking_size_table(8),
            extraEffects.create_percentage_range(0, 0),
            extraEffects.create_percentage_range(0, 0),
            extraEffects.create_time_range(500, 500))
    elif Type == "Explode":
        myEffect = extraEffects.create_custom_spread_effect_data([2, 5, 4, 0],
            True,
            extraEffects.create_shrinking_size_table(24),
            extraEffects.create_percentage_range(0, 0),
            extraEffects.create_percentage_range(30, 30),
            extraEffects.create_time_range(500, 500))
    else:
        pass
    if Onsprite:
        extraEffects.create_spread_effect_on_anchor(Sprite2, myEffect, Time2)
    else:
        extraEffects.create_spread_effect_at(myEffect, X, Y, Time2)

def on_overlap_tile10(sprite12, location10):
    global lvl
    tiles.set_tile_at(location10, assets.tile("""
        transparency8
        """))
    Customeffects("Victory", sprite12, True, 1, 1, 1000)
    Customeffects("Victory", sprite12, True, 1, 1, 1000)
    music.play(music.string_playable("F - F E F G B - ", 320),
        music.PlaybackMode.IN_BACKGROUND)
    lvl += 1
    
    def on_after2():
        Customeffects("Fadeout", sprite12, True, 0, 0, 1000)
        music.play(music.create_sound_effect(WaveShape.SINE,
                1,
                520,
                145,
                0,
                2000,
                SoundExpressionEffect.NONE,
                InterpolationCurve.LINEAR),
            music.PlaybackMode.IN_BACKGROUND)
    timer.after(2000, on_after2)
    
    
    def on_after3():
        global PlayCutScene
        PlayCutScene = True
        Level(lvl)
    timer.after(3500, on_after3)
    
scene.on_overlap_tile(SpriteKind.player,
    assets.tile("""
        Exit
        """),
    on_overlap_tile10)

def Level(Lvl: number):
    global textSprite, Placeholder, PlayCutScene, PlayerBoxes
    mySprite.scale = 1
    scene.set_background_color(15)
    mySprite.set_flag(SpriteFlag.GHOST_THROUGH_TILES, False)
    mySprite.set_flag(SpriteFlag.GHOST_THROUGH_SPRITES, False)
    sprites.set_data_sprite(Something, "S-Control", mySprite)
    sprites.destroy_all_sprites_of_kind(SpriteKind.Box)
    sprites.destroy_all_sprites_of_kind(SpriteKind.text)
    sprites.destroy_all_sprites_of_kind(SpriteKind.Item)
    sprites.destroy_all_sprites_of_kind(SpriteKind.enemy)
    for value32 in tiles.get_tiles_by_type(assets.tile("""
        BButton
        """)):
        tiles.set_tile_at(value32, assets.tile("""
            transparency8
            """))
    for value33 in tiles.get_tiles_by_type(assets.tile("""
        BButtonPressed
        """)):
        tiles.set_tile_at(value33, assets.tile("""
            transparency8
            """))
    if Lvl == 0:
        tiles.load_map(tiles.create_small_map(tilemap("""
            level3
            """)))
        textSprite = textsprite.create("Menu to reset", 0, 12)
        textSprite.set_position(100, 10)
    elif Lvl == 1:
        textSprite = textsprite.create("Red is one time use", 0, 12)
        textSprite.set_position(80, 110)
        tiles.load_map(tiles.create_small_map(tilemap("""
            level8
            """)))
    elif Lvl == 2:
        tiles.load_map(tiles.create_small_map(tilemap("""
            level12
            """)))
    elif Lvl == 3:
        textSprite = textsprite.create("Blue toggles on and off", 0, 12)
        textSprite.set_position(80, 20)
        tiles.load_map(tiles.create_small_map(tilemap("""
            level6
            """)))
    elif Lvl == 4:
        CutScene("You have Done well",
            "So far. . .",
            img("""
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                """),
            2000)
        tiles.load_map(tiles.create_small_map(tilemap("""
            level25
            """)))
    elif Lvl == 5:
        tiles.load_map(tiles.create_small_map(tilemap("""
            level10
            """)))
    elif Lvl == 6:
        tiles.load_map(tiles.create_small_map(tilemap("""
            level23
            """)))
    elif Lvl == 7:
        CutScene("To easy for you?",
            "Lets make this intresting",
            img("""
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                """),
            4000)
        textSprite = textsprite.create("Boxes Can Cover Pits", 0, 12)
        textSprite.set_position(80, 20)
        tiles.load_map(tiles.create_small_map(tilemap("""
            level15
            """)))
        textSprite = textsprite.create("Pick up With A", 0, 12)
        textSprite.set_position(80, 100)
    elif Lvl == 8:
        tiles.load_map(tiles.create_small_map(tilemap("""
            level27
            """)))
    elif Lvl == 9:
        tiles.load_map(tiles.create_small_map(tilemap("""
            level9
            """)))
    elif Lvl == 10:
        CutScene("Not Bad ",
            "Most make it this far",
            img("""
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                """),
            3000)
        CutScene("Then Again ",
            "Your not most are you?",
            img("""
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                """),
            3000)
        tiles.load_map(tiles.create_small_map(tilemap("""
            level17
            """)))
    elif Lvl == 11:
        CutScene("A Knight Driven by Mind",
            "Not War or battle",
            img("""
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                """),
            3000)
        CutScene("Maybe you are worthy",
            "Only time will tell",
            img("""
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                """),
            4000)
        textSprite = textsprite.create("", 0, 12)
        tiles.load_map(tiles.create_small_map(tilemap("""
            level20
            """)))
    elif Lvl == 12:
        tiles.load_map(tiles.create_small_map(tilemap("""
            level21
            """)))
    elif Lvl == 13:
        tiles.load_map(tiles.create_small_map(tilemap("""
            level13
            """)))
    elif Lvl == 14:
        textSprite = textsprite.create("Doors > Keys", 0, 12)
        textSprite.set_position(80, 110)
        tiles.load_map(tiles.create_small_map(tilemap("""
            level26
            """)))
    elif Lvl == 15:
        tiles.load_map(tiles.create_small_map(tilemap("""
            level7
            """)))
    elif Lvl == 16:
        CutScene("The last of our tricks",
            "Now can you use them?",
            img("""
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                """),
            4000)
        textSprite = textsprite.create("Swords break Weak objects", 0, 12)
        textSprite.set_position(80, 100)
        textSprite = textsprite.create("B to Drop", 0, 12)
        textSprite.set_position(100, 15)
        tiles.load_map(tiles.create_small_map(tilemap("""
            level28
            """)))
    elif Lvl == 17:
        CutScene("The Final Stretch",
            "Only 5 More Floors",
            img("""
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                """),
            3000)
        tiles.load_map(tiles.create_small_map(tilemap("""
            level22
            """)))
    elif Lvl == 18:
        tiles.load_map(tiles.create_small_map(tilemap("""
            level11
            """)))
    elif Lvl == 19:
        tiles.load_map(tiles.create_small_map(tilemap("""
            level29
            """)))
    elif Lvl == 20:
        tiles.load_map(tiles.create_small_map(tilemap("""
            level33
            """)))
    elif Lvl == 21:
        CutScene("The final Floor",
            "we watch with Anticipation",
            img("""
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                """),
            3000)
        tiles.load_map(tiles.create_small_map(tilemap("""
            level37
            """)))
    elif Lvl == 22:
        tiles.load_map(tiles.create_small_map(tilemap("""
            level41
            """)))
        Placeholder = sprites.create(img("""
                . 6 2 2 2 2 2 .
                . 6 2 c c c 2 .
                . 6 2 c c c 2 .
                . c b b 2 2 2 .
                . c b c c c b .
                . c b b b b b .
                . c b b b b b .
                . c b b b b b .
                """),
            SpriteKind.Item)
        Placeholder.set_position(80, 30)
        sprites.set_data_string(Placeholder, "I-Type", "Book")
    elif Lvl == 99:
        CutScene("As You Open the book",
            "Your mind fills with knowledge",
            img("""
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                """),
            4000)
        game.set_dialog_frame(img("""
            ffffffffffffffffffffffff
            ffffffffffffffffffffffff
            fffbbbbbbbbbbbbbbbbbbfff
            ffbffffffffffffffffffbff
            ffbfbbbbbbbbbbbbbbbbfbff
            ffbfbbbbbbbbbbbbbbbbfbff
            ffbfbbbbbbbbbbbbbbbbfbff
            ffbfbbbbbbbbbbbbbbbbfbff
            ffbfbbbbbbbbbbbbbbbbfbff
            ffbfbbbbbbbbbbbbbbbbfbff
            ffbfbbbbbbbbbbbbbbbbfbff
            ffbfbbbbbbbbbbbbbbbbfbff
            ffbfbbbbbbbbbbbbbbbbfbff
            ffbfbbbbbbbbbbbbbbbbfbff
            ffbfbbbbbbbbbbbbbbbbfbff
            ffbfbbbbbbbbbbbbbbbbfbff
            ffbfbbbbbbbbbbbbbbbbfbff
            ffbfbbbbbbbbbbbbbbbbfbff
            ffbfbbbbbbbbbbbbbbbbfbff
            ffbfbbbbbbbbbbbbbbbbfbff
            ffbffffffffffffffffffbff
            fffbbbbbbbbbbbbbbbbbbfff
            ffffffffffffffffffffffff
            ffffffffffffffffffffffff
            """))
        game.show_long_text("As you Exit the dungeon Enlighted with knowledge you Wander the world spreading it with all",
            DialogLayout.FULL)
        game.show_long_text("Teaching people to understand there world and how to make it a better place for all ",
            DialogLayout.FULL)
        game.show_long_text("learning humanizes character and prevents it from being cruel So learn on Enlighted Warrior",
            DialogLayout.FULL)
        tiles.load_map(tiles.create_small_map(tilemap("""
            level46
            """)))
        textSprite = textsprite.create("Thank you for playing!", 0, 15)
        textSprite.set_outline(1, 1)
        textSprite.set_position(80, 10)
        textSprite = textsprite.create("I hope you enjoyed it", 0, 15)
        textSprite.set_position(80, 100)
        textSprite.set_outline(1, 1)
        textSprite = textsprite.create("-ADM_F", 0, 8)
        textSprite.set_outline(1, 9)
        textSprite.set_position(100, 110)
    else:
        tiles.load_map(tiles.create_small_map(tilemap("""
            level16
            """)))
    if Lvl < 17:
        ColorGrid(11, 1)
    if Lvl >= 17:
        ColorGrid(6, 8)
    if Lvl == 99:
        ColorGrid(11, 1)
    for value34 in tiles.get_tiles_by_type(assets.tile("""
        Box
        """)):
        Placeholder = sprites.create(assets.image("""
            BoxSprite
            """), SpriteKind.Box)
        grid.place(Placeholder,
            tiles.get_tile_location(value34.column, value34.row))
    for value35 in tiles.get_tiles_by_type(assets.tile("""
        Key
        """)):
        Placeholder = sprites.create(assets.image("""
            Key
            """), SpriteKind.Item)
        sprites.set_data_string(Placeholder, "I-Type", "Key")
        grid.place(Placeholder,
            tiles.get_tile_location(value35.column, value35.row))
        tiles.set_tile_at(value35, assets.tile("""
            transparency8
            """))
    for value36 in tiles.get_tiles_by_type(assets.tile("""
        SwordTile
        """)):
        Placeholder = sprites.create(assets.image("""
            Sword-
            """), SpriteKind.Item)
        sprites.set_data_string(Placeholder, "I-Type", "Sword")
        grid.place(Placeholder,
            tiles.get_tile_location(value36.column, value36.row))
        tiles.set_tile_at(value36, assets.tile("""
            transparency8
            """))
    tiles.replace_all_tiles(assets.tile("""
            Box
            """),
        assets.tile("""
            transparency8
            """))
    for value42 in tiles.get_tiles_by_type(assets.tile("""
        StartingPoint
        """)):
        grid.place(mySprite,
            tiles.get_tile_location(value42.column, value42.row))
        tiles.set_tile_at(value42, assets.tile("""
            transparency8
            """))
    Customeffects("Fadein", mySprite, True, 0, 0, 1000)
    music.play(music.create_sound_effect(WaveShape.SINE,
            520,
            1,
            145,
            0,
            2000,
            SoundExpressionEffect.NONE,
            InterpolationCurve.LINEAR),
        music.PlaybackMode.IN_BACKGROUND)
    PlayCutScene = False
    PlayerBoxes = []
    PlayerBoxes.append(mySprite)
    for value5 in sprites.all_of_kind(SpriteKind.Box):
        PlayerBoxes.append(value5)

def on_on_overlap3(sprite13, otherSprite3):
    sprites.set_data_sprite(Something, "S-Control", Something)
    mySprite.set_velocity(otherSprite3.vx * 2, otherSprite3.vy * 2)
    sprite13.set_flag(SpriteFlag.GHOST_THROUGH_TILES, True)
    sprite13.set_flag(SpriteFlag.GHOST_THROUGH_SPRITES, True)
    
    def on_background5():
        Customeffects("Explode", sprite13, True, 1, 1, 600)
        sprite13.scale = 0
        scene.camera_shake(4, 200)
        music.play(music.melody_playable(music.big_crash),
            music.PlaybackMode.IN_BACKGROUND)
        pause(1000)
        Level(lvl)
    timer.background(on_background5)
    
sprites.on_overlap(SpriteKind.player, SpriteKind.enemy, on_on_overlap3)

def on_on_overlap4(sprite14, otherSprite4):
    otherSprite4.set_velocity(0, 0)
    otherSprite4.set_flag(SpriteFlag.GHOST_THROUGH_SPRITES, True)
sprites.on_overlap(SpriteKind.Box, SpriteKind.enemy, on_on_overlap4)

def on_right_pressed():
    if Something:
        if not (tiles.tile_at_location_is_wall(tiles.get_tile_location(1 + sprites.read_data_sprite(Something, "S-Control").tilemap_location().column,
                sprites.read_data_sprite(Something, "S-Control").tilemap_location().row))):
            Customeffects("Steps",
                sprites.read_data_sprite(Something, "S-Control"),
                False,
                sprites.read_data_sprite(Something, "S-Control").x,
                sprites.read_data_sprite(Something, "S-Control").y,
                400)
            grid.move(sprites.read_data_sprite(Something, "S-Control"), 1, 0)
            music.play(music.create_sound_effect(WaveShape.NOISE,
                    randint(300, 350),
                    0,
                    104,
                    0,
                    100,
                    SoundExpressionEffect.NONE,
                    InterpolationCurve.LINEAR),
                music.PlaybackMode.IN_BACKGROUND)
controller.right.on_event(ControllerButtonEvent.PRESSED, on_right_pressed)

def on_overlap_tile11(sprite15, location11):
    SwapBlocks(2)
    tiles.set_tile_at(location11, assets.tile("""
        BButtonPressed
        """))
    Customeffects("Wand", sprite15, True, 1, 1, 200)
    
    def on_background6():
        
        def on_pause_until4():
            pass
        pause_until(on_pause_until4)
        
        tiles.set_tile_at(location11, assets.tile("""
            BButton
            """))
    timer.background(on_background6)
    
scene.on_overlap_tile(SpriteKind.Box,
    assets.tile("""
        BButton
        """),
    on_overlap_tile11)

def on_overlap_tile12(sprite16, location12):
    tiles.set_tile_at(location12, assets.tile("""
        transparency8
        """))
    Customeffects("Twinkle", sprite16, True, 1, 1, 500)
    SwapBlocks(1)
scene.on_overlap_tile(SpriteKind.Box,
    assets.tile("""
        RButton
        """),
    on_overlap_tile12)

def on_overlap_tile13(sprite17, location13):
    mySprite.set_flag(SpriteFlag.GHOST_THROUGH_TILES, True)
    music.play(music.create_sound_effect(WaveShape.TRIANGLE,
            2954,
            0,
            122,
            0,
            1500,
            SoundExpressionEffect.NONE,
            InterpolationCurve.LOGARITHMIC),
        music.PlaybackMode.IN_BACKGROUND)
    
    def on_background7():
        for index3 in range(10):
            pause(100)
            mySprite.scale += -0.1
        pause(1000)
        music.play(music.melody_playable(music.big_crash),
            music.PlaybackMode.IN_BACKGROUND)
        Level(lvl)
    timer.background(on_background7)
    
scene.on_overlap_tile(SpriteKind.player,
    assets.tile("""
        Pit
        """),
    on_overlap_tile13)

def on_overlap_tile14(sprite18, location14):
    tiles.set_tile_at(location14, assets.tile("""
        transparency8
        """))
    tiles.set_wall_at(location14, False)
scene.on_overlap_tile(SpriteKind.food,
    assets.tile("""
        Cannon UD0
        """),
    on_overlap_tile14)

def on_up_pressed():
    if Something:
        if not (tiles.tile_at_location_is_wall(tiles.get_tile_location(sprites.read_data_sprite(Something, "S-Control").tilemap_location().column,
                -1 + sprites.read_data_sprite(Something, "S-Control").tilemap_location().row))):
            Customeffects("Steps",
                sprites.read_data_sprite(Something, "S-Control"),
                False,
                sprites.read_data_sprite(Something, "S-Control").x,
                sprites.read_data_sprite(Something, "S-Control").y,
                400)
            grid.move(sprites.read_data_sprite(Something, "S-Control"), 0, -1)
            music.play(music.create_sound_effect(WaveShape.NOISE,
                    randint(300, 350),
                    0,
                    127,
                    0,
                    100,
                    SoundExpressionEffect.NONE,
                    InterpolationCurve.LINEAR),
                music.PlaybackMode.IN_BACKGROUND)
controller.up.on_event(ControllerButtonEvent.PRESSED, on_up_pressed)

def on_on_overlap5(sprite19, otherSprite5):
    PushTiles(sprite19, otherSprite5)
sprites.on_overlap(SpriteKind.player, SpriteKind.Box, on_on_overlap5)

def on_down_pressed():
    if not (tiles.tile_at_location_is_wall(tiles.get_tile_location(sprites.read_data_sprite(Something, "S-Control").tilemap_location().column,
            1 + sprites.read_data_sprite(Something, "S-Control").tilemap_location().row))):
        Customeffects("Steps",
            sprites.read_data_sprite(Something, "S-Control"),
            False,
            sprites.read_data_sprite(Something, "S-Control").x,
            sprites.read_data_sprite(Something, "S-Control").y,
            400)
        grid.move(sprites.read_data_sprite(Something, "S-Control"), 0, 1)
        music.play(music.create_sound_effect(WaveShape.NOISE,
                randint(300, 350),
                0,
                113,
                0,
                100,
                SoundExpressionEffect.NONE,
                InterpolationCurve.LINEAR),
            music.PlaybackMode.IN_BACKGROUND)
controller.down.on_event(ControllerButtonEvent.PRESSED, on_down_pressed)

PlayerBoxes: List[Sprite] = []
picture: Image = None
myEffect: SpreadEffectData = None
mySprite: Sprite = None
Something: Sprite = None
textSprite2: TextSprite = None
textSprite: TextSprite = None
Placeholder: Sprite = None
lvl = 0
PlayCutScene = False
music.stop_all_sounds()
PlayCutScene = True
lvl = 0
scene.set_background_color(15)
Placeholder = sprites.create(assets.image("""
    Logo
    """), SpriteKind.PlaceHolder)
textSprite = textsprite.create("Press A to Start", 0, 1)
textSprite.set_position(80, 80)
textSprite2 = textsprite.create("Made by ADM_F", 0, 8)
textSprite2.set_position(100, 110)

def on_pause_until5():
    pass
pause_until(on_pause_until5)

if controller.right.is_pressed():
    Keybinds.set_simulator_keymap(Keybinds.PlayerNumber.ONE,
        Keybinds.CustomKey.W,
        Keybinds.CustomKey.S,
        Keybinds.CustomKey.A,
        Keybinds.CustomKey.D,
        Keybinds.CustomKey.F,
        Keybinds.CustomKey.G)
if controller.up.is_pressed():
    lvl = game.ask_for_number("Level Select ", 2)
sprites.destroy(textSprite2)
for index4 in range(10):
    Placeholder.scale += -0.1
    textSprite.scale += -0.1
    pause(50)
sprites.destroy(textSprite)
sprites.destroy(Placeholder)
Something = sprites.create(assets.image("""
    Empty
    """), SpriteKind.Stupid)
mySprite = sprites.create(assets.image("""
    Sir Blue
    """), SpriteKind.player)
sprites.set_data_sprite(Something, "S-Control", mySprite)
CurrentParty = [mySprite]
characterAnimations.loop_frames(mySprite,
    assets.animation("""
        BlueLeft
        """),
    300,
    characterAnimations.rule(Predicate.FACING_LEFT))
characterAnimations.loop_frames(mySprite,
    assets.animation("""
        BlueDown
        """),
    300,
    characterAnimations.rule(Predicate.FACING_DOWN))
characterAnimations.loop_frames(mySprite,
    assets.animation("""
        BlueUp
        """),
    300,
    characterAnimations.rule(Predicate.FACING_UP))
characterAnimations.loop_frames(mySprite,
    assets.animation("""
        BlueRight
        """),
    300,
    characterAnimations.rule(Predicate.FACING_RIGHT))
myEffect = extraEffects.create_custom_spread_effect_data([0, 0],
    False,
    extraEffects.create_preset_size_table(ExtraEffectPresetShape.SPARK),
    extraEffects.create_percentage_range(50, 100),
    extraEffects.create_percentage_range(50, 100),
    extraEffects.create_time_range(200, 400))
music.play(music.string_playable("G G F A B G A B ", 300),
    music.PlaybackMode.IN_BACKGROUND)
CutScene("Journey Onward",
    "Warrior Of Blue",
    img("""
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        . . . . . . . . . . . . . . . .
        """),
    2000)
music.play(music.create_song(assets.song("""
        Song1
        """)),
    music.PlaybackMode.LOOPING_IN_BACKGROUND)
Level(lvl)

def on_update_interval():
    global Placeholder
    for value6 in tiles.get_tiles_by_type(assets.tile("""
        Cannon LR
        """)):
        Placeholder = sprites.create(assets.image("""
            LaserSIDE
            """), SpriteKind.enemy)
        tiles.place_on_tile(Placeholder, value6)
        Placeholder.lifespan = 800
        Placeholder.z = -5
        Placeholder.vx = 75
        Placeholder = sprites.create(assets.image("""
            LaserSIDE
            """), SpriteKind.enemy)
        tiles.place_on_tile(Placeholder, value6)
        Placeholder.z = -5
        Placeholder.lifespan = 800
        Placeholder.vx = -75
    for value7 in tiles.get_tiles_by_type(assets.tile("""
        Cannon UD0
        """)):
        Placeholder = sprites.create(assets.image("""
            Laser UPDOWN
            """), SpriteKind.enemy)
        tiles.place_on_tile(Placeholder, value7)
        Placeholder.lifespan = 800
        Placeholder.vy = 75
        Placeholder.z = -5
        Placeholder = sprites.create(assets.image("""
            Laser UPDOWN
            """), SpriteKind.enemy)
        tiles.place_on_tile(Placeholder, value7)
        Placeholder.z = -5
        Placeholder.lifespan = 800
        Placeholder.vy = -75
game.on_update_interval(100, on_update_interval)

def on_on_update():
    if Something:
        Something.set_position(sprites.read_data_sprite(Something, "S-Control").x,
            sprites.read_data_sprite(Something, "S-Control").y - 7)
        if (characterAnimations.matches_rule(sprites.read_data_sprite(Something, "S-Control"),
            characterAnimations.rule(Predicate.FACING_RIGHT)) or characterAnimations.matches_rule(sprites.read_data_sprite(Something, "S-Control"),
            characterAnimations.rule(Predicate.FACING_DOWN))) and sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand") != spriteutils.null_consts(spriteutils.NullConsts.NULL):
            if sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"),
                "H-Offhand") != spriteutils.null_consts(spriteutils.NullConsts.NULL):
                sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"),
                    "H-Offhand").set_position(-1 + sprites.read_data_sprite(Something, "S-Control").x,
                    2 + sprites.read_data_sprite(Something, "S-Control").y)
            sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand").set_position(4 + sprites.read_data_sprite(Something, "S-Control").x,
                sprites.read_data_sprite(Something, "S-Control").y)
        elif (characterAnimations.matches_rule(sprites.read_data_sprite(Something, "S-Control"),
            characterAnimations.rule(Predicate.FACING_UP)) or characterAnimations.matches_rule(sprites.read_data_sprite(Something, "S-Control"),
            characterAnimations.rule(Predicate.FACING_LEFT))) and sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand") != spriteutils.null_consts(spriteutils.NullConsts.NULL):
            sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand").set_position(-3 + sprites.read_data_sprite(Something, "S-Control").x,
                sprites.read_data_sprite(Something, "S-Control").y)
            if sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"),
                "H-Offhand") != spriteutils.null_consts(spriteutils.NullConsts.NULL):
                sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"),
                    "H-Offhand").set_position(3 + sprites.read_data_sprite(Something, "S-Control").x,
                    2 + sprites.read_data_sprite(Something, "S-Control").y)
game.on_update(on_on_update)

这是一个基于MakeCode Arcade的"板条箱地牢"(Crate Dungeon)推箱子解谜游戏代码。

游戏概述
这是一个经典的推箱子解谜游戏,玩家控制蓝色骑士在地牢中移动箱子,解开各种机关谜题。

核心游戏机制
1. 角色控制与移动
python
def on_left_pressed():
def on_right_pressed():
def on_up_pressed():
def on_down_pressed():
网格化移动系统
移动时播放脚步声特效
碰撞检测防止穿墙
2. 箱子推动系统
python
def PushTiles(Pusher: Sprite, Pushing: Sprite):
复杂的箱子推动逻辑
支持连锁推动(箱子推箱子)
防止推动到墙壁时的反弹机制

游戏特色功能
1. 机关系统
按钮机制:
红色按钮(RButton):一次性开关,改变红色地砖状态
蓝色按钮(BButton):切换开关,改变蓝色地砖状态
传送门:
家和箱子都可以通过传送门
自动传送并重置传送门状态
陷阱与障碍:
深坑(Pit):玩家掉落会重置关卡
激光炮台:定期发射激光障碍
可破坏墙壁:使用剑破坏
2. 物品系统
python
def Use_Item(Text: str):
钥匙(Key):打开锁住的门
剑(Sword):破坏脆弱墙壁和物体
书(Book):触发剧情和结局
3. 特效系统
python
def Customeffects(Type: str, Sprite2: Sprite, Onsprite: bool, X: number, Y: number, Time2: number):
丰富的粒子特效:
Steps:移动脚步效果
Wand:魔法棒效果
Twinkle:闪烁星光
Victory:胜利效果
Explode:爆炸效果

关卡设计
渐进式难度
游戏包含22+个关卡,难度逐渐增加:
1-3关:基础推箱子教学
4-10关:引入按钮机制和陷阱
11-16关:复杂机关组合
17-22关:最终挑战关卡

剧情系统
python
def CutScene(Text1: str, Text2: str, Background: Image, Time: number):
关卡间的剧情过渡
教育性主题:知识的力量
最终传达积极信息

技术实现亮点
1. 状态管理
python
sprites.set_data_boolean(Pushing, "RecentlyPushed", True)
使用精灵数据存储系统管理游戏状态

2. 关卡加载系统
python
def Level(Lvl: number):
动态加载不同地图
自动生成箱子和物品
重置游戏状态

3. 物理系统
网格化碰撞检测
连锁推动物理
实时障碍物生成

图形编程参考实验程序

 

157.jpg


通过模拟器,调试与模拟运行

 

00215---0.gif


实验场景记录

 

158 (1).jpg
158 (2).jpg
158 (3).jpg

评论

user-avatar
icon 他的勋章
    展开更多