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

[项目] 【花雕动手做】基于 Kitronik 游戏机开发板之平台跳跃

[复制链接]
【花雕动手做】基于 Kitronik 游戏机开发板之平台跳跃图1

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

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

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


【花雕动手做】基于 Kitronik 游戏机开发板之平台跳跃图2

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】基于 Kitronik 游戏机开发板之平台跳跃

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

MicroPython实验代码

  1. class ActionKind(Enum):
  2.     RunningLeft = 0
  3.     RunningRight = 1
  4.     Idle = 2
  5.     IdleLeft = 3
  6.     IdleRight = 4
  7.     JumpingLeft = 5
  8.     JumpingRight = 6
  9.     CrouchLeft = 7
  10.     CrouchRight = 8
  11.     Flying = 9
  12.     Walking = 10
  13.     Jumping = 11
  14. @namespace
  15. class SpriteKind:
  16.     Bumper = SpriteKind.create()
  17.     Goal = SpriteKind.create()
  18.     Coin = SpriteKind.create()
  19.     Flier = SpriteKind.create()
  20. def on_on_overlap(sprite, otherSprite):
  21.     if sprite.vy > 0 and not (sprite.is_hitting_tile(CollisionDirection.BOTTOM)) or sprite.y < otherSprite.top:
  22.         otherSprite.destroy(effects.ashes, 250)
  23.         otherSprite.vy = -50
  24.         sprite.vy = -2 * pixelsToMeters
  25.         info.change_score_by(1)
  26.         music.power_up.play()
  27.     else:
  28.         info.change_life_by(-1)
  29.         sprite.say("Ow!", invincibilityPeriod)
  30.         music.power_down.play()
  31.     pause(invincibilityPeriod)
  32. sprites.on_overlap(SpriteKind.player, SpriteKind.Bumper, on_on_overlap)
  33. def initializeAnimations():
  34.     initializeHeroAnimations()
  35.     initializeCoinAnimation()
  36.     initializeFlierAnimations()
  37. def giveIntroduction():
  38.     game.set_dialog_frame(img("""
  39.         . 2 2 2 2 2 2 2 2 2 2 2 2 2 . .
  40.         2 2 1 1 1 1 1 1 1 1 1 1 1 2 2 .
  41.         2 1 1 2 2 2 2 2 2 2 2 2 1 1 2 .
  42.         2 1 2 2 1 1 1 1 1 1 1 2 2 1 2 .
  43.         2 1 2 1 1 1 1 1 1 1 1 1 2 1 2 .
  44.         2 1 2 1 1 1 1 1 1 1 1 1 2 1 2 .
  45.         2 1 2 1 1 1 1 1 1 1 1 1 2 1 2 .
  46.         2 1 2 1 1 1 1 1 1 1 1 1 2 1 2 .
  47.         2 1 2 1 1 1 1 1 1 1 1 1 2 1 2 .
  48.         2 1 2 1 1 1 1 1 1 1 1 1 2 1 2 .
  49.         2 1 2 1 1 1 1 1 1 1 1 1 2 1 2 .
  50.         2 1 2 2 1 1 1 1 1 1 1 2 2 1 2 .
  51.         2 1 1 2 2 2 2 2 2 2 2 2 1 1 2 .
  52.         2 2 1 1 1 1 1 1 1 1 1 1 1 2 2 .
  53.         . 2 2 2 2 2 2 2 2 2 2 2 2 2 . .
  54.         . . . . . . . . . . . . . . . .
  55.         """))
  56.     game.set_dialog_cursor(img("""
  57.         . . . . . . . . . . . . . . . .
  58.         . . . . . . . . . . . . . . . .
  59.         . . . . . . . . . . . . . . . .
  60.         . . . . . . f f f f . . . . . .
  61.         . . . . f f 5 5 5 5 f f . . . .
  62.         . . . . f 5 5 5 5 5 5 f . . . .
  63.         . . . f 5 5 5 4 4 5 5 5 f . . .
  64.         . . . f 5 5 5 4 4 5 5 5 f . . .
  65.         . . . f 5 5 5 4 4 5 5 5 f . . .
  66.         . . . f 5 5 5 4 4 5 5 5 f . . .
  67.         . . . . f 5 5 5 5 5 5 f . . . .
  68.         . . . . f f 5 5 5 5 f f . . . .
  69.         . . . . . . f f f f . . . . . .
  70.         . . . . . . . . . . . . . . . .
  71.         . . . . . . . . . . . . . . . .
  72.         . . . . . . . . . . . . . . . .
  73.         """))
  74.     showInstruction("Move with the left and right buttons.")
  75.     showInstruction("Jump with the up or A button.")
  76.     showInstruction("Double jump by pressing jump again.")
  77. def initializeCoinAnimation():
  78.     global coinAnimation
  79.     coinAnimation = animation.create_animation(ActionKind.Walking, 200)
  80.     coinAnimation.add_animation_frame(img("""
  81.         . . . . . . . . . . . . . . . .
  82.         . . . . . . . . . . . . . . . .
  83.         . . . . . . . . . . . . . . . .
  84.         . . . . . . f f f f . . . . . .
  85.         . . . . f f 5 5 5 5 f f . . . .
  86.         . . . . f 5 5 5 5 5 5 f . . . .
  87.         . . . f 5 5 5 4 4 5 5 5 f . . .
  88.         . . . f 5 5 5 4 4 5 5 5 f . . .
  89.         . . . f 5 5 5 4 4 5 5 5 f . . .
  90.         . . . f 5 5 5 4 4 5 5 5 f . . .
  91.         . . . . f 5 5 5 5 5 5 f . . . .
  92.         . . . . f f 5 5 5 5 f f . . . .
  93.         . . . . . . f f f f . . . . . .
  94.         . . . . . . . . . . . . . . . .
  95.         . . . . . . . . . . . . . . . .
  96.         . . . . . . . . . . . . . . . .
  97.         """))
  98.     coinAnimation.add_animation_frame(img("""
  99.         . . . . . . . . . . . . . . . .
  100.         . . . . . . . . . . . . . . . .
  101.         . . . . . . . . . . . . . . . .
  102.         . . . . f f f f f f . . . . . .
  103.         . . . f f 5 f 5 5 5 f . . . . .
  104.         . . . f 5 f 5 5 5 5 5 f . . . .
  105.         . . f 5 f 5 5 5 4 5 5 f . . . .
  106.         . . f 5 f 5 5 5 4 4 5 5 f . . .
  107.         . . f 5 f 5 5 5 4 4 5 5 f . . .
  108.         . . f 5 f 5 5 5 4 5 5 f . . . .
  109.         . . . f 5 f 5 5 5 5 5 f . . . .
  110.         . . . . f 5 f 5 5 5 f . . . . .
  111.         . . . . f f f f f f . . . . . .
  112.         . . . . . . . . . . . . . . . .
  113.         . . . . . . . . . . . . . . . .
  114.         . . . . . . . . . . . . . . . .
  115.         """))
  116.     coinAnimation.add_animation_frame(img("""
  117.         . . . . . . . . . . . . . . . .
  118.         . . . . . . . . . . . . . . . .
  119.         . . . . . . . . . . . . . . . .
  120.         . . . . . f f f f f . . . . . .
  121.         . . . . f f 5 f 5 f f . . . . .
  122.         . . . f f 5 f 5 5 5 f . . . . .
  123.         . . . f 5 f 5 5 5 5 f f . . . .
  124.         . . . f 5 f 5 5 4 5 5 f . . . .
  125.         . . . f 5 f 5 5 4 5 5 f . . . .
  126.         . . . f 5 f 5 5 5 5 f f . . . .
  127.         . . . f f 5 f 5 5 5 f . . . . .
  128.         . . . . f f 5 f 5 f f . . . . .
  129.         . . . . . f f f f f . . . . . .
  130.         . . . . . . . . . . . . . . . .
  131.         . . . . . . . . . . . . . . . .
  132.         . . . . . . . . . . . . . . . .
  133.         """))
  134.     coinAnimation.add_animation_frame(img("""
  135.         . . . . . . . . . . . . . . . .
  136.         . . . . . . . . . . . . . . . .
  137.         . . . . . . . . . . . . . . . .
  138.         . . . . . . f f f f . . . . . .
  139.         . . . . . f f f f f . . . . . .
  140.         . . . . . f 5 f 5 f f . . . . .
  141.         . . . . . f 5 f 5 5 f . . . . .
  142.         . . . . . f 5 f 5 5 f . . . . .
  143.         . . . . . f 5 f 5 5 f . . . . .
  144.         . . . . . f 5 f 5 5 f . . . . .
  145.         . . . . . f 5 f 5 f f . . . . .
  146.         . . . . . f f f f f . . . . . .
  147.         . . . . . . f f f f . . . . . .
  148.         . . . . . . . . . . . . . . . .
  149.         . . . . . . . . . . . . . . . .
  150.         . . . . . . . . . . . . . . . .
  151.         """))
  152.     coinAnimation.add_animation_frame(img("""
  153.         . . . . . . . . . . . . . . . .
  154.         . . . . . . . . . . . . . . . .
  155.         . . . . . . . . . . . . . . . .
  156.         . . . . . . f f f f . . . . . .
  157.         . . . . . . f f f f f . . . . .
  158.         . . . . . f f 5 f 5 f . . . . .
  159.         . . . . . f 5 5 f 5 f . . . . .
  160.         . . . . . f 5 5 f 5 f . . . . .
  161.         . . . . . f 5 5 f 5 f . . . . .
  162.         . . . . . f 5 5 f 5 f . . . . .
  163.         . . . . . f f 5 f 5 f . . . . .
  164.         . . . . . . f f f f f . . . . .
  165.         . . . . . . f f f f . . . . . .
  166.         . . . . . . . . . . . . . . . .
  167.         . . . . . . . . . . . . . . . .
  168.         . . . . . . . . . . . . . . . .
  169.         """))
  170.     coinAnimation.add_animation_frame(img("""
  171.         . . . . . . . . . . . . . . . .
  172.         . . . . . . . . . . . . . . . .
  173.         . . . . . . . . . . . . . . . .
  174.         . . . . . . f f f f f . . . . .
  175.         . . . . . f f 5 f 5 f f . . . .
  176.         . . . . . f 5 5 5 f 5 f f . . .
  177.         . . . . f f 5 5 5 5 f 5 f . . .
  178.         . . . . f 5 5 4 5 5 f 5 f . . .
  179.         . . . . f 5 5 4 5 5 f 5 f . . .
  180.         . . . . f f 5 5 5 5 f 5 f . . .
  181.         . . . . . f 5 5 5 f 5 f f . . .
  182.         . . . . . f f 5 f 5 f f . . . .
  183.         . . . . . . f f f f f . . . . .
  184.         . . . . . . . . . . . . . . . .
  185.         . . . . . . . . . . . . . . . .
  186.         . . . . . . . . . . . . . . . .
  187.         """))
  188.     coinAnimation.add_animation_frame(img("""
  189.         . . . . . . . . . . . . . . . .
  190.         . . . . . . . . . . . . . . . .
  191.         . . . . . . . . . . . . . . . .
  192.         . . . . . . f f f f f f . . . .
  193.         . . . . . f 5 5 5 f 5 f f . . .
  194.         . . . . f 5 5 5 5 5 f 5 f . . .
  195.         . . . . f 5 5 4 5 5 5 f 5 f . .
  196.         . . . f 5 5 4 4 5 5 5 f 5 f . .
  197.         . . . f 5 5 4 4 5 5 5 f 5 f . .
  198.         . . . . f 5 5 4 5 5 5 f 5 f . .
  199.         . . . . f 5 5 5 5 5 f 5 f . . .
  200.         . . . . . f 5 5 5 f 5 f . . . .
  201.         . . . . . . f f f f f f . . . .
  202.         . . . . . . . . . . . . . . . .
  203.         . . . . . . . . . . . . . . . .
  204.         . . . . . . . . . . . . . . . .
  205.         """))
  206. def on_on_overlap2(sprite2, otherSprite2):
  207.     otherSprite2.destroy(effects.trail, 250)
  208.     otherSprite2.y += -3
  209.     info.change_score_by(3)
  210.     music.ba_ding.play()
  211. sprites.on_overlap(SpriteKind.player, SpriteKind.Coin, on_on_overlap2)
  212. def attemptJump():
  213.     global doubleJumpSpeed, canDoubleJump
  214.     # else if: either fell off a ledge, or double jumping
  215.     if hero.is_hitting_tile(CollisionDirection.BOTTOM):
  216.         hero.vy = -4 * pixelsToMeters
  217.     elif canDoubleJump:
  218.         doubleJumpSpeed = -3 * pixelsToMeters
  219.         # Good double jump
  220.         if hero.vy >= -40:
  221.             doubleJumpSpeed = -4.5 * pixelsToMeters
  222.             hero.start_effect(effects.trail, 500)
  223.             scene.camera_shake(2, 250)
  224.         hero.vy = doubleJumpSpeed
  225.         canDoubleJump = False
  226. def on_up_pressed():
  227.     attemptJump()
  228. controller.up.on_event(ControllerButtonEvent.PRESSED, on_up_pressed)
  229. def animateIdle():
  230.     global mainIdleLeft, mainIdleRight
  231.     mainIdleLeft = animation.create_animation(ActionKind.Walking, 100)
  232.     animation.attach_animation(hero, mainIdleLeft)
  233.     mainIdleLeft.add_animation_frame(img("""
  234.         . . . . . . . . . . . . . . . .
  235.         . . . f f f f f f f f f f . . .
  236.         . . f e e e e e e e e e e f . .
  237.         . f e e e e e e e e e e e e f .
  238.         . f d d d d d d d d d e e d f .
  239.         . f d d f d d d d f d d e d f .
  240.         . f d d f d d d d f d d d e f .
  241.         . f d d f d d d d f d d d f . .
  242.         . f d d d d d d d d d d d f . .
  243.         . f a c c c c c c c c a b f . .
  244.         . f d d c c c c c c d d d f . .
  245.         . f d f f f b b f f f d d f . .
  246.         . . f a a a a a a a a a b f . .
  247.         . . . f a a b f f a a b f . . .
  248.         . . . f a a b f f a a b f . . .
  249.         . . . . f f f . . f f f . . . .
  250.         """))
  251.     mainIdleRight = animation.create_animation(ActionKind.Walking, 100)
  252.     animation.attach_animation(hero, mainIdleRight)
  253.     mainIdleRight.add_animation_frame(img("""
  254.         . . . . . . . . . . . . . . . .
  255.         . . . f f f f f f f f f f . . .
  256.         . . f e e e e e e e e e e f . .
  257.         . f e e e e e e e e e e e e f .
  258.         . f d e e d d d d d d d d d f .
  259.         . f d e d d f d d d d f d d f .
  260.         . f e d d d f d d d d f d d f .
  261.         . . f d d d f d d d d f d d f .
  262.         . . f d d d d d d d d d d d f .
  263.         . . f b a c c c c c c c c a f .
  264.         . . f d d d c c c c c c d d f .
  265.         . . f d d f f f b b f f f d f .
  266.         . . f b a a a a a a a a a f . .
  267.         . . . f b a a f f b a a f . . .
  268.         . . . f b a a f f b a a f . . .
  269.         . . . . f f f . . f f f . . . .
  270.         """))
  271. def on_down_pressed():
  272.     if not (hero.is_hitting_tile(CollisionDirection.BOTTOM)):
  273.         hero.vy += 80
  274. controller.down.on_event(ControllerButtonEvent.PRESSED, on_down_pressed)
  275. def setLevelTileMap(level: number):
  276.     clearGame()
  277.     if level == 0:
  278.         tiles.set_tilemap(tilemap("""
  279.             level
  280.             """))
  281.     elif level == 1:
  282.         tiles.set_tilemap(tilemap("""
  283.             level_0
  284.             """))
  285.     elif level == 2:
  286.         tiles.set_tilemap(tilemap("""
  287.             level_1
  288.             """))
  289.     elif level == 3:
  290.         tiles.set_tilemap(tilemap("""
  291.             level_2
  292.             """))
  293.     elif level == 4:
  294.         tiles.set_tilemap(tilemap("""
  295.             level_3
  296.             """))
  297.     elif level == 5:
  298.         tiles.set_tilemap(tilemap("""
  299.             level_4
  300.             """))
  301.     elif level == 6:
  302.         tiles.set_tilemap(tilemap("""
  303.             level_5
  304.             """))
  305.     elif level == 7:
  306.         tiles.set_tilemap(tilemap("""
  307.             level_6
  308.             """))
  309.     initializeLevel(level)
  310. def initializeFlierAnimations():
  311.     global flierFlying, flierIdle
  312.     flierFlying = animation.create_animation(ActionKind.Walking, 100)
  313.     flierFlying.add_animation_frame(img("""
  314.         . . . . . . . . . . . . . . . .
  315.         . . . . . . . . . . . . . . . .
  316.         . . . . . . . . . . . . . . . .
  317.         . . . . . f f f f f f f . . . .
  318.         . . . . f 4 4 4 4 4 4 4 f . . .
  319.         . . . f 4 5 5 4 4 4 5 5 4 f . .
  320.         . f . f 4 4 4 5 4 5 4 4 4 f . f
  321.         . f f 4 4 4 4 4 4 4 4 4 4 4 f f
  322.         . f 4 4 4 4 4 5 4 5 4 4 4 4 4 f
  323.         . f 4 4 4 4 4 5 4 5 4 4 4 4 4 f
  324.         . f f 4 4 4 4 4 4 4 4 4 4 4 f f
  325.         . . . f 4 4 5 5 5 5 5 4 4 f . .
  326.         . . . . f 4 5 4 4 4 5 4 f . . .
  327.         . . . . . f f f f f f f . . . .
  328.         . . . . . . . . . . . . . . . .
  329.         . . . . . . . . . . . . . . . .
  330.         """))
  331.     flierFlying.add_animation_frame(img("""
  332.         . . . . . . . . . . . . . . . .
  333.         . . . . . . . . . . . . . . . .
  334.         . . . . . . . . . . . . . . . .
  335.         . . . . . f f f f f f f . . . .
  336.         . . . . f 4 4 4 4 4 4 4 f . . .
  337.         . . . f 4 5 5 4 4 4 5 5 4 f . .
  338.         . . . f 4 4 4 5 4 5 4 4 4 f . .
  339.         . . f 4 4 4 4 4 4 4 4 4 4 4 f .
  340.         . . f 4 4 4 4 5 4 5 4 4 4 4 f .
  341.         . f 4 4 4 4 4 5 4 5 4 4 4 4 4 f
  342.         . f 4 4 4 4 4 4 4 4 4 4 4 4 4 f
  343.         . f 4 f 4 4 5 5 5 5 5 4 4 f 4 f
  344.         . f f . f 4 5 4 4 4 5 4 f . f f
  345.         . f . . . f f f f f f f . . . f
  346.         . . . . . . . . . . . . . . . .
  347.         . . . . . . . . . . . . . . . .
  348.         """))
  349.     flierFlying.add_animation_frame(img("""
  350.         . . . . . . . . . . . . . . . .
  351.         . . . . . . . . . . . . . . . .
  352.         . . . . . . . . . . . . . . . .
  353.         . . . . . f f f f f f f . . . .
  354.         . . . . f 4 4 4 4 4 4 4 f . . .
  355.         . . . f 4 5 5 4 4 4 5 5 4 f . .
  356.         . f . f 4 4 4 5 4 5 4 4 4 f . f
  357.         . f f 4 4 4 4 4 4 4 4 4 4 4 f f
  358.         . f 4 4 4 4 4 5 4 5 4 4 4 4 4 f
  359.         . f 4 4 4 4 4 5 4 5 4 4 4 4 4 f
  360.         . f f 4 4 4 4 4 4 4 4 4 4 4 f f
  361.         . . . f 4 4 5 5 5 5 5 4 4 f . .
  362.         . . . . f 4 5 4 4 4 5 4 f . . .
  363.         . . . . . f f f f f f f . . . .
  364.         . . . . . . . . . . . . . . . .
  365.         . . . . . . . . . . . . . . . .
  366.         """))
  367.     flierIdle = animation.create_animation(ActionKind.Walking, 100)
  368.     flierIdle.add_animation_frame(img("""
  369.         . . . . . . . . . . . . . . . .
  370.         . . . . . . . . . . . . . . . .
  371.         . . . . . . . . . . . . . . . .
  372.         . . . . . f f f f f f f . . . .
  373.         . . . . f 4 4 4 4 4 4 4 f . . .
  374.         . . . f 4 5 5 4 4 4 5 5 4 f . .
  375.         . f . f 4 4 4 5 4 5 4 4 4 f . f
  376.         . f f 4 4 4 4 4 4 4 4 4 4 4 f f
  377.         . f 4 4 4 4 4 5 4 5 4 4 4 4 4 f
  378.         . f 4 4 4 4 4 5 4 5 4 4 4 4 4 f
  379.         . f f 4 4 4 4 4 4 4 4 4 4 4 f f
  380.         . . . f 4 4 5 5 5 5 5 4 4 f . .
  381.         . . . . f 4 5 4 4 4 5 4 f . . .
  382.         . . . . . f f f f f f f . . . .
  383.         . . . . . . . . . . . . . . . .
  384.         . . . . . . . . . . . . . . . .
  385.         """))
  386. def animateRun():
  387.     global mainRunLeft, mainRunRight
  388.     mainRunLeft = animation.create_animation(ActionKind.Walking, 100)
  389.     animation.attach_animation(hero, mainRunLeft)
  390.     mainRunLeft.add_animation_frame(img("""
  391.         . . . . . . . . . . . . . . . .
  392.         . . . f f f f f f f . . . . . .
  393.         . . f e e e e e e e f . . . . .
  394.         . f e e e e e e e e e f . . . .
  395.         . f d d d d e d d e e f . . . .
  396.         . f d d f d d e d e e f . . . .
  397.         . f d d f d d d e e e f . . . .
  398.         . f d d f d d d d d d f . . . .
  399.         . f d d d d d d d d d f . . . .
  400.         . . f c c c a a c c b f . . . .
  401.         . . f c c d d d c c b f . . . .
  402.         . . f b f f d d f f f f . . . .
  403.         . . f a a a a a a a b f . . . .
  404.         . . . f a a a a b f f . . . . .
  405.         . . . f a a a a b f . . . . . .
  406.         . . . . f f f f f . . . . . . .
  407.         """))
  408.     mainRunLeft.add_animation_frame(img("""
  409.         . . . . . . . . . . . . . . . .
  410.         . . . . . . . . . . . . . . . .
  411.         . . . f f f f f f f . . . . . .
  412.         . . f e e e e e e e f . . . . .
  413.         . f e e e e e e e e e f . . . .
  414.         . f d d d d e d d e e f . . . .
  415.         . f d d f d d e d e e f . . . .
  416.         . f d d f d d d e e e f . . . .
  417.         . f d d f d d d d d d f . . . .
  418.         . f d d d d d d d d d f . . . .
  419.         . . f c c c c a a c b f . . . .
  420.         . . f c c c c d d c b f . . . .
  421.         . . f b f f d d d f f f f . . .
  422.         . . f a a a a a a a a b f f . .
  423.         . . . f a a b f f a a a f f . .
  424.         . . . . f f f . f f f f f . . .
  425.         """))
  426.     mainRunLeft.add_animation_frame(img("""
  427.         . . . . . . . . . . . . . . . .
  428.         . . . f f f f f f f . . . . . .
  429.         . . f e e e e e e e f . . . . .
  430.         . f e e e e e e e e e f . . . .
  431.         . f d d d d e d d e e f . . . .
  432.         . f d d f d d e d e e f . . . .
  433.         . f d d f d d d e e e f . . . .
  434.         . f d d f d d d d d d f . . . .
  435.         . f d d d d d d d d d f . . . .
  436.         . . f c c c a a c c b f . . . .
  437.         . . f c c d d d c c b f . . . .
  438.         . . f b f f d d f f f f . . . .
  439.         . . f a a a a a a a b f . . . .
  440.         . . . f a a a a b f f . . . . .
  441.         . . . f a a a a b f . . . . . .
  442.         . . . . f f f f f . . . . . . .
  443.         """))
  444.     mainRunLeft.add_animation_frame(img("""
  445.         . . . . . . . . . . . . . . . .
  446.         . . . . . . . . . . . . . . . .
  447.         . . . f f f f f f f . . . . . .
  448.         . . f e e e e e e e f . . . . .
  449.         . f e e e e e e e e e f . . . .
  450.         . f d d d d e d d e e f . . . .
  451.         . f d d f d d e d e e f . . . .
  452.         . f d d f d d d e e e f . . . .
  453.         . f d d f d d d d d d f . . . .
  454.         . f d d d d d d d d d f . . . .
  455.         . . f c a a c c c c b f . . . .
  456.         . f d d d b c c c c b f . . . .
  457.         f f f d d f f f f f f f . . . .
  458.         f f f a a a a a a a b f . . . .
  459.         . f a a b f a a b f f . . . . .
  460.         . f f f f . f f f . . . . . . .
  461.         """))
  462.     mainRunRight = animation.create_animation(ActionKind.Walking, 100)
  463.     animation.attach_animation(hero, mainRunRight)
  464.     mainRunRight.add_animation_frame(img("""
  465.         . . . . . . . . . . . . . . . .
  466.         . . . . . . f f f f f f f . . .
  467.         . . . . . f e e e e e e e f . .
  468.         . . . . f e e e e e e e e e f .
  469.         . . . . f e e d d e d d d d f .
  470.         . . . . f e e d e d d f d d f .
  471.         . . . . f e e e d d d f d d f .
  472.         . . . . f d d d d d d f d d f .
  473.         . . . . f d d d d d d d d d f .
  474.         . . . . f b c c a a c c c f . .
  475.         . . . . f b c c d d d c c f . .
  476.         . . . . f f f f d d f f b f . .
  477.         . . . . f b a a a a a a a f . .
  478.         . . . . . f f b a a a a f . . .
  479.         . . . . . . f b a a a a f . . .
  480.         . . . . . . . f f f f f . . . .
  481.         """))
  482.     mainRunRight.add_animation_frame(img("""
  483.         . . . . . . . . . . . . . . . .
  484.         . . . . . . . . . . . . . . . .
  485.         . . . . . . f f f f f f f . . .
  486.         . . . . . f e e e e e e e f . .
  487.         . . . . f e e e e e e e e e f .
  488.         . . . . f e e d d e d d d d f .
  489.         . . . . f e e d e d d f d d f .
  490.         . . . . f e e e d d d f d d f .
  491.         . . . . f d d d d d d f d d f .
  492.         . . . . f d d d d d d d d d f .
  493.         . . . . f b c a a c c c c f . .
  494.         . . . . f b c d d c c c c f . .
  495.         . . . f f f f d d d f f b f . .
  496.         . . f f b a a a a a a a a f . .
  497.         . . f f a a a f f b a a f . . .
  498.         . . . f f f f . . f f f . . . .
  499.         """))
  500.     mainRunRight.add_animation_frame(img("""
  501.         . . . . . . . . . . . . . . . .
  502.         . . . . . . f f f f f f f . . .
  503.         . . . . . f e e e e e e e f . .
  504.         . . . . f e e e e e e e e e f .
  505.         . . . . f e e d d e d d d d f .
  506.         . . . . f e e d e d d f d d f .
  507.         . . . . f e e e d d d f d d f .
  508.         . . . . f d d d d d d f d d f .
  509.         . . . . f d d d d d d d d d f .
  510.         . . . . f b c c a a c c c f . .
  511.         . . . . f b c c d d d c c f . .
  512.         . . . . f f f f d d f f b f . .
  513.         . . . . f b a a a a a a a f . .
  514.         . . . . . f f b a a a a f . . .
  515.         . . . . . . f b a a a a f . . .
  516.         . . . . . . . f f f f f . . . .
  517.         """))
  518.     mainRunRight.add_animation_frame(img("""
  519.         . . . . . . . . . . . . . . . .
  520.         . . . . . . . . . . . . . . . .
  521.         . . . . . . f f f f f f f . . .
  522.         . . . . . f e e e e e e e f . .
  523.         . . . . f e e e e e e e e e f .
  524.         . . . . f e e d d e d d d d f .
  525.         . . . . f e e d e d d f d d f .
  526.         . . . . f e e e d d d f d d f .
  527.         . . . . f d d d d d d f d d f .
  528.         . . . . f d d d d d d d d d f .
  529.         . . . . f b c c c c a a c f . .
  530.         . . . . f b c c c c b d d d f .
  531.         . . . . f f f f f f f d d f f f
  532.         . . . . f b a a a a a a a f f f
  533.         . . . . . f f b a a f b a a f .
  534.         . . . . . . . f f f . f f f . .
  535.         """))
  536. def on_a_pressed():
  537.     attemptJump()
  538. controller.A.on_event(ControllerButtonEvent.PRESSED, on_a_pressed)
  539. def animateJumps():
  540.     global mainJumpLeft, mainJumpRight
  541.     # Because there isn't currently an easy way to say "play this animation a single time
  542.     # and stop at the end", this just adds a bunch of the same frame at the end to accomplish
  543.     # the same behavior
  544.     mainJumpLeft = animation.create_animation(ActionKind.Walking, 100)
  545.     animation.attach_animation(hero, mainJumpLeft)
  546.     mainJumpLeft.add_animation_frame(img("""
  547.         . . . . . . . . . . . . . . . .
  548.         . . . f f f f f f f f f f . . .
  549.         . . f e e e e e e e e e e f . .
  550.         . f e e e e e e e e e e e e f .
  551.         . f d d d d d d d d d e e d f .
  552.         . f d d f d d d d f d d e d f .
  553.         . f d d f d d d d f d d d e f .
  554.         . f d d f d d d d f d d d f . .
  555.         . f d d d d d d d d d d d f . .
  556.         . f a c c c c c c c c a b f . .
  557.         . f d d c c c c c c d d d f . .
  558.         . f d f f f b b f f f d d f . .
  559.         . . f a a a a a a a a a b f . .
  560.         . . . f a a b f f a a b f . . .
  561.         . . . f a a b f f a a b f . . .
  562.         . . . . f f f . . f f f . . . .
  563.         """))
  564.     mainJumpLeft.add_animation_frame(img("""
  565.         . . . . . . . . . . . . . . . .
  566.         . . . f f f f f f f f f f . . .
  567.         . . f e e e e e e e e e e f . .
  568.         . f e e e e e e e e e e e e f .
  569.         . f d d d d d d d d d e e d f .
  570.         . f d d f d d d d f d d e d f .
  571.         . f d d f d d d d f d d d e f .
  572.         . f d d f d d d d f d d d f . .
  573.         . f d d d d d d d d d d d f . .
  574.         . f a c c c c c c c c a b f . .
  575.         . f d d c c c c c c d d d f . .
  576.         . f d f f f b b f f f d d f . .
  577.         . . f a a a a a a a a a b f . .
  578.         . . . f a a b f f a a b f . . .
  579.         . . . . f f f . . f f f . . . .
  580.         . . . . . . . . . . . . . . . .
  581.         """))
  582.     for index in range(30):
  583.         mainJumpLeft.add_animation_frame(img("""
  584.             . . . . . . . . . . . . . . . .
  585.             . . . f f f f f f f f f f . . .
  586.             . . f e e e e e e e e e e f . .
  587.             . f e e e e e e e e e e e e f .
  588.             . f d d d d d d d d d e e d f .
  589.             . f d d f d d d d f d d e d f .
  590.             . f d d f d d d d f d d d e f .
  591.             . f d d f d d d d f d d d f . .
  592.             . f d d d d d d d d d d d f f .
  593.             . d a b c c c c c c c c b a d .
  594.             . d a c c c c c c c c c c a d .
  595.             . f f f f f b b f f f f f f f .
  596.             . . f a a a a a a a a a b f . .
  597.             . . . f a a b f f a a b f . . .
  598.             . . . . f f f . . f f f . . . .
  599.             . . . . . . . . . . . . . . . .
  600.             """))
  601.     mainJumpRight = animation.create_animation(ActionKind.Walking, 100)
  602.     animation.attach_animation(hero, mainJumpRight)
  603.     mainJumpRight.add_animation_frame(img("""
  604.         . . . . . . . . . . . . . . . .
  605.         . . . f f f f f f f f f f . . .
  606.         . . f e e e e e e e e e e f . .
  607.         . f e e e e e e e e e e e e f .
  608.         . f d e e d d d d d d d d d f .
  609.         . f d e d d f d d d d f d d f .
  610.         . f e d d d f d d d d f d d f .
  611.         . . f d d d f d d d d f d d f .
  612.         . . f d d d d d d d d d d d f .
  613.         . . f b a c c c c c c c c a f .
  614.         . . f d d d c c c c c c d d f .
  615.         . . f d d f f f b b f f f d f .
  616.         . . f b a a a a a a a a a f . .
  617.         . . . f b a a f f b a a f . . .
  618.         . . . f b a a f f b a a f . . .
  619.         . . . . f f f . . f f f . . . .
  620.         """))
  621.     mainJumpRight.add_animation_frame(img("""
  622.         . . . . . . . . . . . . . . . .
  623.         . . . f f f f f f f f f f . . .
  624.         . . f e e e e e e e e e e f . .
  625.         . f e e e e e e e e e e e e f .
  626.         . f d e e d d d d d d d d d f .
  627.         . f d e d d f d d d d f d d f .
  628.         . f e d d d f d d d d f d d f .
  629.         . . f d d d f d d d d f d d f .
  630.         . . f d d d d d d d d d d d f .
  631.         . . f b a c c c c c c c c a f .
  632.         . . f d d d c c c c c c d d f .
  633.         . . f d d f f f b b f f f d f .
  634.         . . f b a a a a a a a a a f . .
  635.         . . . f b a a f f b a a f . . .
  636.         . . . . f f f . . f f f . . . .
  637.         . . . . . . . . . . . . . . . .
  638.         """))
  639.     for index2 in range(30):
  640.         mainJumpRight.add_animation_frame(img("""
  641.             . . . . . . . . . . . . . . . .
  642.             . . . f f f f f f f f f f . . .
  643.             . . f e e e e e e e e e e f . .
  644.             . f e e e e e e e e e e e e f .
  645.             . f d e e d d d d d d d d d f .
  646.             . f d e d d f d d d d f d d f .
  647.             . f e d d d f d d d d f d d f .
  648.             . . f d d d f d d d d f d d f .
  649.             . f f d d d d d d d d d d d f .
  650.             . d a b c c c c c c c c b a d .
  651.             . d a c c c c c c c c c c a d .
  652.             . f f f f f f f b b f f f f f .
  653.             . . f b a a a a a a a a a f . .
  654.             . . . f b a a f f b a a f . . .
  655.             . . . . f f f . . f f f . . . .
  656.             . . . . . . . . . . . . . . . .
  657.             """))
  658. def animateCrouch():
  659.     global mainCrouchLeft, mainCrouchRight
  660.     mainCrouchLeft = animation.create_animation(ActionKind.Walking, 100)
  661.     animation.attach_animation(hero, mainCrouchLeft)
  662.     mainCrouchLeft.add_animation_frame(img("""
  663.         . . . . . . . . . . . . . . . .
  664.         . . . . . . . . . . . . . . . .
  665.         . . . . . . . . . . . . . . . .
  666.         . . . f f f f f f f f f f . . .
  667.         . . f e e e e e e e e e e f . .
  668.         . f e e e e e e e e e e e e f .
  669.         . f d d d d d d d d d e e d f .
  670.         . f d d f d d d d f d d e d f .
  671.         . f d d f d d d d f d d d e f .
  672.         . f d d f d d d d f d d d f . .
  673.         . f d d d d d d d d d d d f . .
  674.         . f a c c c c c c c c a b f . .
  675.         . f d c c c c c c c c c d d f .
  676.         f d d f f f b b f f f f d d f .
  677.         . f f a a a a a a a a a b f . .
  678.         . . . f f f f . f f f f f . . .
  679.         """))
  680.     mainCrouchRight = animation.create_animation(ActionKind.Walking, 100)
  681.     animation.attach_animation(hero, mainCrouchRight)
  682.     mainCrouchRight.add_animation_frame(img("""
  683.         . . . . . . . . . . . . . . . .
  684.         . . . . . . . . . . . . . . . .
  685.         . . . . . . . . . . . . . . . .
  686.         . . . f f f f f f f f f f . . .
  687.         . . f e e e e e e e e e e f . .
  688.         . f e e e e e e e e e e e e f .
  689.         . f d e e d d d d d d d d d f .
  690.         . f d e d d f d d d d f d d f .
  691.         . f e d d d f d d d d f d d f .
  692.         . . f d d d f d d d d f d d f .
  693.         . . f d d d d d d d d d d d f .
  694.         . . f b a c c c c c c c c a f .
  695.         . f d d c c c c c c c c c d f .
  696.         . f d d f f f f b b f f f d d f
  697.         . . f b a a a a a a a a a f f .
  698.         . . . f f f f f . f f f f . . .
  699.         """))
  700. def clearGame():
  701.     for value in sprites.all_of_kind(SpriteKind.Bumper):
  702.         value.destroy()
  703.     for value2 in sprites.all_of_kind(SpriteKind.Coin):
  704.         value2.destroy()
  705.     for value3 in sprites.all_of_kind(SpriteKind.Goal):
  706.         value3.destroy()
  707.     for value4 in sprites.all_of_kind(SpriteKind.Flier):
  708.         value4.destroy()
  709. def on_overlap_tile(sprite3, location):
  710.     global currentLevel
  711.     info.change_life_by(1)
  712.     currentLevel += 1
  713.     if hasNextLevel():
  714.         game.splash("Next level unlocked!")
  715.         setLevelTileMap(currentLevel)
  716.     else:
  717.         game.over(True, effects.confetti)
  718. scene.on_overlap_tile(SpriteKind.player,
  719.     assets.tile("""
  720.         tile1
  721.         """),
  722.     on_overlap_tile)
  723. def on_on_overlap3(sprite4, otherSprite3):
  724.     info.change_life_by(-1)
  725.     sprite4.say("Ow!", invincibilityPeriod * 1.5)
  726.     music.power_down.play()
  727.     pause(invincibilityPeriod * 1.5)
  728. sprites.on_overlap(SpriteKind.player, SpriteKind.Flier, on_on_overlap3)
  729. def createEnemies():
  730.     global bumper, flier
  731.     # enemy that moves back and forth
  732.     for value5 in tiles.get_tiles_by_type(assets.tile("""
  733.         tile4
  734.         """)):
  735.         bumper = sprites.create(img("""
  736.                 . . . . . . . . . . . . . . . .
  737.                 . . . . . . . . . . . . . . . .
  738.                 . . . . f f f f f f . . . . . .
  739.                 . . . f 7 2 7 7 7 2 f . . . . .
  740.                 . . f 7 7 7 2 7 2 7 7 f . . . .
  741.                 . . f 7 7 7 7 7 7 7 7 7 f . . .
  742.                 . f 7 7 7 2 7 7 7 2 7 7 f . . .
  743.                 . f 7 7 7 2 7 7 7 2 7 7 7 f . .
  744.                 . f 7 7 7 7 7 7 7 7 7 7 7 7 f .
  745.                 . f 7 7 7 7 2 2 2 7 7 7 7 7 f .
  746.                 . . f 7 7 2 2 7 2 2 7 7 7 7 f .
  747.                 . . f 7 7 2 7 7 7 2 2 7 7 7 f .
  748.                 . . . f 7 7 7 7 7 7 7 7 7 7 f .
  749.                 . . . . f f 7 7 7 7 7 7 7 f . .
  750.                 . . . . . . f f f f f f f . . .
  751.                 . . . . . . . . . . . . . . . .
  752.                 """),
  753.             SpriteKind.Bumper)
  754.         tiles.place_on_tile(bumper, value5)
  755.         tiles.set_tile_at(value5, assets.tile("""
  756.             tile0
  757.             """))
  758.         bumper.ay = gravity
  759.         if Math.percent_chance(50):
  760.             bumper.vx = Math.random_range(30, 60)
  761.         else:
  762.             bumper.vx = Math.random_range(-60, -30)
  763.     # enemy that flies at player
  764.     for value6 in tiles.get_tiles_by_type(assets.tile("""
  765.         tile7
  766.         """)):
  767.         flier = sprites.create(img("""
  768.                 . . . . . . . . . . . . . . . .
  769.                 . . . . . . . . . . . . . . . .
  770.                 . . . . . . . . . . . . . . . .
  771.                 . . . . . f f f f f f f . . . .
  772.                 . . . . f 4 4 4 4 4 4 4 f . . .
  773.                 . . . f 4 5 5 4 4 4 5 5 4 f . .
  774.                 . f . f 4 4 4 5 4 5 4 4 4 f . f
  775.                 . f f 4 4 4 4 4 4 4 4 4 4 4 f f
  776.                 . f 4 4 4 4 4 5 4 5 4 4 4 4 4 f
  777.                 . f 4 4 4 4 4 5 4 5 4 4 4 4 4 f
  778.                 . f f 4 4 4 4 4 4 4 4 4 4 4 f f
  779.                 . . . f 4 4 5 5 5 5 5 4 4 f . .
  780.                 . . . . f 4 5 4 4 4 5 4 f . . .
  781.                 . . . . . f f f f f f f . . . .
  782.                 . . . . . . . . . . . . . . . .
  783.                 . . . . . . . . . . . . . . . .
  784.                 """),
  785.             SpriteKind.Flier)
  786.         tiles.place_on_tile(flier, value6)
  787.         tiles.set_tile_at(value6, assets.tile("""
  788.             tile0
  789.             """))
  790.         animation.attach_animation(flier, flierFlying)
  791.         animation.attach_animation(flier, flierIdle)
  792. def showInstruction(text: str):
  793.     game.show_long_text(text, DialogLayout.BOTTOM)
  794.     music.ba_ding.play()
  795.     info.change_score_by(1)
  796. def initializeHeroAnimations():
  797.     animateRun()
  798.     animateIdle()
  799.     animateCrouch()
  800.     animateJumps()
  801. def createPlayer(player2: Sprite):
  802.     player2.ay = gravity
  803.     scene.camera_follow_sprite(player2)
  804.     controller.move_sprite(player2, 100, 0)
  805.     player2.z = 5
  806.     info.set_life(3)
  807.     info.set_score(0)
  808. def initializeLevel(level2: number):
  809.     global playerStartLocation
  810.     effects.clouds.start_screen_effect()
  811.     playerStartLocation = tiles.get_tiles_by_type(assets.tile("""
  812.         tile6
  813.         """))[0]
  814.     tiles.place_on_tile(hero, playerStartLocation)
  815.     tiles.set_tile_at(playerStartLocation, assets.tile("""
  816.         tile0
  817.         """))
  818.     createEnemies()
  819.     spawnGoals()
  820. def hasNextLevel():
  821.     return currentLevel != levelCount
  822. def spawnGoals():
  823.     global coin
  824.     for value7 in tiles.get_tiles_by_type(assets.tile("""
  825.         tile5
  826.         """)):
  827.         coin = sprites.create(img("""
  828.                 . . . . . . . . . . . . . . . .
  829.                 . . . . . . . . . . . . . . . .
  830.                 . . . . . . . . . . . . . . . .
  831.                 . . . . . . f f f f . . . . . .
  832.                 . . . . f f 5 5 5 5 f f . . . .
  833.                 . . . . f 5 5 5 5 5 5 f . . . .
  834.                 . . . f 5 5 5 4 4 5 5 5 f . . .
  835.                 . . . f 5 5 5 4 4 5 5 5 f . . .
  836.                 . . . f 5 5 5 4 4 5 5 5 f . . .
  837.                 . . . f 5 5 5 4 4 5 5 5 f . . .
  838.                 . . . . f 5 5 5 5 5 5 f . . . .
  839.                 . . . . f f 5 5 5 5 f f . . . .
  840.                 . . . . . . f f f f . . . . . .
  841.                 . . . . . . . . . . . . . . . .
  842.                 . . . . . . . . . . . . . . . .
  843.                 . . . . . . . . . . . . . . . .
  844.                 """),
  845.             SpriteKind.Coin)
  846.         tiles.place_on_tile(coin, value7)
  847.         animation.attach_animation(coin, coinAnimation)
  848.         animation.set_action(coin, ActionKind.Walking)
  849.         tiles.set_tile_at(value7, assets.tile("""
  850.             tile0
  851.             """))
  852. heroFacingLeft = False
  853. coin: Sprite = None
  854. playerStartLocation: tiles.Location = None
  855. flier: Sprite = None
  856. bumper: Sprite = None
  857. mainCrouchRight: animation.Animation = None
  858. mainCrouchLeft: animation.Animation = None
  859. mainJumpRight: animation.Animation = None
  860. mainJumpLeft: animation.Animation = None
  861. mainRunRight: animation.Animation = None
  862. mainRunLeft: animation.Animation = None
  863. flierIdle: animation.Animation = None
  864. flierFlying: animation.Animation = None
  865. mainIdleRight: animation.Animation = None
  866. mainIdleLeft: animation.Animation = None
  867. doubleJumpSpeed = 0
  868. canDoubleJump = False
  869. coinAnimation: animation.Animation = None
  870. currentLevel = 0
  871. levelCount = 0
  872. gravity = 0
  873. pixelsToMeters = 0
  874. invincibilityPeriod = 0
  875. hero: Sprite = None
  876. hero = sprites.create(img("""
  877.         . . . . . . . . . . . . . . . .
  878.         . . . f f f f f f f f f f . . .
  879.         . . f e e e e e e e e e e f . .
  880.         . f e e e e e e e e e e e e f .
  881.         . f d e e d d d d d d d d d f .
  882.         . f d e d d f d d d d f d d f .
  883.         . f e d d d f d d d d f d d f .
  884.         . . f d d d f d d d d f d d f .
  885.         . . f d d d d d d d d d d d f .
  886.         . . f b a c c c c c c c c a f .
  887.         . . f d d d c c c c c c d d f .
  888.         . . f d d f f f b b f f f d f .
  889.         . . f b a a a a a a a a a f . .
  890.         . . . f b a a f f b a a f . . .
  891.         . . . f b a a f f b a a f . . .
  892.         . . . . f f f . . f f f . . . .
  893.         """),
  894.     SpriteKind.player)
  895. # how long to pause between each contact with a
  896. # single enemy
  897. invincibilityPeriod = 600
  898. pixelsToMeters = 30
  899. gravity = 9.81 * pixelsToMeters
  900. scene.set_background_image(img("""
  901.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  902.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  903.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  904.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  905.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  906.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  907.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  908.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  909.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  910.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  911.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  912.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  913.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  914.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  915.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  916.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  917.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  918.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  919.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  920.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  921.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  922.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  923.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  924.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  925.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  926.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  927.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  928.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  929.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  930.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  931.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  932.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  933.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  934.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  935.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  936.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  937.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  938.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  939.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  940.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  941.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  942.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  943.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  944.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  945.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  946.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  947.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  948.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  949.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  950.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  951.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  952.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  953.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  954.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  955.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  956.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  957.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  958.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  959.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  960.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  961.     8999999989999999899999998999999989999999899999998999999989999999899999998999999989999999899999998999999989999999899999998999999989999999899999998999999989999999
  962.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  963.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  964.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  965.     9999899999998999999989999999899999998999999989999999899999998999999989999999899999998999999989999999899999998999999989999999899999998999999989999999899999998999
  966.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  967.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  968.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  969.     8999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999
  970.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  971.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  972.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  973.     8999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999
  974.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  975.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  976.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  977.     8999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999
  978.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  979.     9989999999899999998999999989999999899999998999999989999999899999998999999989999999899999998999999989999999899999998999999989999999899999998999999989999999899999
  980.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  981.     8999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999
  982.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  983.     9989998999899989999999899999998999999989999999899999998999999989999999899999998999999989999999899999998999999989999999899999998999999989999999899999998999999989
  984.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  985.     8999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999
  986.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  987.     9989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989
  988.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  989.     8999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999
  990.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  991.     9989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989
  992.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  993.     8989899989898999898989998989899989898999898989998989899989898999898989998989899989898999898989998989899989898999898989998989899989898999898989998989899989898999
  994.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  995.     9989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989
  996.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  997.     8999898989998989899989898999898989998989899989898999898989998989899989898999898989998989899989898999898989998989899989898999898989998989899989898999898989998989
  998.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  999.     9989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989998999899989
  1000.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  1001.     8989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989
  1002.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  1003.     8989998989899989898999898989998989899989898999898989998989899989898999898989998989899989898999898989998989899989898999898989998999899989998999899989998999899989
  1004.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  1005.     8989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989
  1006.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  1007.     9989898999898989998989899989898999898989998989899989898999898989998989899989898999898989998989899989898999898989998989899989898999898989998989899989998999899989
  1008.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  1009.     8989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989
  1010.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  1011.     8989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989
  1012.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  1013.     8989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989
  1014.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  1015.     8989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989
  1016.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  1017.     8989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989
  1018.     9899999998999999989999999899999998999999989999999899999998999999989999999899999998999999989999999899999998999999989999999899999998999999999999999999999999999999
  1019.     8989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989
  1020.     9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
  1021.     """))
  1022. initializeAnimations()
  1023. createPlayer(hero)
  1024. levelCount = 8
  1025. currentLevel = 0
  1026. setLevelTileMap(currentLevel)
  1027. giveIntroduction()
  1028. # set up hero animations
  1029. def on_on_update():
  1030.     global heroFacingLeft
  1031.     if hero.vx < 0:
  1032.         heroFacingLeft = True
  1033.     elif hero.vx > 0:
  1034.         heroFacingLeft = False
  1035.     if hero.is_hitting_tile(CollisionDirection.TOP):
  1036.         hero.vy = 0
  1037.     if controller.down.is_pressed():
  1038.         if heroFacingLeft:
  1039.             animation.set_action(hero, ActionKind.Walking)
  1040.         else:
  1041.             animation.set_action(hero, ActionKind.Walking)
  1042.     elif hero.vy < 20 and not (hero.is_hitting_tile(CollisionDirection.BOTTOM)):
  1043.         if heroFacingLeft:
  1044.             animation.set_action(hero, ActionKind.Walking)
  1045.         else:
  1046.             animation.set_action(hero, ActionKind.Walking)
  1047.     elif hero.vx < 0:
  1048.         animation.set_action(hero, ActionKind.Walking)
  1049.     elif hero.vx > 0:
  1050.         animation.set_action(hero, ActionKind.Walking)
  1051.     else:
  1052.         if heroFacingLeft:
  1053.             animation.set_action(hero, ActionKind.Walking)
  1054.         else:
  1055.             animation.set_action(hero, ActionKind.Walking)
  1056. game.on_update(on_on_update)
  1057. # Flier movement
  1058. def on_on_update2():
  1059.     for value8 in sprites.all_of_kind(SpriteKind.Flier):
  1060.         if abs(value8.x - hero.x) < 60:
  1061.             if value8.x - hero.x < -5:
  1062.                 value8.vx = 25
  1063.             elif value8.x - hero.x > 5:
  1064.                 value8.vx = -25
  1065.             if value8.y - hero.y < -5:
  1066.                 value8.vy = 25
  1067.             elif value8.y - hero.y > 5:
  1068.                 value8.vy = -25
  1069.             animation.set_action(value8, ActionKind.Walking)
  1070.         else:
  1071.             value8.vy = -20
  1072.             value8.vx = 0
  1073.             animation.set_action(value8, ActionKind.Walking)
  1074. game.on_update(on_on_update2)
  1075. # Reset double jump when standing on wall
  1076. def on_on_update3():
  1077.     global canDoubleJump
  1078.     if hero.is_hitting_tile(CollisionDirection.BOTTOM):
  1079.         canDoubleJump = True
  1080. game.on_update(on_on_update3)
  1081. # bumper movement
  1082. def on_on_update4():
  1083.     for value9 in sprites.all_of_kind(SpriteKind.Bumper):
  1084.         if value9.is_hitting_tile(CollisionDirection.LEFT):
  1085.             value9.vx = Math.random_range(30, 60)
  1086.         elif value9.is_hitting_tile(CollisionDirection.RIGHT):
  1087.             value9.vx = Math.random_range(-60, -30)
  1088. game.on_update(on_on_update4)
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】基于 Kitronik 游戏机开发板之平台跳跃

这是一个基于ARCADE MakeCode的平台跳跃游戏代码。

游戏概述
这是一个经典的2D平台跳跃游戏,玩家控制一个角色在不同关卡中跳跃、收集金币、躲避敌人,最终到达终点。

代码结构分析
1. 枚举定义
python
  1. class ActionKind(Enum):
  2.     # 定义角色各种动作状态
  3.     RunningLeft = 0
  4.     RunningRight = 1
  5.     Idle = 2
  6.     # ... 其他动作状态
复制代码

定义了角色可能的所有动作状态,用于动画管理。

2. 精灵种类定义
python
  1. class SpriteKind:
  2.     Bumper = SpriteKind.create()  # 碰撞敌人
  3.     Goal = SpriteKind.create()    # 目标/终点
  4.     Coin = SpriteKind.create()    # 金币
  5.     Flier = SpriteKind.create()   # 飞行敌人
复制代码


3. 核心游戏机制

跳跃系统
python
  1. def attemptJump():
  2.     if hero.is_hitting_tile(CollisionDirection.BOTTOM):
  3.         hero.vy = -4 * pixelsToMeters  # 普通跳跃
  4.     elif canDoubleJump:
  5.         hero.vy = -3 * pixelsToMeters  # 二段跳
  6.         canDoubleJump = False
复制代码

支持二段跳机制,玩家可以在空中再次跳跃。

物理系统
python
  1. pixelsToMeters = 30
  2. gravity = 9.81 * pixelsToMeters  # 模拟真实重力
复制代码

使用真实物理计算,让跳跃感觉更自然。

4. 动画系统
游戏包含丰富的动画:
奔跑动画:左右方向的奔跑帧
跳跃动画:跳跃和下落状态
下蹲动画:下蹲状态
闲置动画:站立状态
金币动画:旋转的金币效果
飞行敌人动画:翅膀扇动效果

5. 敌人系统
两种敌人类型:
Bumper(碰撞敌人):在地面来回移动
Flier(飞行敌人):会追踪玩家位置

6. 关卡系统
python
  1. def setLevelTileMap(level: number):
  2.     if level == 0:
  3.         tiles.set_tilemap(tilemap("level"))
  4.     elif level == 1:
  5.         tiles.set_tilemap(tilemap("level_0"))
  6.     # ... 最多8个关卡
复制代码

支持多个关卡,玩家完成一关后进入下一关。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】基于 Kitronik 游戏机开发板之平台跳跃

图形编程参考实验程序

【花雕动手做】基于 Kitronik 游戏机开发板之平台跳跃图1

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

【花雕动手做】基于 Kitronik 游戏机开发板之平台跳跃图5

实验场景记录

【花雕动手做】基于 Kitronik 游戏机开发板之平台跳跃图3

【花雕动手做】基于 Kitronik 游戏机开发板之平台跳跃图4

【花雕动手做】基于 Kitronik 游戏机开发板之平台跳跃图2

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】基于 Kitronik 游戏机开发板之平台跳跃

【花雕动手做】基于 Kitronik 游戏机开发板之平台跳跃图1
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail