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

[项目] 【花雕动手做】基于Kitronik可编程开发板之穿越热气球

[复制链接]
【花雕动手做】基于Kitronik可编程开发板之穿越热气球图1

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

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

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


【花雕动手做】基于Kitronik可编程开发板之穿越热气球图2

驴友花雕  中级技神
 楼主|

发表于 1 小时前

【花雕动手做】基于Kitronik可编程开发板之穿越热气球

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

MicroPython实验代码


  1. @namespace
  2. class SpriteKind:
  3.     Background = SpriteKind.create()
  4.     Mountain = SpriteKind.create()
  5. def spawnSomething(roll: number):
  6.     if roll <= 2:
  7.         createSaucer()
  8.     elif roll <= 6:
  9.         createTree()
  10.     elif roll <= 24:
  11.         createCloud()
  12.     elif roll <= 40:
  13.         createBird()
  14. def createSaucer():
  15.     global saucerSpeed, saucer
  16.     if Math.percent_chance(50):
  17.         saucerSpeed = 40
  18.     else:
  19.         saucerSpeed = -40
  20.     saucer = sprites.create_projectile_from_side(img("""
  21.             .........fff.........
  22.             .......ff888ff.......
  23.             ......f8888998f......
  24.             .....f888888998f.....
  25.             ....f888a8a88998f....
  26.             ...ff88888888898ff...
  27.             ..fdddddddddddddddf..
  28.             .fbbbbbbbbbbbbbbbbbf.
  29.             fa9b9bb9bb9bb9bb9b9af
  30.             .facccccccccccccccaf.
  31.             ..faacccccccccccaaf..
  32.             ...ffaacccccccaaff...
  33.             .....fffffffffff.....
  34.             .....f999999999f.....
  35.             ......fffffffff......
  36.             """),
  37.         saucerSpeed,
  38.         0)
  39.     animation.run_image_animation(saucer, flyingSaucer, 400, True)
  40.     saucer.y = randint(10, scene.screen_height() - 10)
  41. def createAnimationArrays():
  42.     global flyingSaucer, birdGoingLeft, birdGoingRight
  43.     flyingSaucer = [img("""
  44.             .........fff.........
  45.             .......ff888ff.......
  46.             ......f8888998f......
  47.             .....f888888998f.....
  48.             ....f888a8a88998f....
  49.             ...ff88888888898ff...
  50.             ..fdddddddddddddddf..
  51.             .fbbbbbbbbbbbbbbbbbf.
  52.             fa9b9bb9bb9bb9bb9b9af
  53.             .facccccccccccccccaf.
  54.             ..faacccccccccccaaf..
  55.             ...ffaacccccccaaff...
  56.             .....fffffffffff.....
  57.             .....f999999999f.....
  58.             ......fffffffff......
  59.             """),
  60.         img("""
  61.             .........fff.........
  62.             .......ff888ff.......
  63.             ......f8888998f......
  64.             .....f888888998f.....
  65.             ....f888a8a88998f....
  66.             ...ff88888888898ff...
  67.             ..fdddddddddddddddf..
  68.             .fbbbbbbbbbbbbbbbbbf.
  69.             fab4b44b44b44b44b4baf
  70.             .facccccccccccccccaf.
  71.             ..faacccccccccccaaf..
  72.             ...ffaacccccccaaff...
  73.             .....fffffffffff.....
  74.             .....f999999999f.....
  75.             ......fffffffff......
  76.             """)]
  77.     birdGoingLeft = [img("""
  78.             . . . . . . . . . . . . . . . .
  79.             . . . . . . . . . . . . . . . .
  80.             . . . . . . . . . . . . . . . .
  81.             . . . f f f f . . . . . . . . .
  82.             . . f 8 8 8 8 f f f f . f f f .
  83.             . f 8 f 8 8 8 8 8 8 8 f 8 8 8 f
  84.             f 4 5 8 8 8 8 8 8 8 8 8 f f 8 f
  85.             f 5 5 5 8 8 f 8 8 8 8 8 8 8 f .
  86.             . f f f 8 8 8 f 8 8 8 8 8 8 f .
  87.             . . . . f f f f f 8 8 8 f f . .
  88.             . . . . . . . . f f f f . . . .
  89.             . . . . . . . . . . . . . . . .
  90.             . . . . . . . . . . . . . . . .
  91.             . . . . . . . . . . . . . . . .
  92.             . . . . . . . . . . . . . . . .
  93.             . . . . . . . . . . . . . . . .
  94.             """),
  95.         img("""
  96.             . . . . . . . . . . . . . . . . .
  97.             . . . . . . . . . . . . . . . . .
  98.             . . . f f f f . . . . . . . . . .
  99.             . . f 8 8 8 8 f f f f . f f f . .
  100.             . f 8 f 8 8 8 8 8 f 8 f 8 8 8 f .
  101.             f 4 5 8 8 8 8 8 8 8 f 8 8 8 8 f .
  102.             f 5 5 5 8 8 f 8 8 8 8 f 8 8 f . .
  103.             . f f f 8 8 8 f 8 8 8 8 f 8 f . .
  104.             . . . . f f a f f 8 8 8 8 f f . .
  105.             . . . . . . . . f 8 8 8 f . . . .
  106.             . . . . . . . . . f 8 8 f . . . .
  107.             . . . . . . . . . . f f . . . . .
  108.             """),
  109.         img("""
  110.             . . . . . . . . . . . . . . . .
  111.             . . . . . . . . . . . . . . . .
  112.             . . . f f f f . . . . . . . . .
  113.             . . f 8 8 8 8 f f f f . f f f .
  114.             . f 8 f 8 8 8 8 8 8 8 f 8 8 8 f
  115.             f 4 5 8 8 8 8 8 8 8 8 8 f f 8 f
  116.             f 5 5 5 8 8 f 8 8 8 8 8 8 8 f .
  117.             . f f f 8 8 8 f 8 8 8 8 8 8 f .
  118.             . . . . f f f f f 8 8 8 f f . .
  119.             . . . . . . . . f f f f . . . .
  120.             . . . . . . . . . . . . . . . .
  121.             . . . . . . . . . . . . . . . .
  122.             """),
  123.         img("""
  124.             . . . . . . . . . . . f f . . .
  125.             . . . . . . . . . . f 8 8 f . .
  126.             . . . f f f f . f f 8 8 8 f . .
  127.             . . f 8 8 8 8 f f 8 8 8 f f f .
  128.             . f 8 f 8 8 8 8 8 8 8 f 8 8 8 f
  129.             f 4 5 8 8 8 8 8 8 8 f 8 f f 8 f
  130.             f 5 5 5 8 8 8 8 8 f 8 8 8 8 f .
  131.             . f f f 8 8 8 8 8 8 8 8 8 8 f .
  132.             . . . . f f f f f 8 8 8 f f . .
  133.             . . . . . . . . f f f f . . . .
  134.             . . . . . . . . . . . . . . . .
  135.             . . . . . . . . . . . . . . . .
  136.             """)]
  137.     birdGoingRight = [img("""
  138.             . . . . . . . . . . . . . . . .
  139.             . . . . . . . . . . . . . . . .
  140.             . . . . . . . . . . . . . . . .
  141.             . . . . . . . . . f f f f . . .
  142.             . f f f . f f f f 8 8 8 8 f . .
  143.             f 8 8 8 f 8 8 8 8 8 8 8 f 8 f .
  144.             f 8 f f 8 8 8 8 8 8 8 8 8 5 4 f
  145.             . f 8 8 8 8 8 8 8 f 8 8 5 5 5 f
  146.             . f 8 8 8 8 8 8 f 8 8 8 f f f .
  147.             . . f f 8 8 8 f f f f f . . . .
  148.             . . . . f f f f . . . . . . . .
  149.             . . . . . . . . . . . . . . . .
  150.             . . . . . . . . . . . . . . . .
  151.             . . . . . . . . . . . . . . . .
  152.             . . . . . . . . . . . . . . . .
  153.             . . . . . . . . . . . . . . . .
  154.             """),
  155.         img("""
  156.             . . . . . . . . . . . . . . . .
  157.             . . . . . . . . . . . . . . . .
  158.             . . . . . . . . . f f f f . . .
  159.             . f f f . f f f f 8 8 8 8 f . .
  160.             f 8 8 8 f 8 f 8 8 8 8 8 f 8 f .
  161.             f 8 8 8 8 f 8 8 8 8 8 8 8 5 4 f
  162.             . f 8 8 f 8 8 8 8 f 8 8 5 5 5 f
  163.             . f 8 f 8 8 8 8 f 8 8 8 f f f .
  164.             . . f f 8 8 8 8 f f f f . . . .
  165.             . . . f 8 8 8 f . . . . . . . .
  166.             . . . f 8 8 f . . . . . . . . .
  167.             . . . . f f . . . . . . . . . .
  168.             """),
  169.         img("""
  170.             . . . . . . . . . . . . . . . .
  171.             . . . . . . . . . . . . . . . .
  172.             . . . . . . . . . f f f f . . .
  173.             . f f f . f f f f 8 8 8 8 f . .
  174.             f 8 8 8 f 8 8 8 8 8 8 8 f 8 f .
  175.             f 8 f f 8 8 8 8 8 8 8 8 8 5 4 f
  176.             . f 8 8 8 8 8 8 8 f 8 8 5 5 5 f
  177.             . f 8 8 8 8 8 8 f 8 8 8 f f f .
  178.             . . f f 8 8 8 f f f f f . . . .
  179.             . . . . f f f f . . . . . . . .
  180.             . . . . . . . . . . . . . . . .
  181.             . . . . . . . . . . . . . . . .
  182.             """),
  183.         img("""
  184.             . . . f f . . . . . . . . . . .
  185.             . . f 8 8 f . . . . . . . . . .
  186.             . . f 8 8 8 f f . f f f f . . .
  187.             . f f f 8 8 8 f f 8 8 8 8 f . .
  188.             f 8 8 8 f 8 8 8 8 8 8 8 f 8 f .
  189.             f 8 f f 8 f 8 8 8 8 8 8 8 5 4 f
  190.             . f 8 8 8 8 f 8 8 8 8 8 5 5 5 f
  191.             . f 8 8 8 8 8 8 8 8 8 8 f f f .
  192.             . . f f 8 8 8 f f f f f . . . .
  193.             . . . . f f f f . . . . . . . .
  194.             . . . . . . . . . . . . . . . .
  195.             . . . . . . . . . . . . . . . .
  196.             """)]
  197. def createBird():
  198.     global saucerSpeed, chosenAnimation, bird
  199.     if Math.percent_chance(50):
  200.         saucerSpeed = 20
  201.         chosenAnimation = birdGoingRight
  202.     else:
  203.         saucerSpeed = -20
  204.         chosenAnimation = birdGoingLeft
  205.     bird = sprites.create_projectile_from_side(img("""
  206.             . . . . . . . . . . . . . . . .
  207.             . . . . . . . . . . . . . . . .
  208.             . . . . . . . . . . . . . . . .
  209.             . . . f f f f . . . . . . . . .
  210.             . . f 8 8 8 8 f f f f . f f f .
  211.             . f 8 f 8 8 8 8 8 8 8 f 8 8 8 f
  212.             f 4 5 8 8 8 8 8 8 8 8 8 f f 8 f
  213.             f 5 5 5 8 8 f 8 8 8 8 8 8 8 f .
  214.             . f f f 8 8 8 f 8 8 8 8 8 8 f .
  215.             . . . . f f f f f 8 8 8 f f . .
  216.             . . . . . . . . f f f f . . . .
  217.             . . . . . . . . . . . . . . . .
  218.             . . . . . . . . . . . . . . . .
  219.             . . . . . . . . . . . . . . . .
  220.             . . . . . . . . . . . . . . . .
  221.             . . . . . . . . . . . . . . . .
  222.             """),
  223.         saucerSpeed,
  224.         0)
  225.     animation.run_image_animation(bird, chosenAnimation, 100, True)
  226.     bird.y = randint(12, scene.screen_height() - 10)
  227. def createCloud():
  228.     global cloudImages, cloud
  229.     cloudImages = [img("""
  230.             ..................1111...............
  231.             ................11111111.............
  232.             ...............1111111111............
  233.             ..............11111111111....11111...
  234.             ..............111111111111.11111111..
  235.             .............11111111111111111111111.
  236.             ........11111111111111111111111111111
  237.             .......111111111111111111111111111111
  238.             1111111111111111111111111111111111111
  239.             .111111111111111111111111111111111111
  240.             .......111111111111111111111111111111
  241.             .......................1111111111111.
  242.             """),
  243.         img("""
  244.             . . . 1 1 1 1 . . . 1 1 . . . . . . . .
  245.             . . 1 1 1 1 1 1 . 1 1 1 1 . . . . . . .
  246.             . 1 1 1 1 1 1 1 1 1 1 1 1 1 . . . . . .
  247.             . 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 . . .
  248.             1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
  249.             1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
  250.             1 1 1 1 1 1 1 1 1 1 1 1 1 . . . . . . .
  251.             """),
  252.         img("""
  253.             ............111111...........
  254.             ..........111111111..........
  255.             .........11111111111.........
  256.             ........1111111111111........
  257.             ........1111111111111........
  258.             ........11111111111111.......
  259.             ....111111111111111111111111.
  260.             ...11111111111111111111111111
  261.             ..111111111111111111111111111
  262.             ..111111111111111111111111111
  263.             11111111111111111111111111111
  264.             .11111111111111111111.1.1111.
  265.             1........11111111111.....11..
  266.             11111111111111...............
  267.             """)]
  268.     cloud = sprites.create_projectile_from_side(cloudImages[randint(0, len(cloudImages) - 1)], -5, 0)
  269.     cloud.z = -10
  270.     cloud.set_flag(SpriteFlag.GHOST, True)
  271.     cloud.y = randint(0, scene.screen_height() * 0.6)
  272. def on_on_overlap(sprite, otherSprite):
  273.     info.change_life_by(-1)
  274.     otherSprite.set_flag(SpriteFlag.GHOST, True)
  275.     sprite.say("ow!", 500)
  276. sprites.on_overlap(SpriteKind.player, SpriteKind.projectile, on_on_overlap)
  277. def placeMountain(leftPosition: number):
  278.     global lastCreatedMountain
  279.     lastCreatedMountain = sprites.create(mountains[randint(0, 1)], SpriteKind.Mountain)
  280.     lastCreatedMountain.set_flag(SpriteFlag.GHOST, True)
  281.     lastCreatedMountain.set_flag(SpriteFlag.AUTO_DESTROY, True)
  282.     lastCreatedMountain.bottom = scene.screen_height()
  283.     lastCreatedMountain.left = leftPosition
  284.     lastCreatedMountain.z = -15
  285. def on_button_released():
  286.     balloon.ay = 50
  287.     effects.clear_particles(balloon)
  288.     balloon.set_image(balloonDeflated)
  289. controller.any_button.on_event(ControllerButtonEvent.RELEASED, on_button_released)
  290. def on_button_pressed():
  291.     balloon.start_effect(effects.fire)
  292.     balloon.start_effect(effects.fire)
  293.     balloon.ay = -50
  294.     balloon.set_image(balloonInflated)
  295. controller.any_button.on_event(ControllerButtonEvent.PRESSED, on_button_pressed)
  296. def createTree():
  297.     global tree
  298.     tree = sprites.create_projectile_from_side(img("""
  299.             . . . . . . . c c . . . . . . .
  300.             . . . . c c c 6 5 c 6 6 . . . .
  301.             . . . . c 6 c 5 5 c 7 6 . . . .
  302.             . . . 6 c c 7 5 5 7 c 6 6 . . .
  303.             . . c c 7 7 7 7 7 5 7 7 c 6 . .
  304.             . 6 6 6 c 6 7 7 7 7 6 c c 6 6 .
  305.             c 7 7 7 6 c 7 c 6 7 6 7 7 7 7 6
  306.             c c c 6 6 6 c 6 6 6 6 7 7 6 6 6
  307.             . c c 7 6 6 6 6 6 7 7 7 7 c 6 .
  308.             . c 7 7 6 6 7 6 6 7 7 6 7 7 c .
  309.             . c c c c 7 7 6 f 7 7 c c c c .
  310.             . . . . c 7 c f f c 7 c . . . .
  311.             . . . . . 6 f e e e c . . . . .
  312.             . . . . . e e e d e e . . . . .
  313.             """),
  314.         -10,
  315.         0)
  316.     tree.z = -5
  317.     tree.bottom = scene.screen_height()
  318.     tree.set_flag(SpriteFlag.GHOST, True)
  319. nearGroundCount = 0
  320. tree: Sprite = None
  321. cloud: Sprite = None
  322. cloudImages: List[Image] = []
  323. bird: Sprite = None
  324. chosenAnimation: List[Image] = []
  325. birdGoingRight: List[Image] = []
  326. birdGoingLeft: List[Image] = []
  327. flyingSaucer: List[Image] = []
  328. saucer: Sprite = None
  329. saucerSpeed = 0
  330. lastCreatedMountain: Sprite = None
  331. mountains: List[Image] = []
  332. balloon: Sprite = None
  333. balloonInflated: Image = None
  334. balloonDeflated: Image = None
  335. balloonDeflated = img("""
  336.     ...................
  337.     ...................
  338.     .......fffff.......
  339.     .....ff22222ff.....
  340.     ....f222222442f....
  341.     ...f22222222442f...
  342.     ..f2222222222442f..
  343.     .f222322223222422f.
  344.     .f222322223222222f.
  345.     .f222322223222222f.
  346.     .f222232222322222f.
  347.     .f222222222222222f.
  348.     ..f2222322232222f..
  349.     ..f2222233322222f..
  350.     ...ff222222222ff...
  351.     ....ffff222ffff....
  352.     .....f.fffff.f.....
  353.     .....f.......f.....
  354.     .....f.......f.....
  355.     ......f.....f......
  356.     ......f.....f......
  357.     .......f...f.......
  358.     .......f.2.f.......
  359.     ......fffffff......
  360.     .....fcccccccf.....
  361.     .....fcbbbbbcf.....
  362.     .....fcabbbacf.....
  363.     .....fcbaaabcf.....
  364.     .....fcbbbbbcf.....
  365.     .....fcabbbacf.....
  366.     .....fccaaaccf.....
  367.     ......fcccccf......
  368.     .......fffff.......
  369.     """)
  370. balloonInflated = img("""
  371.     ...................
  372.     ......fffffff......
  373.     ....ff2222222ff....
  374.     ...f22222222442f...
  375.     ..f2222222222442f..
  376.     .f222222222222442f.
  377.     f22232222223222422f
  378.     f22232222223222222f
  379.     f22232222223222222f
  380.     f22223222222322222f
  381.     f22222222222222222f
  382.     f22222222222222222f
  383.     .f222232222232222f.
  384.     .f222223333322222f.
  385.     ..ff22222222222ff..
  386.     ....ffff222ffff....
  387.     .....f.fffff.f.....
  388.     .....f.......f.....
  389.     .....f.......f.....
  390.     ......f.....f......
  391.     ......f.....f......
  392.     .......f...f.......
  393.     .......f.2.f.......
  394.     ......fffffff......
  395.     .....fcccccccf.....
  396.     .....fcbbbbbcf.....
  397.     .....fcabbbacf.....
  398.     .....fcbaaabcf.....
  399.     .....fcbbbbbcf.....
  400.     .....fcabbbacf.....
  401.     .....fccaaaccf.....
  402.     ......fcccccf......
  403.     .......fffff.......
  404.     """)
  405. music.set_volume(0)
  406. balloon = sprites.create(balloonDeflated, SpriteKind.player)
  407. scene.set_background_color(9)
  408. balloon.ay = 35
  409. balloon.set_stay_in_screen(True)
  410. balloon.z = 100
  411. info.set_score(0)
  412. info.set_life(3)
  413. createAnimationArrays()
  414. mountains = [img("""
  415.         ......................333333........................3333........................
  416.         ...................333333333333...................3333333333....................
  417.         ................333333333333333333..............3333333333333333................
  418.         .............33333333333333333333333.........333333333333333333333333...........
  419.         ..........333333333333333333333333333......333333333333333333333333333333.......
  420.         ........3333333333333333333333333333333..33333333333333333333333333bb33333333...
  421.         ......333333333bb3333333333333333b33333b3333333333333333333333333bbbb333333333..
  422.         ....333333333333b33333333333333333b333bb3333333333333333333333bbbbbbbb333333333.
  423.         ..3333333333333bbb33b3333333333b33bbbbbbbb3b33333333333333b3bbbbbbbbbb3333333333
  424.         3333333333333333bb33b3333333333bbbbbbbbbbbbb33333333333333bbbbbbbbbbbbb3333b3333
  425.         3333333333333b33bbbbbb33b3b3bbbbbbbbbbbbbbbbb333333333b33bbbbbbbbbbbbbbbb33b3333
  426.         333333333333bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb3b333333bbbbbbbbbbbcbbbbbbbbbb3bb3
  427.         333333b33bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb333bbbbbbbbbcbbbcccbbbbbbbbb3b33
  428.         333b33bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcbbcbbcccccbccbbbbbbbbbb33
  429.         333bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccbccbbbbbbbbbb
  430.         33bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccbccbbbbbbcb
  431.         cbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccbccccccccccccbcccccccccccccbcbbcc
  432.         cccbcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcbbcccbccccccccccccccccccbcccccccccccccbccccc
  433.         cccccbbcbbbbbbbbbbbbbbbbbbbbbbbbbcbcccccccccccccccccccccccccccccccccccccccbbcccc
  434.         ccccccccbcbcbbbbbbbbbbbbbbbbbbcbcccccccccccccccccccccccccccccccccccccccccccccccc
  435.         ccccccccccccbbcbbbbcbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccc
  436.         ccccccccccccccccbcbcbbbbbbcbcccccccccccccccccccccccccccccccccccccccccccccccccccc
  437.         ccccbcccccccccccccccccbcbbcccccccccbcccccccccccccccccccccccccccccccccccccccccccc
  438.         ccccccbcccccccccccccccccccccccccccbccccccccccccccccccccccccccccccccccccccccccccc
  439.         ccccbcccbcccbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  440.         ccccccccccbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  441.         cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  442.         cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  443.         cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  444.         cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  445.         cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  446.         cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  447.         """),
  448.     img("""
  449.         ....................3...........................................................
  450.         ....................3...........................................................
  451.         ...................333..........................................................
  452.         ...................3333.........................................................
  453.         ..................333333........................................................
  454.         ..................33333333......................................................
  455.         .................33333333333....................................................
  456.         ................33333333333333..................................................
  457.         ...............3333333333333333.......................3.........................
  458.         ..............333333333333333333...................33333........................
  459.         .............33333333333333333333...............333333333333....................
  460.         ...........33333333333333333333333............3333333333333333..................
  461.         ..........3333333333333333333333333..........3333333333333333333................
  462.         ........3333333333333333333333333333.......3333333333333333333b333..............
  463.         .....33333333333333333333333333333333...333333333333333333333bbb3333..........3.
  464.         .33333333333333333333333333333333333333333333333333333333333bbbbb33333......3333
  465.         33333333333333333333333333333333333333333333333333333333333333b33333333333333333
  466.         333333333333333333333333333333333b333333333333333333333333333bb33333333333333333
  467.         333333333333333333333333333333b3bbb3b3333333333333333333333bbbbb333333333b333333
  468.         333333333333b33333333333333333bbbbbbb3333333333333333333bbbbbbbbb33333333bb33333
  469.         333333333b33b33b33b333333b33bbbbbbbbbb333333333333bbbbbbbbbbbbbbb33333333bbb3333
  470.         33333333bbbbbbbbbbbb3b333bbbbbbbbbbbbbb33333333bbbbbbbbbbbbbbbbbbb333333bbbb33b3
  471.         3333b3bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb3333bbbbbbbbbbbbbbbbbbbbbbb3b3bbbbbbbbb
  472.         c333bbbbbbbbbbbbbbbbbbbbbbbbbbbcbcbbbbbbbbb3bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc
  473.         cccbbbbbbbbbbbbbbbbbbbbbbbbbcbbccccbbbbbbbbbbbbbbbbbbbbcbbbbbbbbbbbbbbbbbbbcbbcc
  474.         ccccbbbbbbbbbbbbbbbbbbbbbbbccccccbccbcbcbbbbbbbbbbbcbbccbbbbbbbbbbbbbbbbbbbcbccc
  475.         ccccccbcbbbbbbbbbbbbbbbbbccccccccccccccccbbbbbbbcbbcccccccbcbbbbbbbbbbbbbcbccccc
  476.         ccccccccbcbbbbbccbbbbbbcccccccccccccccccccccbcbcccccccccccccbbcbbbbbbbbbbccccccc
  477.         cbccccccccbbcbccccbbcbcccccccccccccccccccccccccccccccccccccccccbbbbbcccccccccbcc
  478.         cccccccccccccbbccbbbcccccbcbcccccccccccccccccccccccccccbccccbccccccccccccccccccc
  479.         ccccccccccccccccccccccccccbcbcccccccccccccccccccccccbccccccccccccccccccccccccccc
  480.         ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccbccccc
  481.         cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  482.         ccccccccccccccccccccccccccccccccccccccccccccccbccccccccccccccccccccccccccccccccc
  483.         ccccccbcbcbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccbccccccccc
  484.         ccccccccbcbccccccccccccccccccccccccccccccccccccccccccccccbcccccccccccccccccccccc
  485.         ccccccccccbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  486.         cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  487.         cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
  488.         """)]
  489. sun = sprites.create(img("""
  490.         ......................................................................444444444444444...........................................................................
  491.         ..............................................................444444444444444444444444444444444.................................................................
  492.         ........................................................44444444444444444444555555444444444444444444444.........................................................
  493.         .....................................................444444444444444444444555555555544444444444444444444444444444...............................................
  494.         ..................................................44444444444444444444445555555555555544444444444444444444444444444.............................................
  495.         ...............................................44444444444444444444444455555555555555554444444444444444444444444444444444444....................................
  496.         .......................................4444444444444444444444444444444455555555555555554444444444444444444444444444444444444444444444444........................
  497.         .................................444444444444444444444444444444444444455555555555555555544444444444444444444444444444444444444444444444444444444................
  498.         .........................44444444444444444444444444444444444444444444455555555555555555544444444444444444444444444444444444444444444444444444444444444444.......
  499.         44444.......444444444444444444444444444444444444444444444444444444444555555555555555555554444444444444444444444444444444444444444444444444444444444444444444....
  500.         444444444444444444444444444444444444444444444444444444444444444444444555555555555555555554444444444444444444444444444444444444444444444444444444444444444444444.
  501.         4444444444444444444444444444444444444444444444444444444444444444444445555555555555555555544444444444444444444444444444444444444444444444444444444444444444444444
  502.         4444444444444444444444444444444444444444444444444444444444444444444445555555555555555555544444444444444444444444444444444444444444444444444444444444444444444444
  503.         4444444444444444444444444444444444444444444444444444444444444444444445555555555555555555544444444444444444444444444444444444444444444444444444444444444444444444
  504.         4444444444444444444444444444444444444444444444444444444444444444444444555555555555555555444444444444444444444444444444444444444444444444444444444444444444444444
  505.         4444444444444444444444444444444444444444444444444444444444444444444444555555555555555555444444444444444444444444444444444444444444444444444444444444444444444444
  506.         4444444444444444444444444444444444444444444444444444444444444444444444455555555555555554444444444444444444444444444444444444444444444444444444444444444444444444
  507.         4444444444444444444444444444444444444444444444444444444444444444444444455555555555555554444444444444444444444444444444444444444444444444444444444444444444444444
  508.         4444444444444444444444444444444444444444444444444444444444444444444444445555555555555544444444444444444444444444444444444444444444444444444444444444444444444444
  509.         4444444444444444444444444444444444444444444444444444444444444444444444444455555555554444444444444444444444444444444444444444444444444444444444444444444444444444
  510.         4444444444444444444444444444444444444444444444444444444444444444444444444444555555444444444444444444444444444444444444444444444444444444444444444444444444444444
  511.         4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
  512.         4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
  513.         4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
  514.         4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
  515.         4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
  516.         4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
  517.         4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
  518.         4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
  519.         4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
  520.         4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
  521.         4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
  522.         4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
  523.         4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
  524.         4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
  525.         4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
  526.         4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
  527.         """),
  528.     SpriteKind.Background)
  529. sun.bottom = scene.screen_height()
  530. sun.set_flag(SpriteFlag.GHOST, True)
  531. sun.z = -20
  532. placeMountain(0)
  533. placeMountain(lastCreatedMountain.right)
  534. game.set_dialog_frame(img("""
  535.     ...cc......................cc....
  536.     ..c55c..bbbb...bbbbb......c55c...
  537.     .cb55bcbdddbbbbbdddbbbbbbcb55bc..
  538.     b555555bbdddb111bdddb11db555555b.
  539.     bb5555bbdbdb11111bdb1111bb5555bb.
  540.     cb5555bcddd11111ddd11111cb5555bc.
  541.     .c5bb5c1111d111d111d111ddc5bb5c..
  542.     .cbbbbc111111111111111111cbbbbc..
  543.     ..b11111111111111111111111d111bb.
  544.     ..b111111111111111111111111d1bdb.
  545.     ..bb11111111111111111111111dbddb.
  546.     .bbdb1d11111111111111111111ddddb.
  547.     .bdddd11111111111111111111d1bdbb.
  548.     .bddbd11111111111111111111111bb..
  549.     .bdb1d111111111111111111111111b..
  550.     .bb111d11111111111111111111111b..
  551.     ..b11111111111111111111111d111bb.
  552.     ..b111111111111111111111111d1bdb.
  553.     ..bb11111111111111111111111dbddb.
  554.     .bbdb1d11111111111111111111ddddb.
  555.     .bdddd11111111111111111111d1bdbb.
  556.     .bddbd11111111111111111111111bb..
  557.     .bdbb1111111111111111111111111b..
  558.     .bbbd1111111111111111111111111b..
  559.     ..bcc111111111111111111111dccdb..
  560.     ..c55c111d111d111d111d1111c55cb..
  561.     .cb55bcdd11111ddd11111dddcb55bc..
  562.     b555555b11111bdb11111bdbb555555b.
  563.     bb5555bbb111bdddb111bdddbb5555bb.
  564.     cb5555bcdbbbbbdddbbbbbddcb5555bc.
  565.     .c5bb5c.bb...bbbbb...bbbbc5bb5c..
  566.     .cbbbbc..................cbbbbc..
  567.     .................................
  568.     """))
  569. game.show_long_text("Stay in the air as long as you can! Hold any   button to turn on the burner.",
  570.     DialogLayout.CENTER)
  571. for index in range(2):
  572.     spawnSomething(randint(0, 40))
  573. def on_on_update():
  574.     info.change_score_by(1)
  575. game.on_update(on_on_update)
  576. def on_on_update2():
  577.     balloon.vy = Math.constrain(balloon.vy, -25, 25)
  578. game.on_update(on_on_update2)
  579. def on_update_interval():
  580.     spawnSomething(randint(0, 100))
  581. game.on_update_interval(750, on_update_interval)
  582. def on_forever():
  583.     global nearGroundCount
  584.     nearGroundCount = -1
  585.     while balloon.bottom >= scene.screen_height() - 1:
  586.         balloon.say("pull up!", 100)
  587.         nearGroundCount += 1
  588.         if nearGroundCount > 25:
  589.             info.change_life_by(-1)
  590.             nearGroundCount = -20
  591.         pause(25)
  592. forever(on_forever)
  593. def on_update_interval2():
  594.     # changing position explicitly to avoid fractions of
  595.     # movement / clipping
  596.     for value in sprites.all_of_kind(SpriteKind.Mountain):
  597.         value.x += -1
  598.     if lastCreatedMountain.right < scene.screen_width():
  599.         placeMountain(lastCreatedMountain.right)
  600. game.on_update_interval(200, on_update_interval2)
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 1 小时前

【花雕动手做】基于Kitronik可编程开发板之穿越热气球

MakeCode 热气球穿越游戏代码解读
这是一个热气球飞行游戏,玩家需要控制热气球避开障碍物并尽可能长时间地保持在空中。

游戏概述
玩家控制一个热气球,通过按住任何按钮来启动燃烧器使气球上升,松开按钮则气球会下降。目标是避开飞碟、鸟类等障碍物,同时避免触地,尽可能获得高分。

代码结构分析

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

创建了背景(Background)和山脉(Mountain)精灵类型

2. 障碍物生成系统
随机生成机制
python
  1. def spawnSomething(roll: number):
复制代码

根据随机数决定生成哪种障碍物:
1-2:飞碟 (2%概率)
3-6:树木 (4%概率)
7-24:云朵 (18%概率)
25-40:鸟类 (16%概率)
其他:不生成任何东西

飞碟(UFO)
python
  1. def createSaucer():
复制代码

随机选择向左或向右飞行
使用动画让飞碟看起来在旋转
随机出现在屏幕高度范围内

鸟类
python
  1. def createBird():
复制代码

随机选择飞行方向
使用不同的动画序列表示左右飞行
随机出现在屏幕中上部

云朵
python
  1. def createCloud():
复制代码

缓慢向左移动
设置为幽灵模式(不会发生碰撞)
随机出现在屏幕上部分

树木
python
  1. def createTree():
复制代码

从右侧生成并向左移动
放置在地面高度
设置为幽灵模式

3. 动画系统
python
  1. def createAnimationArrays():
复制代码

创建飞碟的旋转动画(2帧)
创建鸟类左右飞行的动画(各4帧)
创建多种云朵图像变体

4. 热气球控制系统
上升机制
python
  1. def on_button_pressed():
  2.     balloon.start_effect(effects.fire)  # 火焰特效
  3.     balloon.ay = -50  # 负加速度使气球上升
  4.     balloon.set_image(balloonInflated)  # 切换到充气状态
复制代码

按住任何按钮时启动燃烧器
产生火焰粒子效果
给气球负向加速度使其上升
切换到充气状态图像

下降机制
python
  1. def on_button_released():
  2.     balloon.ay = 50  # 正加速度使气球下降
  3.     effects.clear_particles(balloon)  # 清除火焰效果
  4.     balloon.set_image(balloonDeflated)  # 切换到放气状态
复制代码

松开按钮时停止燃烧器
给气球正向加速度使其下降
清除火焰粒子效果
切换到放气状态图像

5. 碰撞检测
python
  1. def on_on_overlap(sprite, otherSprite):
  2.     info.change_life_by(-1)  # 减少生命值
  3.     otherSprite.set_flag(SpriteFlag.GHOST, True)  # 设置障碍物为幽灵模式
  4.     sprite.say("ow!", 500)  # 显示受伤提示
复制代码

热气球与障碍物碰撞时减少生命值
碰撞后障碍物变为幽灵模式(避免重复碰撞)
显示"ow!"提示

6. 游戏环境设置
山脉系统
python
  1. def placeMountain(leftPosition: number):
复制代码

创建随机选择的山脉图像
放置在地面位置
设置为幽灵模式和自动销毁

太阳背景
创建大型太阳图像作为背景元素
放置在地平线位置
设置为幽灵模式

7. 游戏机制
分数系统
python
  1. def on_on_update():
  2.     info.change_score_by(1)  # 每帧增加1分
复制代码

游戏运行时间越长分数越高

高度限制
python
  1. def on_on_update2():
  2.     balloon.vy = Math.constrain(balloon.vy, -25, 25)  # 限制垂直速度
复制代码

限制热气球的最大上升和下降速度

地面检测
python
  1. def on_forever():
  2.     while balloon.bottom >= scene.screen_height() - 1:
  3.         balloon.say("pull up!", 100)  # 提示拉起
  4.         if nearGroundCount > 25:  # 长时间触地则减少生命
  5.             info.change_life_by(-1)
复制代码

检测热气球是否接近或触地
长时间触地会减少生命值
显示"pull up!"警告提示

山脉移动
python
  1. def on_update_interval2():
  2.     for value in sprites.all_of_kind(SpriteKind.Mountain):
  3.         value.x += -1  # 山脉向左移动
  4.     if lastCreatedMountain.right < scene.screen_width():
  5.         placeMountain(lastCreatedMountain.right)  # 在右侧生成新山脉
复制代码

山脉持续向左移动创造前进感
当最后一个山脉移出屏幕时在右侧生成新山脉

游戏玩法
控制:按住任何按钮使热气球上升,松开按钮使之下
目标:避开飞碟、鸟类等障碍物,避免触地
计分:生存时间越长分数越高
生命:初始3条生命,碰撞障碍物或长时间触地会减少生命

技术亮点
物理模拟:使用加速度控制热气球的上升和下降
多种障碍物:飞碟、鸟类、云朵、树木等不同类型的障碍物
动画系统:飞碟旋转和鸟类飞行动画
粒子效果:燃烧器火焰效果
无限地形:山脉持续生成创造无尽前进感
碰撞优化:碰撞后设置幽灵模式避免重复伤害
用户反馈:文字提示和视觉反馈

这个游戏展示了MakeCode的多种高级功能,包括物理模拟、动画控制、粒子效果、碰撞检测和游戏状态管理,是一个完整的小游戏示例。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 1 小时前

【花雕动手做】基于Kitronik可编程开发板之穿越热气球

图形编程参考实验程序

【花雕动手做】基于Kitronik可编程开发板之穿越热气球图1

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

【花雕动手做】基于Kitronik可编程开发板之穿越热气球图2

实验场景记录

【花雕动手做】基于Kitronik可编程开发板之穿越热气球图3

【花雕动手做】基于Kitronik可编程开发板之穿越热气球图4

【花雕动手做】基于Kitronik可编程开发板之穿越热气球图5

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 1 小时前

【花雕动手做】基于Kitronik可编程开发板之穿越热气球

【花雕动手做】基于Kitronik可编程开发板之穿越热气球图1
回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail