Kitronik ARCADE 是一款由英国教育科技公司 Kitronik 精心打造的可编程游戏机开发板,专为编程教学与创客实践而设计。该设备原生支持微软的 MakeCode Arcade 平台,用户可通过图形化或 JavaScript 编程方式,轻松创建、下载并运行复古风格的街机游戏。
它集成了彩色 LCD 显示屏、方向控制键、功能按键、蜂鸣器和震动马达等交互组件,提供完整的游戏输入输出体验。无论是初学者进行编程启蒙,还是创客群体开发交互式作品,Kitronik ARCADE 都能作为理想的硬件载体,助力创意实现。
凭借其开源友好、易于上手、兼容性强等特点,该开发板广泛应用于中小学编程课程、创客工作坊、游戏开发教学以及个人项目原型设计,深受教育者与技术爱好者的喜爱。


作为学习、练习与尝试,这里创建一个板条箱地牢的小游戏。
打开网页版: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. 物理系统
网格化碰撞检测
连锁推动物理
实时障碍物生成
图形编程参考实验程序

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

实验场景记录



评论