12浏览
查看: 12|回复: 4

[项目] 【花雕动手做】基于Kitronik可编程开发板之板条箱地牢

[复制链接]
【花雕动手做】基于Kitronik可编程开发板之板条箱地牢图1

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

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

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


【花雕动手做】基于Kitronik可编程开发板之板条箱地牢图2

【花雕动手做】基于Kitronik可编程开发板之板条箱地牢图3

驴友花雕  中级技神
 楼主|

发表于 2 小时前

【花雕动手做】基于Kitronik可编程开发板之板条箱地牢

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

MicroPython实验代码

  1. @namespace
  2. class SpriteKind:
  3.     Stupid = SpriteKind.create()
  4.     PlaceHolder = SpriteKind.create()
  5.     Box = SpriteKind.create()
  6.     Item = SpriteKind.create()
  7.     Book = SpriteKind.create()
  8. def on_overlap_tile(sprite, location):
  9.     tiles.set_tile_at(location, assets.tile("""
  10.         transparency8
  11.         """))
  12.     tiles.set_wall_at(location, False)
  13. scene.on_overlap_tile(SpriteKind.food,
  14.     assets.tile("""
  15.         breakible wall0
  16.         """),
  17.     on_overlap_tile)
  18. # WALLS ARE BUGGY FIX LTR
  19. def PushTiles(Pusher: Sprite, Pushing: Sprite):
  20.     characterAnimations.clear_character_state(Pushing)
  21.     sprites.set_data_boolean(Pushing, "RecentlyPushed", True)
  22.     if characterAnimations.matches_rule(Pusher, characterAnimations.rule(Predicate.MOVING_LEFT)):
  23.         if not (tiles.tile_at_location_is_wall(grid.add(grid.get_location(Pushing), -1, 0))):
  24.             characterAnimations.set_character_state(Pushing, characterAnimations.rule(Predicate.MOVING_LEFT))
  25.             grid.move(Pushing, -1, 0)
  26.         else:
  27.             grid.move(sprites.read_data_sprite(Something, "S-Control"), 1, 0)
  28.             if Pusher.kind() == SpriteKind.Box:
  29.                 characterAnimations.set_character_state(Pusher, characterAnimations.rule(Predicate.MOVING_RIGHT))
  30.                 grid.move(Pusher, 1, 0)
  31.     if characterAnimations.matches_rule(Pusher, characterAnimations.rule(Predicate.MOVING_RIGHT)):
  32.         if not (tiles.tile_at_location_is_wall(grid.add(grid.get_location(Pushing), 1, 0))):
  33.             characterAnimations.set_character_state(Pushing, characterAnimations.rule(Predicate.MOVING_RIGHT))
  34.             grid.move(Pushing, 1, 0)
  35.         else:
  36.             grid.move(sprites.read_data_sprite(Something, "S-Control"), -1, 0)
  37.             if Pusher.kind() == SpriteKind.Box:
  38.                 characterAnimations.set_character_state(Pusher, characterAnimations.rule(Predicate.MOVING_LEFT))
  39.                 grid.move(Pusher, -1, 0)
  40.     if characterAnimations.matches_rule(Pusher, characterAnimations.rule(Predicate.MOVING_DOWN)):
  41.         if not (tiles.tile_at_location_is_wall(grid.add(grid.get_location(Pushing), 0, 1))):
  42.             characterAnimations.set_character_state(Pushing, characterAnimations.rule(Predicate.MOVING_DOWN))
  43.             grid.move(Pushing, 0, 1)
  44.         else:
  45.             grid.move(sprites.read_data_sprite(Something, "S-Control"), 0, -1)
  46.             if Pusher.kind() == SpriteKind.Box:
  47.                 characterAnimations.set_character_state(Pusher, characterAnimations.rule(Predicate.MOVING_UP))
  48.                 grid.move(Pusher, 0, -1)
  49.     if characterAnimations.matches_rule(Pusher, characterAnimations.rule(Predicate.MOVING_UP)):
  50.         if not (tiles.tile_at_location_is_wall(grid.add(grid.get_location(Pushing), 0, -1))):
  51.             characterAnimations.set_character_state(Pushing, characterAnimations.rule(Predicate.MOVING_UP))
  52.             grid.move(Pushing, 0, -1)
  53.         else:
  54.             grid.move(sprites.read_data_sprite(Something, "S-Control"), 0, 1)
  55.             if Pusher.kind() == SpriteKind.Box:
  56.                 characterAnimations.set_character_state(Pusher, characterAnimations.rule(Predicate.MOVING_DOWN))
  57.                 grid.move(Pusher, 0, 1)
  58.    
  59.     def on_after():
  60.         sprites.set_data_boolean(Pushing, "RecentlyPushed", False)
  61.     timer.after(100, on_after)
  62.    
  63.    
  64.     def on_background():
  65.         pass
  66.     timer.background(on_background)
  67.    
  68. def on_create_renderable(screen2):
  69.     if lvl >= 17 and not (lvl == 99):
  70.         screen2.replace(11, 8)
  71.         screen2.replace(15, 12)
  72. spriteutils.create_renderable(0, on_create_renderable)
  73. def on_overlap_tile2(sprite2, location2):
  74.     Customeffects("Fall", sprite2, True, 1, 1, 100)
  75.     sprites.destroy(sprite2)
  76.     tiles.set_tile_at(location2, assets.tile("""
  77.         BoxCovering Pit
  78.         """))
  79. scene.on_overlap_tile(SpriteKind.Box,
  80.     assets.tile("""
  81.         Pit
  82.         """),
  83.     on_overlap_tile2)
  84. def on_overlap_tile3(sprite3, location3):
  85.     if sprites.read_data_string(sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand"),
  86.         "I-Type") == "Key":
  87.         tiles.set_tile_at(location3, assets.tile("""
  88.             transparency8
  89.             """))
  90.         Customeffects("Twinkle", sprite3, True, 1, 1, 200)
  91.         sprites.set_data_string(sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand"),
  92.             "I-Type",
  93.             "Null")
  94.         sprites.destroy(sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand"))
  95.     else:
  96.         if characterAnimations.matches_rule(sprites.read_data_sprite(Something, "S-Control"),
  97.             characterAnimations.rule(Predicate.MOVING_LEFT)):
  98.             grid.move(sprites.read_data_sprite(Something, "S-Control"), 1, 0)
  99.         if characterAnimations.matches_rule(sprites.read_data_sprite(Something, "S-Control"),
  100.             characterAnimations.rule(SpriteKind.player)):
  101.             grid.move(sprites.read_data_sprite(Something, "S-Control"), -1, 0)
  102.         if characterAnimations.matches_rule(sprites.read_data_sprite(Something, "S-Control"),
  103.             characterAnimations.rule(Predicate.MOVING_UP)):
  104.             grid.move(sprites.read_data_sprite(Something, "S-Control"), 0, 1)
  105.         if characterAnimations.matches_rule(sprites.read_data_sprite(Something, "S-Control"),
  106.             characterAnimations.rule(Predicate.MOVING_DOWN)):
  107.             grid.move(sprites.read_data_sprite(Something, "S-Control"), 0, -1)
  108. scene.on_overlap_tile(SpriteKind.player,
  109.     assets.tile("""
  110.         Lock
  111.         """),
  112.     on_overlap_tile3)
  113. def on_on_overlap(sprite4, otherSprite):
  114.     if controller.A.is_pressed():
  115.         sprites.set_data_sprite(sprite4, "H-Hand", otherSprite)
  116.         music.play(music.create_sound_effect(WaveShape.NOISE,
  117.                 1,
  118.                 973,
  119.                 98,
  120.                 0,
  121.                 100,
  122.                 SoundExpressionEffect.VIBRATO,
  123.                 InterpolationCurve.LINEAR),
  124.             music.PlaybackMode.IN_BACKGROUND)
  125. sprites.on_overlap(SpriteKind.player, SpriteKind.Item, on_on_overlap)
  126. def on_overlap_tile4(sprite5, location4):
  127.     tiles.set_tile_at(location4, assets.tile("""
  128.         transparency8
  129.         """))
  130.     tiles.set_wall_at(location4, False)
  131. scene.on_overlap_tile(SpriteKind.food,
  132.     assets.tile("""
  133.         Cannon LR
  134.         """),
  135.     on_overlap_tile4)
  136. def on_overlap_tile5(sprite6, location5):
  137.     tiles.set_tile_at(location5, assets.tile("""
  138.         transparency8
  139.         """))
  140.     Customeffects("Twinkle", sprite6, True, 1, 1, 500)
  141.     SwapBlocks(1)
  142. scene.on_overlap_tile(SpriteKind.player,
  143.     assets.tile("""
  144.         RButton2
  145.         """),
  146.     on_overlap_tile5)
  147. def on_b_pressed():
  148.     global Placeholder
  149.     if sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand") != spriteutils.null_consts(spriteutils.NullConsts.NULL):
  150.         sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand").set_position(sprites.read_data_sprite(Something, "S-Control").x,
  151.             sprites.read_data_sprite(Something, "S-Control").y)
  152.         Placeholder = sprites.create(assets.image("""
  153.             Door Open
  154.             """), SpriteKind.Item)
  155.         sprites.set_data_sprite(sprites.read_data_sprite(Something, "S-Control"),
  156.             "H-Hand",
  157.             Placeholder)
  158.         sprites.destroy(Placeholder)
  159.         music.play(music.create_sound_effect(WaveShape.SQUARE,
  160.                 694,
  161.                 583,
  162.                 59,
  163.                 0,
  164.                 100,
  165.                 SoundExpressionEffect.NONE,
  166.                 InterpolationCurve.LINEAR),
  167.             music.PlaybackMode.IN_BACKGROUND)
  168. controller.B.on_event(ControllerButtonEvent.PRESSED, on_b_pressed)
  169. def on_menu_pressed():
  170.     Level(lvl)
  171. controller.menu.on_event(ControllerButtonEvent.PRESSED, on_menu_pressed)
  172. def ColorGrid(Color1: number, Color2: number):
  173.     global picture
  174.     picture = assets.image("""
  175.         BG
  176.         """)
  177.     picture.replace(1, Color1)
  178.     scene.set_background_image(picture)
  179.     scene.set_background_color(Color2)
  180. def on_a_pressed():
  181.     if mySprite:
  182.         if not (sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand") == spriteutils.null_consts(spriteutils.NullConsts.NULL)):
  183.             Use_Item(sprites.read_data_string(sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand"),
  184.                     "I-Type"))
  185. controller.A.on_event(ControllerButtonEvent.PRESSED, on_a_pressed)
  186. def on_overlap_tile6(sprite7, location6):
  187.     tiles.set_tile_at(location6, assets.tile("""
  188.         TeleporterOff
  189.         """))
  190.     sprite7.set_flag(SpriteFlag.GHOST_THROUGH_TILES, True)
  191.     tiles.place_on_random_tile(sprite7, assets.tile("""
  192.         Teleporter
  193.         """))
  194.     grid.place(sprite7, sprite7.tilemap_location())
  195.     tiles.set_tile_at(grid.get_location(sprite7),
  196.         assets.tile("""
  197.             TeleporterOff
  198.             """))
  199.     sprite7.set_flag(SpriteFlag.GHOST_THROUGH_TILES, False)
  200.    
  201.     def on_background2():
  202.         tiles.set_tile_at(location6, assets.tile("""
  203.             Teleporter
  204.             """))
  205.         
  206.         def on_pause_until():
  207.             pass
  208.         pause_until(on_pause_until)
  209.         
  210.         for value in tiles.get_tiles_by_type(assets.tile("""
  211.             TeleporterOff
  212.             """)):
  213.             tiles.set_tile_at(value, assets.tile("""
  214.                 Teleporter
  215.                 """))
  216.     timer.background(on_background2)
  217.    
  218. scene.on_overlap_tile(SpriteKind.Box,
  219.     assets.tile("""
  220.         Teleporter
  221.         """),
  222.     on_overlap_tile6)
  223. def on_overlap_tile7(sprite8, location7):
  224.     if sprites.read_data_string(sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand"),
  225.         "I-Type") == "Key":
  226.         tiles.set_tile_at(location7, assets.tile("""
  227.             Exit
  228.             """))
  229.         Customeffects("Twinkle", sprite8, True, 1, 1, 200)
  230.         sprites.set_data_string(sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand"),
  231.             "I-Type",
  232.             "Null")
  233.         sprites.destroy(sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand"))
  234. scene.on_overlap_tile(SpriteKind.player,
  235.     assets.tile("""
  236.         Lock0
  237.         """),
  238.     on_overlap_tile7)
  239. def on_left_pressed():
  240.     if not (tiles.tile_at_location_is_wall(tiles.get_tile_location(-1 + sprites.read_data_sprite(Something, "S-Control").tilemap_location().column,
  241.             sprites.read_data_sprite(Something, "S-Control").tilemap_location().row))):
  242.         Customeffects("Steps",
  243.             sprites.read_data_sprite(Something, "S-Control"),
  244.             False,
  245.             sprites.read_data_sprite(Something, "S-Control").x,
  246.             sprites.read_data_sprite(Something, "S-Control").y,
  247.             400)
  248.         grid.move(sprites.read_data_sprite(Something, "S-Control"), -1, 0)
  249.         music.play(music.create_sound_effect(WaveShape.NOISE,
  250.                 randint(300, 350),
  251.                 0,
  252.                 127,
  253.                 0,
  254.                 100,
  255.                 SoundExpressionEffect.NONE,
  256.                 InterpolationCurve.LINEAR),
  257.             music.PlaybackMode.IN_BACKGROUND)
  258. controller.left.on_event(ControllerButtonEvent.PRESSED, on_left_pressed)
  259. def SwapBlocks(Stage: number):
  260.     if 1 == Stage:
  261.         tiles.replace_all_tiles(assets.tile("""
  262.                 RedTileOFF
  263.                 """),
  264.             assets.tile("""
  265.                 HiddenGem
  266.                 """))
  267.         tiles.replace_all_tiles(assets.tile("""
  268.                 RedTileOn0
  269.                 """),
  270.             assets.tile("""
  271.                 RedTileOFF
  272.                 """))
  273.         tiles.replace_all_tiles(assets.tile("""
  274.                 HiddenGem
  275.                 """),
  276.             assets.tile("""
  277.                 RedTileOn0
  278.                 """))
  279.         for value2 in tiles.get_tiles_by_type(assets.tile("""
  280.             RedTileOFF
  281.             """)):
  282.             Customeffects("Twinkle",
  283.                 mySprite,
  284.                 False,
  285.                 4 + 8 * value2.column,
  286.                 4 + 8 * value2.row,
  287.                 100)
  288.             tiles.set_wall_at(value2, False)
  289.         for value22 in tiles.get_tiles_by_type(assets.tile("""
  290.             RedTileOn0
  291.             """)):
  292.             Customeffects("Twinkle",
  293.                 mySprite,
  294.                 False,
  295.                 4 + 8 * value22.column,
  296.                 4 + 8 * value22.row,
  297.                 100)
  298.             tiles.set_wall_at(value22, True)
  299.         music.play(music.create_sound_effect(WaveShape.NOISE,
  300.                 839,
  301.                 0,
  302.                 255,
  303.                 0,
  304.                 200,
  305.                 SoundExpressionEffect.NONE,
  306.                 InterpolationCurve.LINEAR),
  307.             music.PlaybackMode.IN_BACKGROUND)
  308.     elif 2 == Stage:
  309.         music.play(music.create_sound_effect(WaveShape.TRIANGLE,
  310.                 692,
  311.                 1,
  312.                 131,
  313.                 0,
  314.                 200,
  315.                 SoundExpressionEffect.NONE,
  316.                 InterpolationCurve.LINEAR),
  317.             music.PlaybackMode.IN_BACKGROUND)
  318.         tiles.replace_all_tiles(assets.tile("""
  319.                 BlueTileOFF
  320.                 """),
  321.             assets.tile("""
  322.                 HiddenGem
  323.                 """))
  324.         tiles.replace_all_tiles(assets.tile("""
  325.                 BlueTileOn
  326.                 """),
  327.             assets.tile("""
  328.                 BlueTileOFF
  329.                 """))
  330.         tiles.replace_all_tiles(assets.tile("""
  331.                 HiddenGem
  332.                 """),
  333.             assets.tile("""
  334.                 BlueTileOn
  335.                 """))
  336.         for value3 in tiles.get_tiles_by_type(assets.tile("""
  337.             BlueTileOFF
  338.             """)):
  339.             Customeffects("Wand",
  340.                 mySprite,
  341.                 False,
  342.                 4 + 8 * value3.column,
  343.                 4 + 8 * value3.row,
  344.                 100)
  345.             tiles.set_wall_at(value3, False)
  346.         for value23 in tiles.get_tiles_by_type(assets.tile("""
  347.             BlueTileOn
  348.             """)):
  349.             Customeffects("Wand",
  350.                 mySprite,
  351.                 False,
  352.                 4 + 8 * value23.column,
  353.                 4 + 8 * value23.row,
  354.                 100)
  355.             tiles.set_wall_at(value23, True)
  356.     else:
  357.         pass
  358. def on_on_overlap2(sprite9, otherSprite2):
  359.     if sprites.read_data_boolean(otherSprite2, "RecentlyPushed"):
  360.         PushTiles(otherSprite2, sprite9)
  361.         sprites.set_data_boolean(otherSprite2, "RecentlyPushed", False)
  362.     elif sprites.read_data_boolean(sprite9, "RecentlyPushed"):
  363.         PushTiles(sprite9, otherSprite2)
  364.         sprites.set_data_boolean(sprite9, "RecentlyPushed", False)
  365. sprites.on_overlap(SpriteKind.Box, SpriteKind.Box, on_on_overlap2)
  366. def Use_Item(Text: str):
  367.     global Placeholder, PlayCutScene
  368.     if Text == "Sword":
  369.         Placeholder = sprites.create(img("""
  370.                 . . . . . . . . . . . . . . . .
  371.                 . . . . . . . . . . . . . . . .
  372.                 . . . . . . . . . . . . . . . .
  373.                 . . . . . . . . . . . . . . . .
  374.                 . . . . . . . . . . . . . . . .
  375.                 . . . . . . . . . . . . . . . .
  376.                 . . . . . . . . . . . . . . . .
  377.                 . . . . . . . . . . . . . . . .
  378.                 . . . . . . . . . . . . . . . .
  379.                 . . . . . . . . . . . . . . . .
  380.                 . . . . . . . . . . . . . . . .
  381.                 . . . . . . . . . . . . . . . .
  382.                 . . . . . . . . . . . . . . . .
  383.                 . . . . . . . . . . . . . . . .
  384.                 . . . . . . . . . . . . . . . .
  385.                 . . . . . . . . . . . . . . . .
  386.                 """),
  387.             SpriteKind.food)
  388.         Placeholder.set_flag(SpriteFlag.GHOST_THROUGH_WALLS, True)
  389.         Placeholder.set_position(sprites.read_data_sprite(Something, "S-Control").x,
  390.             sprites.read_data_sprite(Something, "S-Control").y)
  391.         animation.run_image_animation(Placeholder,
  392.             [img("""
  393.                     . . . . . . . . . . . . . .
  394.                     . . . 4 4 4 4 . . 4 4 . . .
  395.                     . . 4 1 1 1 . . 1 1 1 4 . .
  396.                     . 4 1 . . . . . . . . 1 4 .
  397.                     . 4 1 . . . . . . . . 1 4 .
  398.                     . . 1 . . . . . . . . 1 4 .
  399.                     . . . . . . . . . . . . 4 .
  400.                     . 4 . . . . . . . . . . . .
  401.                     . 4 1 . . . . . . . . 1 . .
  402.                     . 4 1 . . . . . . . . 1 4 .
  403.                     . 4 1 . . . . . . . . 1 4 .
  404.                     . . 4 1 1 1 . . 1 1 1 4 . .
  405.                     . . . 4 4 . . 4 4 4 4 . . .
  406.                     . . . . . . . . . . . . . .
  407.                     """),
  408.                 img("""
  409.                     . . . . . . . . . . . . . .
  410.                     . . . 4 4 4 4 4 . . 4 . . .
  411.                     . . 4 1 1 1 1 . . 1 1 4 . .
  412.                     . 4 1 . . . . . . . . 1 4 .
  413.                     . . 1 . . . . . . . . 1 4 .
  414.                     . . . . . . . . . . . 1 4 .
  415.                     . 4 . . . . . . . . . 1 4 .
  416.                     . 4 1 . . . . . . . . . 4 .
  417.                     . 4 1 . . . . . . . . . . .
  418.                     . 4 1 . . . . . . . . 1 . .
  419.                     . 4 1 . . . . . . . . 1 4 .
  420.                     . . 4 1 1 . . 1 1 1 1 4 . .
  421.                     . . . 4 . . 4 4 4 4 4 . . .
  422.                     . . . . . . . . . . . . . .
  423.                     """),
  424.                 img("""
  425.                     . . . . . . . . . . . . . .
  426.                     . . . . 4 4 4 4 4 4 4 . . .
  427.                     . . . 4 1 1 1 1 1 1 . . . .
  428.                     . 4 . . . . . . . . . 4 . .
  429.                     . 4 1 . . . . . . . . 1 4 .
  430.                     . 4 1 . . . . . . . . 1 4 .
  431.                     . 4 1 . . . . . . . . 1 4 .
  432.                     . 4 1 . . . . . . . . 1 4 .
  433.                     . 4 1 . . . . . . . . 1 4 .
  434.                     . 4 1 . . . . . . . . 1 4 .
  435.                     . . 4 . . . . . . . . . 4 .
  436.                     . . . . 1 1 1 1 1 1 4 . . .
  437.                     . . . 4 4 4 4 4 4 4 . . . .
  438.                     . . . . . . . . . . . . . .
  439.                     """),
  440.                 img("""
  441.                     . . . . . . . . . . . . . .
  442.                     . . . . 4 4 4 4 . . . . . .
  443.                     . . . 4 1 1 1 1 1 4 4 . . .
  444.                     . . 4 1 . . . . . . 1 4 . .
  445.                     . . 4 . . . . . . . . 1 4 .
  446.                     . . 1 . . . . . . . . 1 4 .
  447.                     . 4 1 . . . . . . . . 1 4 .
  448.                     . 4 1 . . . . . . . . 1 4 .
  449.                     . 4 1 . . . . . . . . 1 . .
  450.                     . 4 1 . . . . . . . . 4 . .
  451.                     . . 4 1 . . . . . . 1 4 . .
  452.                     . . . 4 4 1 1 1 1 1 4 . . .
  453.                     . . . . . . 4 4 4 4 . . . .
  454.                     . . . . . . . . . . . . . .
  455.                     """),
  456.                 img("""
  457.                     . . . . . . . . . . . . . .
  458.                     . . . . 4 . . . . . . . . .
  459.                     . . . 4 1 4 4 4 4 4 4 . . .
  460.                     . . 4 1 1 . 1 1 1 1 1 4 . .
  461.                     . . 4 1 . . . . . . 1 1 4 .
  462.                     . . 4 1 . . . . . . . 4 . .
  463.                     . . 4 1 . . . . . . 1 4 . .
  464.                     . . 4 1 . . . . . . 1 4 . .
  465.                     . . 4 . . . . . . . 1 4 . .
  466.                     . 4 1 1 . . . . . . 1 4 . .
  467.                     . . 4 1 1 1 1 1 . 1 1 4 . .
  468.                     . . . 4 4 4 4 4 4 1 4 . . .
  469.                     . . . . . . . . . 4 . . . .
  470.                     . . . . . . . . . . . . . .
  471.                     """),
  472.                 img("""
  473.                     . . . . . . . . . . . . . .
  474.                     . . . . . . . . . . . . . .
  475.                     . . . . 4 4 4 4 4 4 . . . .
  476.                     . . . 4 1 1 1 1 1 1 4 . . .
  477.                     . . 4 1 1 . . . . 1 1 4 . .
  478.                     . . 4 1 . . . . . . 1 4 . .
  479.                     . . 4 1 . . . . . . 1 4 . .
  480.                     . . 4 1 . . . . . . 1 4 . .
  481.                     . . 4 1 . . . . . . 1 4 . .
  482.                     . . 4 1 1 . . . . 1 1 4 . .
  483.                     . . . 4 1 1 1 1 1 1 4 . . .
  484.                     . . . . 4 4 4 4 4 4 . . . .
  485.                     . . . . . . . . . . . . . .
  486.                     . . . . . . . . . . . . . .
  487.                     """),
  488.                 img("""
  489.                     . . . . . . . . . . . . . .
  490.                     . . . . . . . . . . . . . .
  491.                     . . . . . . . . . . . . . .
  492.                     . . . . . 4 4 4 4 . . . . .
  493.                     . . . . 4 1 1 1 1 4 . . . .
  494.                     . . . 4 1 . . . . 1 4 . . .
  495.                     . . . 4 1 . . . . 1 4 . . .
  496.                     . . . 4 1 . . . . 1 4 . . .
  497.                     . . . 4 1 . . . . 1 4 . . .
  498.                     . . . . 4 1 1 1 1 4 . . . .
  499.                     . . . . . 4 4 4 4 . . . . .
  500.                     . . . . . . . . . . . . . .
  501.                     . . . . . . . . . . . . . .
  502.                     . . . . . . . . . . . . . .
  503.                     """)],
  504.             100,
  505.             False)
  506.         music.play(music.create_sound_effect(WaveShape.SAWTOOTH,
  507.                 randint(770, 800),
  508.                 0,
  509.                 98,
  510.                 0,
  511.                 100,
  512.                 SoundExpressionEffect.NONE,
  513.                 InterpolationCurve.LINEAR),
  514.             music.PlaybackMode.IN_BACKGROUND)
  515.         Placeholder.lifespan = 700
  516.     elif Text == "Book":
  517.         PlayCutScene = True
  518.         Level(99)
  519.     else:
  520.         pass
  521. def CutScene(Text1: str, Text2: str, Background: Image, Time: number):
  522.     global textSprite, textSprite2
  523.     if PlayCutScene:
  524.         mySprite.set_flag(SpriteFlag.INVISIBLE, True)
  525.         tiles.load_map(tiles.create_small_map(tilemap("""
  526.             EmptyTilemap
  527.             """)))
  528.         scene.set_background_image(Background)
  529.         scene.set_background_color(15)
  530.         textSprite = textsprite.create(Text1, 0, 15)
  531.         textSprite2 = textsprite.create(Text2, 0, 15)
  532.         textSprite.scale = 0
  533.         textSprite2.scale = 0
  534.         textSprite.set_outline(1, 1)
  535.         textSprite2.set_outline(1, 1)
  536.         textSprite.set_position(80, 50)
  537.         textSprite2.set_position(80, 70)
  538.         for index in range(10):
  539.             textSprite.scale += 0.1
  540.             textSprite2.scale += 0.1
  541.             pause(50)
  542.         pause(Time)
  543.         for index2 in range(10):
  544.             textSprite.scale += -0.1
  545.             textSprite2.scale += -0.1
  546.             pause(50)
  547.         sprites.destroy(textSprite)
  548.         sprites.destroy(textSprite2)
  549.         mySprite.set_flag(SpriteFlag.INVISIBLE, False)
  550.         scene.set_background_color(15)
  551. def on_overlap_tile8(sprite10, location8):
  552.     SwapBlocks(2)
  553.     tiles.set_tile_at(location8, assets.tile("""
  554.         BButtonPressed
  555.         """))
  556.     Customeffects("Wand", sprite10, True, 1, 1, 200)
  557.    
  558.     def on_background3():
  559.         
  560.         def on_pause_until2():
  561.             pass
  562.         pause_until(on_pause_until2)
  563.         
  564.         tiles.set_tile_at(location8, assets.tile("""
  565.             BButton
  566.             """))
  567.     timer.background(on_background3)
  568.    
  569. scene.on_overlap_tile(SpriteKind.player,
  570.     assets.tile("""
  571.         BButton
  572.         """),
  573.     on_overlap_tile8)
  574. def on_overlap_tile9(sprite11, location9):
  575.     global Placeholder
  576.     if sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand") != spriteutils.null_consts(spriteutils.NullConsts.NULL):
  577.         sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand").set_position(sprites.read_data_sprite(Something, "S-Control").x,
  578.             sprites.read_data_sprite(Something, "S-Control").y)
  579.         Placeholder = sprites.create(assets.image("""
  580.             Door Open
  581.             """), SpriteKind.Item)
  582.         sprites.set_data_sprite(sprites.read_data_sprite(Something, "S-Control"),
  583.             "H-Hand",
  584.             Placeholder)
  585.         sprites.destroy(Placeholder)
  586.         music.play(music.create_sound_effect(WaveShape.SQUARE,
  587.                 694,
  588.                 583,
  589.                 59,
  590.                 0,
  591.                 100,
  592.                 SoundExpressionEffect.NONE,
  593.                 InterpolationCurve.LINEAR),
  594.             music.PlaybackMode.IN_BACKGROUND)
  595.     tiles.set_tile_at(location9, assets.tile("""
  596.         TeleporterOff
  597.         """))
  598.     sprite11.set_flag(SpriteFlag.GHOST_THROUGH_TILES, True)
  599.     tiles.place_on_random_tile(sprite11, assets.tile("""
  600.         Teleporter
  601.         """))
  602.     grid.place(sprite11, sprite11.tilemap_location())
  603.     tiles.set_tile_at(grid.get_location(sprite11),
  604.         assets.tile("""
  605.             TeleporterOff
  606.             """))
  607.     sprite11.set_flag(SpriteFlag.GHOST_THROUGH_TILES, False)
  608.    
  609.     def on_background4():
  610.         tiles.set_tile_at(location9, assets.tile("""
  611.             Teleporter
  612.             """))
  613.         
  614.         def on_pause_until3():
  615.             pass
  616.         pause_until(on_pause_until3)
  617.         
  618.         for value4 in tiles.get_tiles_by_type(assets.tile("""
  619.             TeleporterOff
  620.             """)):
  621.             tiles.set_tile_at(value4, assets.tile("""
  622.                 Teleporter
  623.                 """))
  624.     timer.background(on_background4)
  625.    
  626. scene.on_overlap_tile(SpriteKind.player,
  627.     assets.tile("""
  628.         Teleporter
  629.         """),
  630.     on_overlap_tile9)
  631. def Customeffects(Type: str, Sprite2: Sprite, Onsprite: bool, X: number, Y: number, Time2: number):
  632.     global myEffect
  633.     myEffect.z = -5
  634.     if Type == "Steps":
  635.         myEffect = extraEffects.create_custom_spread_effect_data([1, 11],
  636.             True,
  637.             [3, 2, 1],
  638.             extraEffects.create_percentage_range(0, 0),
  639.             extraEffects.create_percentage_range(0, 0),
  640.             extraEffects.create_time_range(200, 300),
  641.             0,
  642.             0,
  643.             extraEffects.create_percentage_range(50, 100),
  644.             0,
  645.             0,
  646.             200)
  647.     elif Type == "Wand":
  648.         myEffect = extraEffects.create_custom_spread_effect_data([9, 8, 6],
  649.             False,
  650.             extraEffects.create_shrinking_size_table(8),
  651.             extraEffects.create_percentage_range(0, 0),
  652.             extraEffects.create_percentage_range(20, 20),
  653.             extraEffects.create_time_range(200, 600),
  654.             0,
  655.             0,
  656.             extraEffects.create_percentage_range(50, 100),
  657.             0,
  658.             0,
  659.             500)
  660.     elif Type == "Twinkle":
  661.         myEffect.z = 4
  662.         myEffect = extraEffects.create_custom_spread_effect_data([2, 4, 5],
  663.             True,
  664.             extraEffects.create_shrinking_size_table(8),
  665.             extraEffects.create_percentage_range(0, 0),
  666.             extraEffects.create_percentage_range(20, 20),
  667.             extraEffects.create_time_range(200, 600),
  668.             0,
  669.             0,
  670.             extraEffects.create_percentage_range(50, 100),
  671.             0,
  672.             0,
  673.             500)
  674.     elif Type == "Victory":
  675.         myEffect = extraEffects.create_custom_spread_effect_data([14, 14, 13, 13, 7],
  676.             False,
  677.             [1, 4, 8, 4, 1],
  678.             extraEffects.create_percentage_range(40, 40),
  679.             extraEffects.create_percentage_range(0, 0),
  680.             extraEffects.create_time_range(1000, 1000))
  681.     elif Type == "Fadeout":
  682.         myEffect.z = 4
  683.         myEffect = extraEffects.create_custom_spread_effect_data([15],
  684.             False,
  685.             extraEffects.create_growing_size_table(450),
  686.             extraEffects.create_percentage_range(0, 0),
  687.             extraEffects.create_percentage_range(0, 0),
  688.             extraEffects.create_time_range(1500, 1500))
  689.     elif Type == "Fadein":
  690.         myEffect.z = 5
  691.         myEffect = extraEffects.create_custom_spread_effect_data([15, 15, 15, 15, 15, 15, 1],
  692.             False,
  693.             extraEffects.create_shrinking_size_table(450),
  694.             extraEffects.create_percentage_range(0, 0),
  695.             extraEffects.create_percentage_range(0, 0),
  696.             extraEffects.create_time_range(1500, 1500))
  697.     elif Type == "fall":
  698.         myEffect = extraEffects.create_custom_spread_effect_data([0, 15, 15],
  699.             False,
  700.             extraEffects.create_shrinking_size_table(8),
  701.             extraEffects.create_percentage_range(0, 0),
  702.             extraEffects.create_percentage_range(0, 0),
  703.             extraEffects.create_time_range(500, 500))
  704.     elif Type == "Explode":
  705.         myEffect = extraEffects.create_custom_spread_effect_data([2, 5, 4, 0],
  706.             True,
  707.             extraEffects.create_shrinking_size_table(24),
  708.             extraEffects.create_percentage_range(0, 0),
  709.             extraEffects.create_percentage_range(30, 30),
  710.             extraEffects.create_time_range(500, 500))
  711.     else:
  712.         pass
  713.     if Onsprite:
  714.         extraEffects.create_spread_effect_on_anchor(Sprite2, myEffect, Time2)
  715.     else:
  716.         extraEffects.create_spread_effect_at(myEffect, X, Y, Time2)
  717. def on_overlap_tile10(sprite12, location10):
  718.     global lvl
  719.     tiles.set_tile_at(location10, assets.tile("""
  720.         transparency8
  721.         """))
  722.     Customeffects("Victory", sprite12, True, 1, 1, 1000)
  723.     Customeffects("Victory", sprite12, True, 1, 1, 1000)
  724.     music.play(music.string_playable("F - F E F G B - ", 320),
  725.         music.PlaybackMode.IN_BACKGROUND)
  726.     lvl += 1
  727.    
  728.     def on_after2():
  729.         Customeffects("Fadeout", sprite12, True, 0, 0, 1000)
  730.         music.play(music.create_sound_effect(WaveShape.SINE,
  731.                 1,
  732.                 520,
  733.                 145,
  734.                 0,
  735.                 2000,
  736.                 SoundExpressionEffect.NONE,
  737.                 InterpolationCurve.LINEAR),
  738.             music.PlaybackMode.IN_BACKGROUND)
  739.     timer.after(2000, on_after2)
  740.    
  741.    
  742.     def on_after3():
  743.         global PlayCutScene
  744.         PlayCutScene = True
  745.         Level(lvl)
  746.     timer.after(3500, on_after3)
  747.    
  748. scene.on_overlap_tile(SpriteKind.player,
  749.     assets.tile("""
  750.         Exit
  751.         """),
  752.     on_overlap_tile10)
  753. def Level(Lvl: number):
  754.     global textSprite, Placeholder, PlayCutScene, PlayerBoxes
  755.     mySprite.scale = 1
  756.     scene.set_background_color(15)
  757.     mySprite.set_flag(SpriteFlag.GHOST_THROUGH_TILES, False)
  758.     mySprite.set_flag(SpriteFlag.GHOST_THROUGH_SPRITES, False)
  759.     sprites.set_data_sprite(Something, "S-Control", mySprite)
  760.     sprites.destroy_all_sprites_of_kind(SpriteKind.Box)
  761.     sprites.destroy_all_sprites_of_kind(SpriteKind.text)
  762.     sprites.destroy_all_sprites_of_kind(SpriteKind.Item)
  763.     sprites.destroy_all_sprites_of_kind(SpriteKind.enemy)
  764.     for value32 in tiles.get_tiles_by_type(assets.tile("""
  765.         BButton
  766.         """)):
  767.         tiles.set_tile_at(value32, assets.tile("""
  768.             transparency8
  769.             """))
  770.     for value33 in tiles.get_tiles_by_type(assets.tile("""
  771.         BButtonPressed
  772.         """)):
  773.         tiles.set_tile_at(value33, assets.tile("""
  774.             transparency8
  775.             """))
  776.     if Lvl == 0:
  777.         tiles.load_map(tiles.create_small_map(tilemap("""
  778.             level3
  779.             """)))
  780.         textSprite = textsprite.create("Menu to reset", 0, 12)
  781.         textSprite.set_position(100, 10)
  782.     elif Lvl == 1:
  783.         textSprite = textsprite.create("Red is one time use", 0, 12)
  784.         textSprite.set_position(80, 110)
  785.         tiles.load_map(tiles.create_small_map(tilemap("""
  786.             level8
  787.             """)))
  788.     elif Lvl == 2:
  789.         tiles.load_map(tiles.create_small_map(tilemap("""
  790.             level12
  791.             """)))
  792.     elif Lvl == 3:
  793.         textSprite = textsprite.create("Blue toggles on and off", 0, 12)
  794.         textSprite.set_position(80, 20)
  795.         tiles.load_map(tiles.create_small_map(tilemap("""
  796.             level6
  797.             """)))
  798.     elif Lvl == 4:
  799.         CutScene("You have Done well",
  800.             "So far. . .",
  801.             img("""
  802.                 . . . . . . . . . . . . . . . .
  803.                 . . . . . . . . . . . . . . . .
  804.                 . . . . . . . . . . . . . . . .
  805.                 . . . . . . . . . . . . . . . .
  806.                 . . . . . . . . . . . . . . . .
  807.                 . . . . . . . . . . . . . . . .
  808.                 . . . . . . . . . . . . . . . .
  809.                 . . . . . . . . . . . . . . . .
  810.                 . . . . . . . . . . . . . . . .
  811.                 . . . . . . . . . . . . . . . .
  812.                 . . . . . . . . . . . . . . . .
  813.                 . . . . . . . . . . . . . . . .
  814.                 . . . . . . . . . . . . . . . .
  815.                 . . . . . . . . . . . . . . . .
  816.                 . . . . . . . . . . . . . . . .
  817.                 . . . . . . . . . . . . . . . .
  818.                 """),
  819.             2000)
  820.         tiles.load_map(tiles.create_small_map(tilemap("""
  821.             level25
  822.             """)))
  823.     elif Lvl == 5:
  824.         tiles.load_map(tiles.create_small_map(tilemap("""
  825.             level10
  826.             """)))
  827.     elif Lvl == 6:
  828.         tiles.load_map(tiles.create_small_map(tilemap("""
  829.             level23
  830.             """)))
  831.     elif Lvl == 7:
  832.         CutScene("To easy for you?",
  833.             "Lets make this intresting",
  834.             img("""
  835.                 . . . . . . . . . . . . . . . .
  836.                 . . . . . . . . . . . . . . . .
  837.                 . . . . . . . . . . . . . . . .
  838.                 . . . . . . . . . . . . . . . .
  839.                 . . . . . . . . . . . . . . . .
  840.                 . . . . . . . . . . . . . . . .
  841.                 . . . . . . . . . . . . . . . .
  842.                 . . . . . . . . . . . . . . . .
  843.                 . . . . . . . . . . . . . . . .
  844.                 . . . . . . . . . . . . . . . .
  845.                 . . . . . . . . . . . . . . . .
  846.                 . . . . . . . . . . . . . . . .
  847.                 . . . . . . . . . . . . . . . .
  848.                 . . . . . . . . . . . . . . . .
  849.                 . . . . . . . . . . . . . . . .
  850.                 . . . . . . . . . . . . . . . .
  851.                 """),
  852.             4000)
  853.         textSprite = textsprite.create("Boxes Can Cover Pits", 0, 12)
  854.         textSprite.set_position(80, 20)
  855.         tiles.load_map(tiles.create_small_map(tilemap("""
  856.             level15
  857.             """)))
  858.         textSprite = textsprite.create("Pick up With A", 0, 12)
  859.         textSprite.set_position(80, 100)
  860.     elif Lvl == 8:
  861.         tiles.load_map(tiles.create_small_map(tilemap("""
  862.             level27
  863.             """)))
  864.     elif Lvl == 9:
  865.         tiles.load_map(tiles.create_small_map(tilemap("""
  866.             level9
  867.             """)))
  868.     elif Lvl == 10:
  869.         CutScene("Not Bad ",
  870.             "Most make it this far",
  871.             img("""
  872.                 . . . . . . . . . . . . . . . .
  873.                 . . . . . . . . . . . . . . . .
  874.                 . . . . . . . . . . . . . . . .
  875.                 . . . . . . . . . . . . . . . .
  876.                 . . . . . . . . . . . . . . . .
  877.                 . . . . . . . . . . . . . . . .
  878.                 . . . . . . . . . . . . . . . .
  879.                 . . . . . . . . . . . . . . . .
  880.                 . . . . . . . . . . . . . . . .
  881.                 . . . . . . . . . . . . . . . .
  882.                 . . . . . . . . . . . . . . . .
  883.                 . . . . . . . . . . . . . . . .
  884.                 . . . . . . . . . . . . . . . .
  885.                 . . . . . . . . . . . . . . . .
  886.                 . . . . . . . . . . . . . . . .
  887.                 . . . . . . . . . . . . . . . .
  888.                 """),
  889.             3000)
  890.         CutScene("Then Again ",
  891.             "Your not most are you?",
  892.             img("""
  893.                 . . . . . . . . . . . . . . . .
  894.                 . . . . . . . . . . . . . . . .
  895.                 . . . . . . . . . . . . . . . .
  896.                 . . . . . . . . . . . . . . . .
  897.                 . . . . . . . . . . . . . . . .
  898.                 . . . . . . . . . . . . . . . .
  899.                 . . . . . . . . . . . . . . . .
  900.                 . . . . . . . . . . . . . . . .
  901.                 . . . . . . . . . . . . . . . .
  902.                 . . . . . . . . . . . . . . . .
  903.                 . . . . . . . . . . . . . . . .
  904.                 . . . . . . . . . . . . . . . .
  905.                 . . . . . . . . . . . . . . . .
  906.                 . . . . . . . . . . . . . . . .
  907.                 . . . . . . . . . . . . . . . .
  908.                 . . . . . . . . . . . . . . . .
  909.                 """),
  910.             3000)
  911.         tiles.load_map(tiles.create_small_map(tilemap("""
  912.             level17
  913.             """)))
  914.     elif Lvl == 11:
  915.         CutScene("A Knight Driven by Mind",
  916.             "Not War or battle",
  917.             img("""
  918.                 . . . . . . . . . . . . . . . .
  919.                 . . . . . . . . . . . . . . . .
  920.                 . . . . . . . . . . . . . . . .
  921.                 . . . . . . . . . . . . . . . .
  922.                 . . . . . . . . . . . . . . . .
  923.                 . . . . . . . . . . . . . . . .
  924.                 . . . . . . . . . . . . . . . .
  925.                 . . . . . . . . . . . . . . . .
  926.                 . . . . . . . . . . . . . . . .
  927.                 . . . . . . . . . . . . . . . .
  928.                 . . . . . . . . . . . . . . . .
  929.                 . . . . . . . . . . . . . . . .
  930.                 . . . . . . . . . . . . . . . .
  931.                 . . . . . . . . . . . . . . . .
  932.                 . . . . . . . . . . . . . . . .
  933.                 . . . . . . . . . . . . . . . .
  934.                 """),
  935.             3000)
  936.         CutScene("Maybe you are worthy",
  937.             "Only time will tell",
  938.             img("""
  939.                 . . . . . . . . . . . . . . . .
  940.                 . . . . . . . . . . . . . . . .
  941.                 . . . . . . . . . . . . . . . .
  942.                 . . . . . . . . . . . . . . . .
  943.                 . . . . . . . . . . . . . . . .
  944.                 . . . . . . . . . . . . . . . .
  945.                 . . . . . . . . . . . . . . . .
  946.                 . . . . . . . . . . . . . . . .
  947.                 . . . . . . . . . . . . . . . .
  948.                 . . . . . . . . . . . . . . . .
  949.                 . . . . . . . . . . . . . . . .
  950.                 . . . . . . . . . . . . . . . .
  951.                 . . . . . . . . . . . . . . . .
  952.                 . . . . . . . . . . . . . . . .
  953.                 . . . . . . . . . . . . . . . .
  954.                 . . . . . . . . . . . . . . . .
  955.                 """),
  956.             4000)
  957.         textSprite = textsprite.create("", 0, 12)
  958.         tiles.load_map(tiles.create_small_map(tilemap("""
  959.             level20
  960.             """)))
  961.     elif Lvl == 12:
  962.         tiles.load_map(tiles.create_small_map(tilemap("""
  963.             level21
  964.             """)))
  965.     elif Lvl == 13:
  966.         tiles.load_map(tiles.create_small_map(tilemap("""
  967.             level13
  968.             """)))
  969.     elif Lvl == 14:
  970.         textSprite = textsprite.create("Doors > Keys", 0, 12)
  971.         textSprite.set_position(80, 110)
  972.         tiles.load_map(tiles.create_small_map(tilemap("""
  973.             level26
  974.             """)))
  975.     elif Lvl == 15:
  976.         tiles.load_map(tiles.create_small_map(tilemap("""
  977.             level7
  978.             """)))
  979.     elif Lvl == 16:
  980.         CutScene("The last of our tricks",
  981.             "Now can you use them?",
  982.             img("""
  983.                 . . . . . . . . . . . . . . . .
  984.                 . . . . . . . . . . . . . . . .
  985.                 . . . . . . . . . . . . . . . .
  986.                 . . . . . . . . . . . . . . . .
  987.                 . . . . . . . . . . . . . . . .
  988.                 . . . . . . . . . . . . . . . .
  989.                 . . . . . . . . . . . . . . . .
  990.                 . . . . . . . . . . . . . . . .
  991.                 . . . . . . . . . . . . . . . .
  992.                 . . . . . . . . . . . . . . . .
  993.                 . . . . . . . . . . . . . . . .
  994.                 . . . . . . . . . . . . . . . .
  995.                 . . . . . . . . . . . . . . . .
  996.                 . . . . . . . . . . . . . . . .
  997.                 . . . . . . . . . . . . . . . .
  998.                 . . . . . . . . . . . . . . . .
  999.                 """),
  1000.             4000)
  1001.         textSprite = textsprite.create("Swords break Weak objects", 0, 12)
  1002.         textSprite.set_position(80, 100)
  1003.         textSprite = textsprite.create("B to Drop", 0, 12)
  1004.         textSprite.set_position(100, 15)
  1005.         tiles.load_map(tiles.create_small_map(tilemap("""
  1006.             level28
  1007.             """)))
  1008.     elif Lvl == 17:
  1009.         CutScene("The Final Stretch",
  1010.             "Only 5 More Floors",
  1011.             img("""
  1012.                 . . . . . . . . . . . . . . . .
  1013.                 . . . . . . . . . . . . . . . .
  1014.                 . . . . . . . . . . . . . . . .
  1015.                 . . . . . . . . . . . . . . . .
  1016.                 . . . . . . . . . . . . . . . .
  1017.                 . . . . . . . . . . . . . . . .
  1018.                 . . . . . . . . . . . . . . . .
  1019.                 . . . . . . . . . . . . . . . .
  1020.                 . . . . . . . . . . . . . . . .
  1021.                 . . . . . . . . . . . . . . . .
  1022.                 . . . . . . . . . . . . . . . .
  1023.                 . . . . . . . . . . . . . . . .
  1024.                 . . . . . . . . . . . . . . . .
  1025.                 . . . . . . . . . . . . . . . .
  1026.                 . . . . . . . . . . . . . . . .
  1027.                 . . . . . . . . . . . . . . . .
  1028.                 """),
  1029.             3000)
  1030.         tiles.load_map(tiles.create_small_map(tilemap("""
  1031.             level22
  1032.             """)))
  1033.     elif Lvl == 18:
  1034.         tiles.load_map(tiles.create_small_map(tilemap("""
  1035.             level11
  1036.             """)))
  1037.     elif Lvl == 19:
  1038.         tiles.load_map(tiles.create_small_map(tilemap("""
  1039.             level29
  1040.             """)))
  1041.     elif Lvl == 20:
  1042.         tiles.load_map(tiles.create_small_map(tilemap("""
  1043.             level33
  1044.             """)))
  1045.     elif Lvl == 21:
  1046.         CutScene("The final Floor",
  1047.             "we watch with Anticipation",
  1048.             img("""
  1049.                 . . . . . . . . . . . . . . . .
  1050.                 . . . . . . . . . . . . . . . .
  1051.                 . . . . . . . . . . . . . . . .
  1052.                 . . . . . . . . . . . . . . . .
  1053.                 . . . . . . . . . . . . . . . .
  1054.                 . . . . . . . . . . . . . . . .
  1055.                 . . . . . . . . . . . . . . . .
  1056.                 . . . . . . . . . . . . . . . .
  1057.                 . . . . . . . . . . . . . . . .
  1058.                 . . . . . . . . . . . . . . . .
  1059.                 . . . . . . . . . . . . . . . .
  1060.                 . . . . . . . . . . . . . . . .
  1061.                 . . . . . . . . . . . . . . . .
  1062.                 . . . . . . . . . . . . . . . .
  1063.                 . . . . . . . . . . . . . . . .
  1064.                 . . . . . . . . . . . . . . . .
  1065.                 """),
  1066.             3000)
  1067.         tiles.load_map(tiles.create_small_map(tilemap("""
  1068.             level37
  1069.             """)))
  1070.     elif Lvl == 22:
  1071.         tiles.load_map(tiles.create_small_map(tilemap("""
  1072.             level41
  1073.             """)))
  1074.         Placeholder = sprites.create(img("""
  1075.                 . 6 2 2 2 2 2 .
  1076.                 . 6 2 c c c 2 .
  1077.                 . 6 2 c c c 2 .
  1078.                 . c b b 2 2 2 .
  1079.                 . c b c c c b .
  1080.                 . c b b b b b .
  1081.                 . c b b b b b .
  1082.                 . c b b b b b .
  1083.                 """),
  1084.             SpriteKind.Item)
  1085.         Placeholder.set_position(80, 30)
  1086.         sprites.set_data_string(Placeholder, "I-Type", "Book")
  1087.     elif Lvl == 99:
  1088.         CutScene("As You Open the book",
  1089.             "Your mind fills with knowledge",
  1090.             img("""
  1091.                 . . . . . . . . . . . . . . . .
  1092.                 . . . . . . . . . . . . . . . .
  1093.                 . . . . . . . . . . . . . . . .
  1094.                 . . . . . . . . . . . . . . . .
  1095.                 . . . . . . . . . . . . . . . .
  1096.                 . . . . . . . . . . . . . . . .
  1097.                 . . . . . . . . . . . . . . . .
  1098.                 . . . . . . . . . . . . . . . .
  1099.                 . . . . . . . . . . . . . . . .
  1100.                 . . . . . . . . . . . . . . . .
  1101.                 . . . . . . . . . . . . . . . .
  1102.                 . . . . . . . . . . . . . . . .
  1103.                 . . . . . . . . . . . . . . . .
  1104.                 . . . . . . . . . . . . . . . .
  1105.                 . . . . . . . . . . . . . . . .
  1106.                 . . . . . . . . . . . . . . . .
  1107.                 """),
  1108.             4000)
  1109.         game.set_dialog_frame(img("""
  1110.             ffffffffffffffffffffffff
  1111.             ffffffffffffffffffffffff
  1112.             fffbbbbbbbbbbbbbbbbbbfff
  1113.             ffbffffffffffffffffffbff
  1114.             ffbfbbbbbbbbbbbbbbbbfbff
  1115.             ffbfbbbbbbbbbbbbbbbbfbff
  1116.             ffbfbbbbbbbbbbbbbbbbfbff
  1117.             ffbfbbbbbbbbbbbbbbbbfbff
  1118.             ffbfbbbbbbbbbbbbbbbbfbff
  1119.             ffbfbbbbbbbbbbbbbbbbfbff
  1120.             ffbfbbbbbbbbbbbbbbbbfbff
  1121.             ffbfbbbbbbbbbbbbbbbbfbff
  1122.             ffbfbbbbbbbbbbbbbbbbfbff
  1123.             ffbfbbbbbbbbbbbbbbbbfbff
  1124.             ffbfbbbbbbbbbbbbbbbbfbff
  1125.             ffbfbbbbbbbbbbbbbbbbfbff
  1126.             ffbfbbbbbbbbbbbbbbbbfbff
  1127.             ffbfbbbbbbbbbbbbbbbbfbff
  1128.             ffbfbbbbbbbbbbbbbbbbfbff
  1129.             ffbfbbbbbbbbbbbbbbbbfbff
  1130.             ffbffffffffffffffffffbff
  1131.             fffbbbbbbbbbbbbbbbbbbfff
  1132.             ffffffffffffffffffffffff
  1133.             ffffffffffffffffffffffff
  1134.             """))
  1135.         game.show_long_text("As you Exit the dungeon Enlighted with knowledge you Wander the world spreading it with all",
  1136.             DialogLayout.FULL)
  1137.         game.show_long_text("Teaching people to understand there world and how to make it a better place for all ",
  1138.             DialogLayout.FULL)
  1139.         game.show_long_text("learning humanizes character and prevents it from being cruel So learn on Enlighted Warrior",
  1140.             DialogLayout.FULL)
  1141.         tiles.load_map(tiles.create_small_map(tilemap("""
  1142.             level46
  1143.             """)))
  1144.         textSprite = textsprite.create("Thank you for playing!", 0, 15)
  1145.         textSprite.set_outline(1, 1)
  1146.         textSprite.set_position(80, 10)
  1147.         textSprite = textsprite.create("I hope you enjoyed it", 0, 15)
  1148.         textSprite.set_position(80, 100)
  1149.         textSprite.set_outline(1, 1)
  1150.         textSprite = textsprite.create("-ADM_F", 0, 8)
  1151.         textSprite.set_outline(1, 9)
  1152.         textSprite.set_position(100, 110)
  1153.     else:
  1154.         tiles.load_map(tiles.create_small_map(tilemap("""
  1155.             level16
  1156.             """)))
  1157.     if Lvl < 17:
  1158.         ColorGrid(11, 1)
  1159.     if Lvl >= 17:
  1160.         ColorGrid(6, 8)
  1161.     if Lvl == 99:
  1162.         ColorGrid(11, 1)
  1163.     for value34 in tiles.get_tiles_by_type(assets.tile("""
  1164.         Box
  1165.         """)):
  1166.         Placeholder = sprites.create(assets.image("""
  1167.             BoxSprite
  1168.             """), SpriteKind.Box)
  1169.         grid.place(Placeholder,
  1170.             tiles.get_tile_location(value34.column, value34.row))
  1171.     for value35 in tiles.get_tiles_by_type(assets.tile("""
  1172.         Key
  1173.         """)):
  1174.         Placeholder = sprites.create(assets.image("""
  1175.             Key
  1176.             """), SpriteKind.Item)
  1177.         sprites.set_data_string(Placeholder, "I-Type", "Key")
  1178.         grid.place(Placeholder,
  1179.             tiles.get_tile_location(value35.column, value35.row))
  1180.         tiles.set_tile_at(value35, assets.tile("""
  1181.             transparency8
  1182.             """))
  1183.     for value36 in tiles.get_tiles_by_type(assets.tile("""
  1184.         SwordTile
  1185.         """)):
  1186.         Placeholder = sprites.create(assets.image("""
  1187.             Sword-
  1188.             """), SpriteKind.Item)
  1189.         sprites.set_data_string(Placeholder, "I-Type", "Sword")
  1190.         grid.place(Placeholder,
  1191.             tiles.get_tile_location(value36.column, value36.row))
  1192.         tiles.set_tile_at(value36, assets.tile("""
  1193.             transparency8
  1194.             """))
  1195.     tiles.replace_all_tiles(assets.tile("""
  1196.             Box
  1197.             """),
  1198.         assets.tile("""
  1199.             transparency8
  1200.             """))
  1201.     for value42 in tiles.get_tiles_by_type(assets.tile("""
  1202.         StartingPoint
  1203.         """)):
  1204.         grid.place(mySprite,
  1205.             tiles.get_tile_location(value42.column, value42.row))
  1206.         tiles.set_tile_at(value42, assets.tile("""
  1207.             transparency8
  1208.             """))
  1209.     Customeffects("Fadein", mySprite, True, 0, 0, 1000)
  1210.     music.play(music.create_sound_effect(WaveShape.SINE,
  1211.             520,
  1212.             1,
  1213.             145,
  1214.             0,
  1215.             2000,
  1216.             SoundExpressionEffect.NONE,
  1217.             InterpolationCurve.LINEAR),
  1218.         music.PlaybackMode.IN_BACKGROUND)
  1219.     PlayCutScene = False
  1220.     PlayerBoxes = []
  1221.     PlayerBoxes.append(mySprite)
  1222.     for value5 in sprites.all_of_kind(SpriteKind.Box):
  1223.         PlayerBoxes.append(value5)
  1224. def on_on_overlap3(sprite13, otherSprite3):
  1225.     sprites.set_data_sprite(Something, "S-Control", Something)
  1226.     mySprite.set_velocity(otherSprite3.vx * 2, otherSprite3.vy * 2)
  1227.     sprite13.set_flag(SpriteFlag.GHOST_THROUGH_TILES, True)
  1228.     sprite13.set_flag(SpriteFlag.GHOST_THROUGH_SPRITES, True)
  1229.    
  1230.     def on_background5():
  1231.         Customeffects("Explode", sprite13, True, 1, 1, 600)
  1232.         sprite13.scale = 0
  1233.         scene.camera_shake(4, 200)
  1234.         music.play(music.melody_playable(music.big_crash),
  1235.             music.PlaybackMode.IN_BACKGROUND)
  1236.         pause(1000)
  1237.         Level(lvl)
  1238.     timer.background(on_background5)
  1239.    
  1240. sprites.on_overlap(SpriteKind.player, SpriteKind.enemy, on_on_overlap3)
  1241. def on_on_overlap4(sprite14, otherSprite4):
  1242.     otherSprite4.set_velocity(0, 0)
  1243.     otherSprite4.set_flag(SpriteFlag.GHOST_THROUGH_SPRITES, True)
  1244. sprites.on_overlap(SpriteKind.Box, SpriteKind.enemy, on_on_overlap4)
  1245. def on_right_pressed():
  1246.     if Something:
  1247.         if not (tiles.tile_at_location_is_wall(tiles.get_tile_location(1 + sprites.read_data_sprite(Something, "S-Control").tilemap_location().column,
  1248.                 sprites.read_data_sprite(Something, "S-Control").tilemap_location().row))):
  1249.             Customeffects("Steps",
  1250.                 sprites.read_data_sprite(Something, "S-Control"),
  1251.                 False,
  1252.                 sprites.read_data_sprite(Something, "S-Control").x,
  1253.                 sprites.read_data_sprite(Something, "S-Control").y,
  1254.                 400)
  1255.             grid.move(sprites.read_data_sprite(Something, "S-Control"), 1, 0)
  1256.             music.play(music.create_sound_effect(WaveShape.NOISE,
  1257.                     randint(300, 350),
  1258.                     0,
  1259.                     104,
  1260.                     0,
  1261.                     100,
  1262.                     SoundExpressionEffect.NONE,
  1263.                     InterpolationCurve.LINEAR),
  1264.                 music.PlaybackMode.IN_BACKGROUND)
  1265. controller.right.on_event(ControllerButtonEvent.PRESSED, on_right_pressed)
  1266. def on_overlap_tile11(sprite15, location11):
  1267.     SwapBlocks(2)
  1268.     tiles.set_tile_at(location11, assets.tile("""
  1269.         BButtonPressed
  1270.         """))
  1271.     Customeffects("Wand", sprite15, True, 1, 1, 200)
  1272.    
  1273.     def on_background6():
  1274.         
  1275.         def on_pause_until4():
  1276.             pass
  1277.         pause_until(on_pause_until4)
  1278.         
  1279.         tiles.set_tile_at(location11, assets.tile("""
  1280.             BButton
  1281.             """))
  1282.     timer.background(on_background6)
  1283.    
  1284. scene.on_overlap_tile(SpriteKind.Box,
  1285.     assets.tile("""
  1286.         BButton
  1287.         """),
  1288.     on_overlap_tile11)
  1289. def on_overlap_tile12(sprite16, location12):
  1290.     tiles.set_tile_at(location12, assets.tile("""
  1291.         transparency8
  1292.         """))
  1293.     Customeffects("Twinkle", sprite16, True, 1, 1, 500)
  1294.     SwapBlocks(1)
  1295. scene.on_overlap_tile(SpriteKind.Box,
  1296.     assets.tile("""
  1297.         RButton
  1298.         """),
  1299.     on_overlap_tile12)
  1300. def on_overlap_tile13(sprite17, location13):
  1301.     mySprite.set_flag(SpriteFlag.GHOST_THROUGH_TILES, True)
  1302.     music.play(music.create_sound_effect(WaveShape.TRIANGLE,
  1303.             2954,
  1304.             0,
  1305.             122,
  1306.             0,
  1307.             1500,
  1308.             SoundExpressionEffect.NONE,
  1309.             InterpolationCurve.LOGARITHMIC),
  1310.         music.PlaybackMode.IN_BACKGROUND)
  1311.    
  1312.     def on_background7():
  1313.         for index3 in range(10):
  1314.             pause(100)
  1315.             mySprite.scale += -0.1
  1316.         pause(1000)
  1317.         music.play(music.melody_playable(music.big_crash),
  1318.             music.PlaybackMode.IN_BACKGROUND)
  1319.         Level(lvl)
  1320.     timer.background(on_background7)
  1321.    
  1322. scene.on_overlap_tile(SpriteKind.player,
  1323.     assets.tile("""
  1324.         Pit
  1325.         """),
  1326.     on_overlap_tile13)
  1327. def on_overlap_tile14(sprite18, location14):
  1328.     tiles.set_tile_at(location14, assets.tile("""
  1329.         transparency8
  1330.         """))
  1331.     tiles.set_wall_at(location14, False)
  1332. scene.on_overlap_tile(SpriteKind.food,
  1333.     assets.tile("""
  1334.         Cannon UD0
  1335.         """),
  1336.     on_overlap_tile14)
  1337. def on_up_pressed():
  1338.     if Something:
  1339.         if not (tiles.tile_at_location_is_wall(tiles.get_tile_location(sprites.read_data_sprite(Something, "S-Control").tilemap_location().column,
  1340.                 -1 + sprites.read_data_sprite(Something, "S-Control").tilemap_location().row))):
  1341.             Customeffects("Steps",
  1342.                 sprites.read_data_sprite(Something, "S-Control"),
  1343.                 False,
  1344.                 sprites.read_data_sprite(Something, "S-Control").x,
  1345.                 sprites.read_data_sprite(Something, "S-Control").y,
  1346.                 400)
  1347.             grid.move(sprites.read_data_sprite(Something, "S-Control"), 0, -1)
  1348.             music.play(music.create_sound_effect(WaveShape.NOISE,
  1349.                     randint(300, 350),
  1350.                     0,
  1351.                     127,
  1352.                     0,
  1353.                     100,
  1354.                     SoundExpressionEffect.NONE,
  1355.                     InterpolationCurve.LINEAR),
  1356.                 music.PlaybackMode.IN_BACKGROUND)
  1357. controller.up.on_event(ControllerButtonEvent.PRESSED, on_up_pressed)
  1358. def on_on_overlap5(sprite19, otherSprite5):
  1359.     PushTiles(sprite19, otherSprite5)
  1360. sprites.on_overlap(SpriteKind.player, SpriteKind.Box, on_on_overlap5)
  1361. def on_down_pressed():
  1362.     if not (tiles.tile_at_location_is_wall(tiles.get_tile_location(sprites.read_data_sprite(Something, "S-Control").tilemap_location().column,
  1363.             1 + sprites.read_data_sprite(Something, "S-Control").tilemap_location().row))):
  1364.         Customeffects("Steps",
  1365.             sprites.read_data_sprite(Something, "S-Control"),
  1366.             False,
  1367.             sprites.read_data_sprite(Something, "S-Control").x,
  1368.             sprites.read_data_sprite(Something, "S-Control").y,
  1369.             400)
  1370.         grid.move(sprites.read_data_sprite(Something, "S-Control"), 0, 1)
  1371.         music.play(music.create_sound_effect(WaveShape.NOISE,
  1372.                 randint(300, 350),
  1373.                 0,
  1374.                 113,
  1375.                 0,
  1376.                 100,
  1377.                 SoundExpressionEffect.NONE,
  1378.                 InterpolationCurve.LINEAR),
  1379.             music.PlaybackMode.IN_BACKGROUND)
  1380. controller.down.on_event(ControllerButtonEvent.PRESSED, on_down_pressed)
  1381. PlayerBoxes: List[Sprite] = []
  1382. picture: Image = None
  1383. myEffect: SpreadEffectData = None
  1384. mySprite: Sprite = None
  1385. Something: Sprite = None
  1386. textSprite2: TextSprite = None
  1387. textSprite: TextSprite = None
  1388. Placeholder: Sprite = None
  1389. lvl = 0
  1390. PlayCutScene = False
  1391. music.stop_all_sounds()
  1392. PlayCutScene = True
  1393. lvl = 0
  1394. scene.set_background_color(15)
  1395. Placeholder = sprites.create(assets.image("""
  1396.     Logo
  1397.     """), SpriteKind.PlaceHolder)
  1398. textSprite = textsprite.create("Press A to Start", 0, 1)
  1399. textSprite.set_position(80, 80)
  1400. textSprite2 = textsprite.create("Made by ADM_F", 0, 8)
  1401. textSprite2.set_position(100, 110)
  1402. def on_pause_until5():
  1403.     pass
  1404. pause_until(on_pause_until5)
  1405. if controller.right.is_pressed():
  1406.     Keybinds.set_simulator_keymap(Keybinds.PlayerNumber.ONE,
  1407.         Keybinds.CustomKey.W,
  1408.         Keybinds.CustomKey.S,
  1409.         Keybinds.CustomKey.A,
  1410.         Keybinds.CustomKey.D,
  1411.         Keybinds.CustomKey.F,
  1412.         Keybinds.CustomKey.G)
  1413. if controller.up.is_pressed():
  1414.     lvl = game.ask_for_number("Level Select ", 2)
  1415. sprites.destroy(textSprite2)
  1416. for index4 in range(10):
  1417.     Placeholder.scale += -0.1
  1418.     textSprite.scale += -0.1
  1419.     pause(50)
  1420. sprites.destroy(textSprite)
  1421. sprites.destroy(Placeholder)
  1422. Something = sprites.create(assets.image("""
  1423.     Empty
  1424.     """), SpriteKind.Stupid)
  1425. mySprite = sprites.create(assets.image("""
  1426.     Sir Blue
  1427.     """), SpriteKind.player)
  1428. sprites.set_data_sprite(Something, "S-Control", mySprite)
  1429. CurrentParty = [mySprite]
  1430. characterAnimations.loop_frames(mySprite,
  1431.     assets.animation("""
  1432.         BlueLeft
  1433.         """),
  1434.     300,
  1435.     characterAnimations.rule(Predicate.FACING_LEFT))
  1436. characterAnimations.loop_frames(mySprite,
  1437.     assets.animation("""
  1438.         BlueDown
  1439.         """),
  1440.     300,
  1441.     characterAnimations.rule(Predicate.FACING_DOWN))
  1442. characterAnimations.loop_frames(mySprite,
  1443.     assets.animation("""
  1444.         BlueUp
  1445.         """),
  1446.     300,
  1447.     characterAnimations.rule(Predicate.FACING_UP))
  1448. characterAnimations.loop_frames(mySprite,
  1449.     assets.animation("""
  1450.         BlueRight
  1451.         """),
  1452.     300,
  1453.     characterAnimations.rule(Predicate.FACING_RIGHT))
  1454. myEffect = extraEffects.create_custom_spread_effect_data([0, 0],
  1455.     False,
  1456.     extraEffects.create_preset_size_table(ExtraEffectPresetShape.SPARK),
  1457.     extraEffects.create_percentage_range(50, 100),
  1458.     extraEffects.create_percentage_range(50, 100),
  1459.     extraEffects.create_time_range(200, 400))
  1460. music.play(music.string_playable("G G F A B G A B ", 300),
  1461.     music.PlaybackMode.IN_BACKGROUND)
  1462. CutScene("Journey Onward",
  1463.     "Warrior Of Blue",
  1464.     img("""
  1465.         . . . . . . . . . . . . . . . .
  1466.         . . . . . . . . . . . . . . . .
  1467.         . . . . . . . . . . . . . . . .
  1468.         . . . . . . . . . . . . . . . .
  1469.         . . . . . . . . . . . . . . . .
  1470.         . . . . . . . . . . . . . . . .
  1471.         . . . . . . . . . . . . . . . .
  1472.         . . . . . . . . . . . . . . . .
  1473.         . . . . . . . . . . . . . . . .
  1474.         . . . . . . . . . . . . . . . .
  1475.         . . . . . . . . . . . . . . . .
  1476.         . . . . . . . . . . . . . . . .
  1477.         . . . . . . . . . . . . . . . .
  1478.         . . . . . . . . . . . . . . . .
  1479.         . . . . . . . . . . . . . . . .
  1480.         . . . . . . . . . . . . . . . .
  1481.         """),
  1482.     2000)
  1483. music.play(music.create_song(assets.song("""
  1484.         Song1
  1485.         """)),
  1486.     music.PlaybackMode.LOOPING_IN_BACKGROUND)
  1487. Level(lvl)
  1488. def on_update_interval():
  1489.     global Placeholder
  1490.     for value6 in tiles.get_tiles_by_type(assets.tile("""
  1491.         Cannon LR
  1492.         """)):
  1493.         Placeholder = sprites.create(assets.image("""
  1494.             LaserSIDE
  1495.             """), SpriteKind.enemy)
  1496.         tiles.place_on_tile(Placeholder, value6)
  1497.         Placeholder.lifespan = 800
  1498.         Placeholder.z = -5
  1499.         Placeholder.vx = 75
  1500.         Placeholder = sprites.create(assets.image("""
  1501.             LaserSIDE
  1502.             """), SpriteKind.enemy)
  1503.         tiles.place_on_tile(Placeholder, value6)
  1504.         Placeholder.z = -5
  1505.         Placeholder.lifespan = 800
  1506.         Placeholder.vx = -75
  1507.     for value7 in tiles.get_tiles_by_type(assets.tile("""
  1508.         Cannon UD0
  1509.         """)):
  1510.         Placeholder = sprites.create(assets.image("""
  1511.             Laser UPDOWN
  1512.             """), SpriteKind.enemy)
  1513.         tiles.place_on_tile(Placeholder, value7)
  1514.         Placeholder.lifespan = 800
  1515.         Placeholder.vy = 75
  1516.         Placeholder.z = -5
  1517.         Placeholder = sprites.create(assets.image("""
  1518.             Laser UPDOWN
  1519.             """), SpriteKind.enemy)
  1520.         tiles.place_on_tile(Placeholder, value7)
  1521.         Placeholder.z = -5
  1522.         Placeholder.lifespan = 800
  1523.         Placeholder.vy = -75
  1524. game.on_update_interval(100, on_update_interval)
  1525. def on_on_update():
  1526.     if Something:
  1527.         Something.set_position(sprites.read_data_sprite(Something, "S-Control").x,
  1528.             sprites.read_data_sprite(Something, "S-Control").y - 7)
  1529.         if (characterAnimations.matches_rule(sprites.read_data_sprite(Something, "S-Control"),
  1530.             characterAnimations.rule(Predicate.FACING_RIGHT)) or characterAnimations.matches_rule(sprites.read_data_sprite(Something, "S-Control"),
  1531.             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):
  1532.             if sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"),
  1533.                 "H-Offhand") != spriteutils.null_consts(spriteutils.NullConsts.NULL):
  1534.                 sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"),
  1535.                     "H-Offhand").set_position(-1 + sprites.read_data_sprite(Something, "S-Control").x,
  1536.                     2 + sprites.read_data_sprite(Something, "S-Control").y)
  1537.             sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand").set_position(4 + sprites.read_data_sprite(Something, "S-Control").x,
  1538.                 sprites.read_data_sprite(Something, "S-Control").y)
  1539.         elif (characterAnimations.matches_rule(sprites.read_data_sprite(Something, "S-Control"),
  1540.             characterAnimations.rule(Predicate.FACING_UP)) or characterAnimations.matches_rule(sprites.read_data_sprite(Something, "S-Control"),
  1541.             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):
  1542.             sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"), "H-Hand").set_position(-3 + sprites.read_data_sprite(Something, "S-Control").x,
  1543.                 sprites.read_data_sprite(Something, "S-Control").y)
  1544.             if sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"),
  1545.                 "H-Offhand") != spriteutils.null_consts(spriteutils.NullConsts.NULL):
  1546.                 sprites.read_data_sprite(sprites.read_data_sprite(Something, "S-Control"),
  1547.                     "H-Offhand").set_position(3 + sprites.read_data_sprite(Something, "S-Control").x,
  1548.                     2 + sprites.read_data_sprite(Something, "S-Control").y)
  1549. game.on_update(on_on_update)
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2 小时前

【花雕动手做】基于Kitronik可编程开发板之板条箱地牢

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

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

核心游戏机制
1. 角色控制与移动
python
  1. def on_left_pressed():
  2. def on_right_pressed():
  3. def on_up_pressed():
  4. def on_down_pressed():
复制代码

网格化移动系统
移动时播放脚步声特效
碰撞检测防止穿墙
2. 箱子推动系统
python
  1. def PushTiles(Pusher: Sprite, Pushing: Sprite):
复制代码

复杂的箱子推动逻辑
支持连锁推动(箱子推箱子)
防止推动到墙壁时的反弹机制

游戏特色功能
1. 机关系统
按钮机制:
红色按钮(RButton):一次性开关,改变红色地砖状态
蓝色按钮(BButton):切换开关,改变蓝色地砖状态
传送门:
家和箱子都可以通过传送门
自动传送并重置传送门状态
陷阱与障碍:
深坑(Pit):玩家掉落会重置关卡
激光炮台:定期发射激光障碍
可破坏墙壁:使用剑破坏
2. 物品系统
python
  1. def Use_Item(Text: str):
复制代码

钥匙(Key):打开锁住的门
剑(Sword):破坏脆弱墙壁和物体
书(Book):触发剧情和结局
3. 特效系统
python
  1. 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
  1. def CutScene(Text1: str, Text2: str, Background: Image, Time: number):
复制代码

关卡间的剧情过渡
教育性主题:知识的力量
最终传达积极信息

技术实现亮点
1. 状态管理
python
  1. sprites.set_data_boolean(Pushing, "RecentlyPushed", True)
复制代码

使用精灵数据存储系统管理游戏状态

2. 关卡加载系统
python
  1. def Level(Lvl: number):
复制代码

动态加载不同地图
自动生成箱子和物品
重置游戏状态

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

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2 小时前

【花雕动手做】基于Kitronik可编程开发板之板条箱地牢

图形编程参考实验程序

【花雕动手做】基于Kitronik可编程开发板之板条箱地牢图1

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

【花雕动手做】基于Kitronik可编程开发板之板条箱地牢图2

实验场景记录

【花雕动手做】基于Kitronik可编程开发板之板条箱地牢图3

【花雕动手做】基于Kitronik可编程开发板之板条箱地牢图5

【花雕动手做】基于Kitronik可编程开发板之板条箱地牢图4

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2 小时前

【花雕动手做】基于Kitronik可编程开发板之板条箱地牢

【花雕动手做】基于Kitronik可编程开发板之板条箱地牢图1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail