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

[项目] 【花雕动手做】基于Kitronik可编程开发板之穿越鸭子游戏

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

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

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

【花雕动手做】基于Kitronik可编程开发板之穿越鸭子游戏图3

【花雕动手做】基于Kitronik可编程开发板之穿越鸭子游戏图1

【花雕动手做】基于Kitronik可编程开发板之穿越鸭子游戏图2

驴友花雕  中级技神
 楼主|

发表于 2 小时前

【花雕动手做】基于Kitronik可编程开发板之穿越鸭子游戏

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

MicroPython实验代码

  1. class ActionKind(Enum):
  2.     Walking = 0
  3.     Idle = 1
  4.     Jumping = 2
  5. @namespace
  6. class SpriteKind:
  7.     Gap = SpriteKind.create()
  8. def on_on_overlap(sprite, otherSprite):
  9.     if otherSprite.right - sprite.left < 2:
  10.         info.change_score_by(1)
  11. sprites.on_overlap(SpriteKind.player, SpriteKind.Gap, on_on_overlap)
  12. def on_on_overlap2(sprite2, otherSprite2):
  13.     game.over(False)
  14. sprites.on_overlap(SpriteKind.player, SpriteKind.projectile, on_on_overlap2)
  15. def on_button_pressed():
  16.     mySprite.vy = -100
  17.     animation.set_action(mySprite, ActionKind.Walking)
  18.     mySprite.start_effect(effects.rings, 300)
  19. controller.any_button.on_event(ControllerButtonEvent.PRESSED, on_button_pressed)
  20. projectile: Sprite = None
  21. gapSprite: Sprite = None
  22. gapImage: Image = None
  23. bottomImage: Image = None
  24. topImage: Image = None
  25. gap = 0
  26. mySprite: Sprite = None
  27. scene.set_background_color(9)
  28. info.set_score(0)
  29. effects.blizzard.start_screen_effect()
  30. mySprite = sprites.create(img("""
  31.         . . . . . . . . . . b 5 b . . .
  32.         . . . . . . . . . b 5 b . . . .
  33.         . . . . . . . . . b c . . . . .
  34.         . . . . . . b b b b b b . . . .
  35.         . . . . . b b 5 5 5 5 5 b . . .
  36.         . . . . b b 5 d 1 f 5 5 d f . .
  37.         . . . . b 5 5 1 f f 5 d 4 c . .
  38.         . . . . b 5 5 d f b d d 4 4 . .
  39.         b d d d b b d 5 5 5 4 4 4 4 4 b
  40.         b b d 5 5 5 b 5 5 4 4 4 4 4 b .
  41.         b d c 5 5 5 5 d 5 5 5 5 5 b . .
  42.         c d d c d 5 5 b 5 5 5 5 5 5 b .
  43.         c b d d c c b 5 5 5 5 5 5 5 b .
  44.         . c d d d d d d 5 5 5 5 5 d b .
  45.         . . c b d d d d d 5 5 5 b b . .
  46.         . . . c c c c c c c c b b . . .
  47.         """),
  48.     SpriteKind.player)
  49. mySprite.ay = 300
  50. anim = animation.create_animation(ActionKind.Walking, 25)
  51. anim.add_animation_frame(img("""
  52.     . . . . . . . . . . . . . . . .
  53.     . . . . . . . . . . . . . . . .
  54.     . . . . . . . . . b 5 5 b . . .
  55.     . . . . . . b b b b b b . . . .
  56.     . . . . . b b 5 5 5 5 5 b . . .
  57.     . b b b b b 5 5 5 5 5 5 5 b . .
  58.     . b d 5 b 5 5 5 5 5 5 5 5 b . .
  59.     . . b 5 5 b 5 d 1 f 5 d 4 f . .
  60.     . . b d 5 5 b 1 f f 5 4 4 c . .
  61.     b b d b 5 5 5 d f b 4 4 4 4 b .
  62.     b d d c d 5 5 b 5 4 4 4 4 4 4 b
  63.     c d d d c c b 5 5 5 5 5 5 5 b .
  64.     c b d d d d d 5 5 5 5 5 5 5 b .
  65.     . c d d d d d d 5 5 5 5 5 d b .
  66.     . . c b d d d d d 5 5 5 b b . .
  67.     . . . c c c c c c c c b b . . .
  68.     """))
  69. anim.add_animation_frame(img("""
  70.     . . . . . . . . . . . . . . . .
  71.     . . . . . . . . . . b 5 b . . .
  72.     . . . . . . . . . b 5 b . . . .
  73.     . . . . . . b b b b b b . . . .
  74.     . . . . . b b 5 5 5 5 5 b . . .
  75.     . b b b b b 5 5 5 5 5 5 5 b . .
  76.     . b d 5 b 5 5 5 5 5 5 5 5 b . .
  77.     . . b 5 5 b 5 d 1 f 5 d 4 f . .
  78.     . . b d 5 5 b 1 f f 5 4 4 c . .
  79.     b b d b 5 5 5 d f b 4 4 4 4 4 b
  80.     b d d c d 5 5 b 5 4 4 4 4 4 b .
  81.     c d d d c c b 5 5 5 5 5 5 5 b .
  82.     c b d d d d d 5 5 5 5 5 5 5 b .
  83.     . c d d d d d d 5 5 5 5 5 d b .
  84.     . . c b d d d d d 5 5 5 b b . .
  85.     . . . c c c c c c c c b b . . .
  86.     """))
  87. anim.add_animation_frame(img("""
  88.     . . . . . . . . . . b 5 b . . .
  89.     . . . . . . . . . b 5 b . . . .
  90.     . . . . . . . . . b c . . . . .
  91.     . . . . . . b b b b b b . . . .
  92.     . . . . . b b 5 5 5 5 5 b . . .
  93.     . . . . b b 5 d 1 f 5 5 d f . .
  94.     . . . . b 5 5 1 f f 5 d 4 c . .
  95.     . . . . b 5 5 d f b d d 4 4 . .
  96.     b d d d b b d 5 5 5 4 4 4 4 4 b
  97.     b b d 5 5 5 b 5 5 4 4 4 4 4 b .
  98.     b d c 5 5 5 5 d 5 5 5 5 5 b . .
  99.     c d d c d 5 5 b 5 5 5 5 5 5 b .
  100.     c b d d c c b 5 5 5 5 5 5 5 b .
  101.     . c d d d d d d 5 5 5 5 5 d b .
  102.     . . c b d d d d d 5 5 5 b b . .
  103.     . . . c c c c c c c c b b . . .
  104.     """))
  105. anim.add_animation_frame(img("""
  106.     . . . . . . . . . . b 5 b . . .
  107.     . . . . . . . . . b 5 b . . . .
  108.     . . . . . . b b b b b b . . . .
  109.     . . . . . b b 5 5 5 5 5 b . . .
  110.     . . . . b b 5 d 1 f 5 d 4 c . .
  111.     . . . . b 5 5 1 f f d d 4 4 4 b
  112.     . . . . b 5 5 d f b 4 4 4 4 b .
  113.     . . . b d 5 5 5 5 4 4 4 4 b . .
  114.     . . b d d 5 5 5 5 5 5 5 5 b . .
  115.     . b d d d d 5 5 5 5 5 5 5 5 b .
  116.     b d d d b b b 5 5 5 5 5 5 5 b .
  117.     c d d b 5 5 d c 5 5 5 5 5 5 b .
  118.     c b b d 5 d c d 5 5 5 5 5 5 b .
  119.     . b 5 5 b c d d 5 5 5 5 5 d b .
  120.     b b c c c d d d d 5 5 5 b b . .
  121.     . . . c c c c c c c c b b . . .
  122.     """))
  123. anim.add_animation_frame(img("""
  124.     . . . . . . . . . . b 5 b . . .
  125.     . . . . . . . . . b 5 b . . . .
  126.     . . . . . . b b b b b b . . . .
  127.     . . . . . b b 5 5 5 5 5 b . . .
  128.     . . . . b b 5 d 1 f 5 d 4 c . .
  129.     . . . . b 5 5 1 f f d d 4 4 4 b
  130.     . . . . b 5 5 d f b 4 4 4 4 b .
  131.     . . . b d 5 5 5 5 4 4 4 4 b . .
  132.     . b b d d d 5 5 5 5 5 5 5 b . .
  133.     b d d d b b b 5 5 5 5 5 5 5 b .
  134.     c d d b 5 5 d c 5 5 5 5 5 5 b .
  135.     c b b d 5 d c d 5 5 5 5 5 5 b .
  136.     c b 5 5 b c d d 5 5 5 5 5 5 b .
  137.     b b c c c d d d 5 5 5 5 5 d b .
  138.     . . . . c c d d d 5 5 5 b b . .
  139.     . . . . . . c c c c c b b . . .
  140.     """))
  141. anim.add_animation_frame(img("""
  142.     . . . . . . . . . . b 5 b . . .
  143.     . . . . . . . . . b 5 b . . . .
  144.     . . . . . . b b b b b b . . . .
  145.     . . . . . b b 5 5 5 5 5 b . . .
  146.     . . . . b b 5 d 1 f 5 5 d f . .
  147.     . . . . b 5 5 1 f f 5 d 4 c . .
  148.     . . . . b 5 5 d f b d d 4 4 . .
  149.     . b b b d 5 5 5 5 5 4 4 4 4 4 b
  150.     b d d d b b d 5 5 4 4 4 4 4 b .
  151.     b b d 5 5 5 b 5 5 5 5 5 5 b . .
  152.     c d c 5 5 5 5 d 5 5 5 5 5 5 b .
  153.     c b d c d 5 5 b 5 5 5 5 5 5 b .
  154.     . c d d c c b d 5 5 5 5 5 d b .
  155.     . . c b d d d d d 5 5 5 b b . .
  156.     . . . c c c c c c c c b b . . .
  157.     . . . . . . . . . . . . . . . .
  158.     """))
  159. animation.attach_animation(mySprite, anim)
  160. def on_on_update():
  161.     if mySprite.vy > 0:
  162.         animation.set_action(mySprite, ActionKind.Walking)
  163.     if mySprite.bottom > 120 or mySprite.top < 0:
  164.         game.over(False)
  165. game.on_update(on_on_update)
  166. def on_update_interval():
  167.     global gap, topImage, bottomImage, gapImage, gapSprite, projectile
  168.     gap = randint(0, 3)
  169.     if gap == 0:
  170.         topImage = img("""
  171.             .....6eeeeeeeeeece6.....
  172.             ....6776eeeeeeeee676....
  173.             ...6776666eeee6766776...
  174.             ..6776ee77777777667776..
  175.             ...668ce7768867788666...
  176.             ......ce77eeee67ee......
  177.             ......eeeeeeeeeeee......
  178.             ......eeeeeeeeeeee......
  179.             ......eeeeeeeeeeee......
  180.             ......eeeeeeeeeeee......
  181.             ......eeeeeeeeeeee......
  182.             ......eeeeeeeeeeee......
  183.             ......eeeeeeeeeeee......
  184.             ......beeeeeeeeeeb......
  185.             .......beeeeeeeeb.......
  186.             ........beeeeeeb........
  187.             """)
  188.         bottomImage = img("""
  189.             ........................
  190.             ........................
  191.             ..........bbbb..........
  192.             ........bbddddbb........
  193.             .......bddbbbbddb.......
  194.             ......bdbbddddbbdb......
  195.             .....bdbbdbbbbdbbdb.....
  196.             .....bdbdbddddbdbdb.....
  197.             .....cdbbdbbbbdbbdc.....
  198.             .....cbdbbddddbbdbc.....
  199.             .....efbddbbbbddbce.....
  200.             .....eeffbddddbccee.....
  201.             .....eeeeffcccceee......
  202.             .....ceeeeeeeeeeee......
  203.             .....ceeeeeeeeeeee......
  204.             .....feeeeeeeeeeee......
  205.             .....cceeeeeeeeeee......
  206.             ......feeeeeeeeeee......
  207.             .....6fceeeeeeeeee6.....
  208.             ....6776eeeeeeeee676....
  209.             ...6777666eeee6666776...
  210.             ..67768e67766777667776..
  211.             ...668ee7768867788666...
  212.             ......ee77eeee77ecee....
  213.             ......ee6eeeeee6eef.....
  214.             ......eeeeeeeeeeeef.....
  215.             ......eeeeeeeeeeeef.....
  216.             ......eeeeeeeeeeecf.....
  217.             ......ceeeeeeeeeecf.....
  218.             ......ceeeeeeeeeeff.....
  219.             ......feeeeeeeeeefe.....
  220.             .....6feeeeeeeeeef6.....
  221.             ....6776eeeeeeeee676....
  222.             ...6777666eeee6667776...
  223.             ..6776ee67777777667776..
  224.             ...668ee7768867788666...
  225.             ......ee77eeee67ee......
  226.             ......ee6eeeeee6ce......
  227.             ......eefeeeeeeece......
  228.             ......eeceeeeeeece......
  229.             ......eeceeeeeeefe......
  230.             ......eeceeeeeeefe......
  231.             ......eeeeeeeeeefe......
  232.             ......eeeeeeeeeece......
  233.             .....6eeeeeeeeeece6.....
  234.             ....6776eeeeeeeee676....
  235.             ...6776666eeee6766776...
  236.             ..6776ee77777777667776..
  237.             ...668ce7768867788666...
  238.             ......ce77eeee67ee......
  239.             ......ce6eeeeee6ee......
  240.             ......ceeeeeeeeeee......
  241.             ......fcceeeeeecee......
  242.             ......fccceeececce......
  243.             ......fcceeecceccc......
  244.             ......fccceecceccc......
  245.             ......fccccceceecc......
  246.             .....6fccccccccccf6.....
  247.             ....6776ccccccccc676....
  248.             ...6776676cccc6766776...
  249.             ..6776cc77777777667776..
  250.             ...668cc7768867788666...
  251.             ......cc77cccc67cf......
  252.             ......cc6cccccc6cf......
  253.             """)
  254.     elif gap == 1:
  255.         topImage = img("""
  256.             .....6feeeeeeeeeef6.....
  257.             ....6776eeeeeeeee676....
  258.             ...6777666eeee6667776...
  259.             ..6776ee67777777667776..
  260.             ...668ee7768867788666...
  261.             ......ee77eeee67ee......
  262.             ......ee6eeeeee6ce......
  263.             ......eefeeeeeeece......
  264.             ......eeceeeeeeece......
  265.             ......eeceeeeeeefe......
  266.             ......eeceeeeeeefe......
  267.             ......eeeeeeeeeefe......
  268.             ......eeeeeeeeeece......
  269.             .....6eeeeeeeeeece6.....
  270.             ....6776eeeeeeeee676....
  271.             ...6776666eeee6766776...
  272.             ..6776ee77777777667776..
  273.             ...668ce7768867788666...
  274.             ......ce77eeee67ee......
  275.             ......eeeeeeeeeeee......
  276.             ......eeeeeeeeeeee......
  277.             ......eeeeeeeeeeee......
  278.             ......eeeeeeeeeeee......
  279.             ......eeeeeeeeeeee......
  280.             ......eeeeeeeeeeee......
  281.             ......eeeeeeeeeeee......
  282.             ......beeeeeeeeeeb......
  283.             .......beeeeeeeeb.......
  284.             ........beeeeeeb........
  285.             ........................
  286.             ........................
  287.             ........................
  288.             """)
  289.         bottomImage = img("""
  290.             ........................
  291.             ........................
  292.             ........................
  293.             ........................
  294.             ........................
  295.             ........................
  296.             ........................
  297.             ..........bbbb..........
  298.             ........bbddddbb........
  299.             .......bddbbbbddb.......
  300.             ......bdbbddddbbdb......
  301.             .....bdbbdbbbbdbbdb.....
  302.             .....bdbdbddddbdbdb.....
  303.             .....cdbbdbbbbdbbdc.....
  304.             .....cbdbbddddbbdbc.....
  305.             .....efbddbbbbddbce.....
  306.             .....eeffbddddbccee.....
  307.             .....eeeeffcccceee......
  308.             .....ceeeeeeeeeeee......
  309.             .....ceeeeeeeeeeee......
  310.             .....feeeeeeeeeeee......
  311.             .....cceeeeeeeeeee......
  312.             ......feeeeeeeeeee......
  313.             .....6fceeeeeeeeee6.....
  314.             ....6776eeeeeeeee676....
  315.             ...6777666eeee6666776...
  316.             ..67768e67766777667776..
  317.             ...668ee7768867788666...
  318.             ......ee77eeee77ecee....
  319.             ......ee6eeeeee6eef.....
  320.             ......eeeeeeeeeeeef.....
  321.             ......eeeeeeeeeeeef.....
  322.             ......eeeeeeeeeeecf.....
  323.             ......ceeeeeeeeeecf.....
  324.             ......ceeeeeeeeeeff.....
  325.             ......feeeeeeeeeefe.....
  326.             .....6feeeeeeeeeef6.....
  327.             ....6776eeeeeeeee676....
  328.             ...6777666eeee6667776...
  329.             ..6776ee67777777667776..
  330.             ...668ee7768867788666...
  331.             ......ee77eeee67ee......
  332.             ......ee6eeeeee6ce......
  333.             ......eefeeeeeeece......
  334.             ......eeceeeeeeece......
  335.             ......eeceeeeeeefe......
  336.             ......eeceeeeeeefe......
  337.             ......eeeeeeeeeefe......
  338.             ......eeeeeeeeeece......
  339.             .....6eeeeeeeeeece6.....
  340.             ....6776eeeeeeeee676....
  341.             ...6776666eeee6766776...
  342.             ..6776ee77777777667776..
  343.             ...668ce7768867788666...
  344.             ......ce77eeee67ee......
  345.             ......ce6eeeeee6ee......
  346.             """)
  347.     elif gap == 2:
  348.         topImage = img("""
  349.             .....6feeeeeeeeeef6.....
  350.             ....6776eeeeeeeee676....
  351.             ...6777666eeee6667776...
  352.             ..6776ee67777777667776..
  353.             ...668ee7768867788666...
  354.             ......ee77eeee67eeee....
  355.             ......ee6eeeeee6cef.....
  356.             ......eeeeeeeeeeeef.....
  357.             ......eeeeeeeeeeeef.....
  358.             ......eeeeeeeeeeecf.....
  359.             ......eeeeeeeeeeecf.....
  360.             ......eeeeeeeeeeeff.....
  361.             ......feeeeeeeeeefe.....
  362.             .....6feeeeeeeeeef6.....
  363.             ....6776eeeeeeeee676....
  364.             ...6777666eeee6667776...
  365.             ..6776ee67777777667776..
  366.             ...668ee7768867788666...
  367.             ......ee77eeee67ee......
  368.             ......ee6eeeeee6ce......
  369.             ......eefeeeeeeece......
  370.             ......eeceeeeeeece......
  371.             ......eeceeeeeeefe......
  372.             ......eeceeeeeeefe......
  373.             ......eeeeeeeeeefe......
  374.             ......eeeeeeeeeece......
  375.             .....6eeeeeeeeeece6.....
  376.             ....6776eeeeeeeee676....
  377.             ...6776666eeee6766776...
  378.             ..6776ee77777777667776..
  379.             ...668ce7768867788666...
  380.             ......ce77eeee67ee......
  381.             ......eeeeeeeeeeee......
  382.             ......eeeeeeeeeeee......
  383.             ......eeeeeeeeeeee......
  384.             ......eeeeeeeeeeee......
  385.             ......eeeeeeeeeeee......
  386.             ......eeeeeeeeeeee......
  387.             ......eeeeeeeeeeee......
  388.             ......beeeeeeeeeeb......
  389.             .......beeeeeeeeb.......
  390.             ........beeeeeeb........
  391.             ........................
  392.             ........................
  393.             ........................
  394.             ........................
  395.             ........................
  396.             ........................
  397.             """)
  398.         bottomImage = img("""
  399.             ........................
  400.             ........................
  401.             ........................
  402.             ........................
  403.             ..........bbbb..........
  404.             ........bbddddbb........
  405.             .......bddbbbbddb.......
  406.             ......bdbbddddbbdb......
  407.             .....bdbbdbbbbdbbdb.....
  408.             .....bdbdbddddbdbdb.....
  409.             .....cdbbdbbbbdbbdc.....
  410.             .....cbdbbddddbbdbc.....
  411.             .....efbddbbbbddbce.....
  412.             .....eeffbddddbccee.....
  413.             .....eeeeffcccceee......
  414.             .....ceeeeeeeeeeee......
  415.             .....ceeeeeeeeeeee......
  416.             .....feeeeeeeeeeee......
  417.             .....cceeeeeeeeeee......
  418.             ......feeeeeeeeeee......
  419.             .....6fceeeeeeeeee6.....
  420.             ....6776eeeeeeeee676....
  421.             ...6777666eeee6666776...
  422.             ..67768e67766777667776..
  423.             ...668ee7768867788666...
  424.             ......ee77eeee77ecee....
  425.             ......ee6eeeeee6eef.....
  426.             ......eeeeeeeeeeeef.....
  427.             ......eeeeeeeeeeeef.....
  428.             ......eeeeeeeeeeecf.....
  429.             ......ceeeeeeeeeecf.....
  430.             ......ceeeeeeeeeeff.....
  431.             ......feeeeeeeeeefe.....
  432.             .....6feeeeeeeeeef6.....
  433.             ....6776eeeeeeeee676....
  434.             ...6777666eeee6667776...
  435.             ..6776ee67777777667776..
  436.             ...668ee7768867788666...
  437.             ......ee77eeee67ee......
  438.             ......ee6eeeeee6ce......
  439.             """)
  440.     else:
  441.         topImage = img("""
  442.             .....6fceeeeeeeeee6.....
  443.             ....6776eeeeeeeee676....
  444.             ...6777666eeee6666776...
  445.             ..67768e67766777667776..
  446.             ...668ee7768867788666...
  447.             ......ee77eeee77ecee....
  448.             ......ee6eeeeee6eef.....
  449.             ......eeeeeeeeeeeef.....
  450.             ......eeeeeeeeeeeef.....
  451.             ......eeeeeeeeeeecf.....
  452.             ......ceeeeeeeeeecf.....
  453.             ......ceeeeeeeeeeff.....
  454.             ......feeeeeeeeeefe.....
  455.             .....6feeeeeeeeeef6.....
  456.             ....6776eeeeeeeee676....
  457.             ...6777666eeee6667776...
  458.             ..6776ee67777777667776..
  459.             ...668ee7768867788666...
  460.             ......ee77eeee67eeee....
  461.             ......ee6eeeeee6cef.....
  462.             ......eeeeeeeeeeeef.....
  463.             ......eeeeeeeeeeeef.....
  464.             ......eeeeeeeeeeecf.....
  465.             ......eeeeeeeeeeecf.....
  466.             ......eeeeeeeeeeeff.....
  467.             ......feeeeeeeeeefe.....
  468.             .....6feeeeeeeeeef6.....
  469.             ....6776eeeeeeeee676....
  470.             ...6777666eeee6667776...
  471.             ..6776ee67777777667776..
  472.             ...668ee7768867788666...
  473.             ......ee77eeee67ee......
  474.             ......ee6eeeeee6ce......
  475.             ......eefeeeeeeece......
  476.             ......eeceeeeeeece......
  477.             ......eeceeeeeeefe......
  478.             ......eeceeeeeeefe......
  479.             ......eeeeeeeeeefe......
  480.             ......eeeeeeeeeece......
  481.             .....6eeeeeeeeeece6.....
  482.             ....6776eeeeeeeee676....
  483.             ...6776666eeee6766776...
  484.             ..6776ee77777777667776..
  485.             ...668ce7768867788666...
  486.             ......ce77eeee67ee......
  487.             ......eeeeeeeeeeee......
  488.             ......eeeeeeeeeeee......
  489.             ......eeeeeeeeeeee......
  490.             ......eeeeeeeeeeee......
  491.             ......eeeeeeeeeeee......
  492.             ......eeeeeeeeeeee......
  493.             ......eeeeeeeeeeee......
  494.             ......beeeeeeeeeeb......
  495.             .......beeeeeeeeb.......
  496.             ........beeeeeeb........
  497.             ........................
  498.             """)
  499.         bottomImage = img("""
  500.             ........................
  501.             ..........bbbb..........
  502.             ........bbddddbb........
  503.             .......bddbbbbddb.......
  504.             ......bdbbddddbbdb......
  505.             .....bdbbdbbbbdbbdb.....
  506.             .....bdbdbddddbdbdb.....
  507.             .....cdbbdbbbbdbbdc.....
  508.             .....cbdbbddddbbdbc.....
  509.             .....efbddbbbbddbce.....
  510.             .....eeffbddddbccee.....
  511.             .....eeeeffcccceee......
  512.             .....ceeeeeeeeeeee......
  513.             .....ceeeeeeeeeeee......
  514.             .....feeeeeeeeeeee......
  515.             .....cceeeeeeeeeee......
  516.             ......feeeeeeeeeee......
  517.             .....6fceeeeeeeeee6.....
  518.             ....6776eeeeeeeee676....
  519.             ...6777666eeee6666776...
  520.             ..67768e67766777667776..
  521.             ...668ee7768867788666...
  522.             ......ee77eeee77ecee....
  523.             ......ee6eeeeee6eef.....
  524.             """)
  525.     gapImage = image.create(2, scene.screen_height())
  526.     gapImage.fill(1)
  527.     gapSprite = sprites.create(gapImage, SpriteKind.Gap)
  528.     gapSprite.set_flag(SpriteFlag.AUTO_DESTROY, True)
  529.     gapSprite.set_flag(SpriteFlag.INVISIBLE, True)
  530.     gapSprite.left = scene.screen_width()
  531.     gapSprite.vx = -45
  532.     projectile = sprites.create_projectile_from_side(topImage, -45, 0)
  533.     projectile.top = 0
  534.     projectile = sprites.create_projectile_from_side(bottomImage, -45, 0)
  535.     projectile.bottom = scene.screen_height()
  536. game.on_update_interval(1500, on_update_interval)
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2 小时前

【花雕动手做】基于Kitronik可编程开发板之穿越鸭子游戏

ARCADE MakeCode 之穿越鸭子游戏代码解读
这是一个类似Flappy Bird的躲避游戏,玩家控制一只鸭子穿越障碍物。
代码结构分析

1. 动作枚举定义
python
  1. class ActionKind(Enum):
  2.     Walking = 0
  3.     Idle = 1
  4.     Jumping = 2
复制代码

定义了三种动画状态:行走、空闲和跳跃。

2. 自定义精灵类型
python
  1. @namespace
  2. class SpriteKind:
  3.     Gap = SpriteKind.create()
复制代码

创建了一个新的精灵类型"Gap",用于表示障碍物之间的空隙。

3. 碰撞检测事件
python
  1. def on_on_overlap(sprite, otherSprite):
  2.     if otherSprite.right - sprite.left < 2:
  3.         info.change_score_by(1)
  4. sprites.on_overlap(SpriteKind.player, SpriteKind.Gap, on_on_overlap)
复制代码

当玩家精灵穿过空隙时增加分数。

python
  1. def on_on_overlap2(sprite2, otherSprite2):
  2.     game.over(False)
  3. sprites.on_overlap(SpriteKind.player, SpriteKind.projectile, on_on_overlap2)
复制代码

当玩家碰到障碍物时游戏结束。

4. 按钮控制事件
python
  1. def on_button_pressed():
  2.     mySprite.vy = -100  # 给鸭子一个向上的速度
  3.     animation.set_action(mySprite, ActionKind.Walking)  # 设置行走动画
  4.     mySprite.start_effect(effects.rings, 300)  # 添加环形特效
  5. controller.any_button.on_event(ControllerButtonEvent.PRESSED, on_button_pressed)
复制代码

任何按钮按下时,让鸭子跳跃并播放动画效果。

5. 游戏初始化
python
  1. # 变量声明
  2. projectile: Sprite = None
  3. gapSprite: Sprite = None
  4. gapImage: Image = None
  5. bottomImage: Image = None
  6. topImage: Image = None
  7. gap = 0
  8. mySprite: Sprite = None
  9. # 设置背景和初始分数
  10. scene.set_background_color(9)
  11. info.set_score(0)
  12. effects.blizzard.start_screen_effect()  # 添加暴风雪屏幕特效
  13. # 创建玩家精灵(鸭子)
  14. mySprite = sprites.create(img("""
  15.     . . . . . . . . . . b 5 b . . .
  16.     . . . . . . . . . b 5 b . . . .
  17.     . . . . . . . . . b c . . . . .
  18.     . . . . . . b b b b b b . . . .
  19.     . . . . . b b 5 5 5 5 5 b . . .
  20.     . . . . b b 5 d 1 f 5 5 d f . .
  21.     . . . . b 5 5 1 f f 5 d 4 c . .
  22.     . . . . b 5 5 d f b d d 4 4 . .
  23.     b d d d b b d 5 5 5 4 4 4 4 4 b
  24.     b b d 5 5 5 b 5 5 4 4 4 4 4 b .
  25.     b d c 5 5 5 5 d 5 5 5 5 5 b . .
  26.     c d d c d 5 5 b 5 5 5 5 5 5 b .
  27.     c b d d c c b 5 5 5 5 5 5 5 b .
  28.     . c d d d d d d 5 5 5 5 5 d b .
  29.     . . c b d d d d d 5 5 5 b b . .
  30.     . . . c c c c c c c c b b . . .
  31.     """), SpriteKind.player)
  32. mySprite.ay = 300  # 设置重力加速度
复制代码

6. 鸭子动画设置
python
  1. # 创建行走动画
  2. anim = animation.create_animation(ActionKind.Walking, 25)
  3. # 添加6个动画帧
  4. anim.add_animation_frame(img("""..."""))
  5. anim.add_animation_frame(img("""..."""))
  6. anim.add_animation_frame(img("""..."""))
  7. anim.add_animation_frame(img("""..."""))
  8. anim.add_animation_frame(img("""..."""))
  9. anim.add_animation_frame(img("""..."""))
  10. # 将动画附加到精灵
  11. animation.attach_animation(mySprite, anim)
复制代码

7. 游戏更新事件
python
  1. def on_on_update():
  2.     if mySprite.vy > 0:  # 如果鸭子正在下落
  3.         animation.set_action(mySprite, ActionKind.Walking)  # 设置行走动画
  4.    
  5.     if mySprite.bottom > 120 or mySprite.top < 0:  # 如果鸭子飞出屏幕
  6.         game.over(False)  # 游戏结束
  7. game.on_update(on_on_update)
复制代码

8. 障碍物生成逻辑
python
  1. def on_update_interval():
  2.     global gap, topImage, bottomImage, gapImage, gapSprite, projectile
  3.    
  4.     gap = randint(0, 3)  # 随机选择4种障碍物配置之一
  5.    
  6.     # 根据gap值选择不同的上下障碍物图像
  7.     if gap == 0:
  8.         topImage = img("""...""")
  9.         bottomImage = img("""...""")
  10.     elif gap == 1:
  11.         topImage = img("""...""")
  12.         bottomImage = img("""...""")
  13.     elif gap == 2:
  14.         topImage = img("""...""")
  15.         bottomImage = img("""...""")
  16.     else:
  17.         topImage = img("""...""")
  18.         bottomImage = img("""...""")
  19.    
  20.     # 创建空隙精灵(用于检测通过)
  21.     gapImage = image.create(2, scene.screen_height())
  22.     gapImage.fill(1)
  23.     gapSprite = sprites.create(gapImage, SpriteKind.Gap)
  24.     gapSprite.set_flag(SpriteFlag.AUTO_DESTROY, True)
  25.     gapSprite.set_flag(SpriteFlag.INVISIBLE, True)  # 不可见
  26.     gapSprite.left = scene.screen_width()  # 从右侧进入
  27.     gapSprite.vx = -45  # 向左移动速度
  28.    
  29.     # 创建顶部障碍物
  30.     projectile = sprites.create_projectile_from_side(topImage, -45, 0)
  31.     projectile.top = 0
  32.    
  33.     # 创建底部障碍物
  34.     projectile = sprites.create_projectile_from_side(bottomImage, -45, 0)
  35.     projectile.bottom = scene.screen_height()
  36. # 每1500毫秒生成一组新障碍物
  37. game.on_update_interval(1500, on_update_interval)
复制代码

游戏机制解析
控制方式:玩家按下任何按钮使鸭子跳跃
得分机制:当鸭子成功穿过障碍物之间的空隙时得分
失败条件:
鸭子碰到障碍物
鸭子飞出屏幕上下边界
障碍物生成:每隔1.5秒随机生成一组上下障碍物,中间留有可通过的空隙
视觉效果:鸭子有动画效果,跳跃时有环形特效,屏幕有暴风雪效果
这个游戏通过简单的机制创造了有趣的挑战,玩家需要掌握好跳跃时机来穿越不断出现的障碍物。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2 小时前

【花雕动手做】基于Kitronik可编程开发板之穿越鸭子游戏

图形编程参考实验程序

【花雕动手做】基于Kitronik可编程开发板之穿越鸭子游戏图1

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

【花雕动手做】基于Kitronik可编程开发板之穿越鸭子游戏图5

实验场景记录

【花雕动手做】基于Kitronik可编程开发板之穿越鸭子游戏图2

【花雕动手做】基于Kitronik可编程开发板之穿越鸭子游戏图3

【花雕动手做】基于Kitronik可编程开发板之穿越鸭子游戏图4

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 1 小时前

【花雕动手做】基于Kitronik开发板

【花雕动手做】基于Kitronik可编程开发板之穿越鸭子游戏图1
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail