驴友花雕 发表于 2025-9-19 19:55:02

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



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

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

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



驴友花雕 发表于 2025-9-19 19:56:31

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

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

MicroPython实验代码


@namespace
class SpriteKind:
    Background = SpriteKind.create()
    Mountain = SpriteKind.create()
def spawnSomething(roll: number):
    if roll <= 2:
      createSaucer()
    elif roll <= 6:
      createTree()
    elif roll <= 24:
      createCloud()
    elif roll <= 40:
      createBird()
def createSaucer():
    global saucerSpeed, saucer
    if Math.percent_chance(50):
      saucerSpeed = 40
    else:
      saucerSpeed = -40
    saucer = sprites.create_projectile_from_side(img("""
            .........fff.........
            .......ff888ff.......
            ......f8888998f......
            .....f888888998f.....
            ....f888a8a88998f....
            ...ff88888888898ff...
            ..fdddddddddddddddf..
            .fbbbbbbbbbbbbbbbbbf.
            fa9b9bb9bb9bb9bb9b9af
            .facccccccccccccccaf.
            ..faacccccccccccaaf..
            ...ffaacccccccaaff...
            .....fffffffffff.....
            .....f999999999f.....
            ......fffffffff......
            """),
      saucerSpeed,
      0)
    animation.run_image_animation(saucer, flyingSaucer, 400, True)
    saucer.y = randint(10, scene.screen_height() - 10)
def createAnimationArrays():
    global flyingSaucer, birdGoingLeft, birdGoingRight
    flyingSaucer = [img("""
            .........fff.........
            .......ff888ff.......
            ......f8888998f......
            .....f888888998f.....
            ....f888a8a88998f....
            ...ff88888888898ff...
            ..fdddddddddddddddf..
            .fbbbbbbbbbbbbbbbbbf.
            fa9b9bb9bb9bb9bb9b9af
            .facccccccccccccccaf.
            ..faacccccccccccaaf..
            ...ffaacccccccaaff...
            .....fffffffffff.....
            .....f999999999f.....
            ......fffffffff......
            """),
      img("""
            .........fff.........
            .......ff888ff.......
            ......f8888998f......
            .....f888888998f.....
            ....f888a8a88998f....
            ...ff88888888898ff...
            ..fdddddddddddddddf..
            .fbbbbbbbbbbbbbbbbbf.
            fab4b44b44b44b44b4baf
            .facccccccccccccccaf.
            ..faacccccccccccaaf..
            ...ffaacccccccaaff...
            .....fffffffffff.....
            .....f999999999f.....
            ......fffffffff......
            """)]
    birdGoingLeft = [img("""
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . f f f f . . . . . . . . .
            . . f 8 8 8 8 f f f f . f f f .
            . f 8 f 8 8 8 8 8 8 8 f 8 8 8 f
            f 4 5 8 8 8 8 8 8 8 8 8 f f 8 f
            f 5 5 5 8 8 f 8 8 8 8 8 8 8 f .
            . f f f 8 8 8 f 8 8 8 8 8 8 f .
            . . . . f f f f f 8 8 8 f f . .
            . . . . . . . . f f f f . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            """),
      img("""
            . . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . . .
            . . . f f f f . . . . . . . . . .
            . . f 8 8 8 8 f f f f . f f f . .
            . f 8 f 8 8 8 8 8 f 8 f 8 8 8 f .
            f 4 5 8 8 8 8 8 8 8 f 8 8 8 8 f .
            f 5 5 5 8 8 f 8 8 8 8 f 8 8 f . .
            . f f f 8 8 8 f 8 8 8 8 f 8 f . .
            . . . . f f a f f 8 8 8 8 f f . .
            . . . . . . . . f 8 8 8 f . . . .
            . . . . . . . . . f 8 8 f . . . .
            . . . . . . . . . . f f . . . . .
            """),
      img("""
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . f f f f . . . . . . . . .
            . . f 8 8 8 8 f f f f . f f f .
            . f 8 f 8 8 8 8 8 8 8 f 8 8 8 f
            f 4 5 8 8 8 8 8 8 8 8 8 f f 8 f
            f 5 5 5 8 8 f 8 8 8 8 8 8 8 f .
            . f f f 8 8 8 f 8 8 8 8 8 8 f .
            . . . . f f f f f 8 8 8 f f . .
            . . . . . . . . f f f f . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            """),
      img("""
            . . . . . . . . . . . f f . . .
            . . . . . . . . . . f 8 8 f . .
            . . . f f f f . f f 8 8 8 f . .
            . . f 8 8 8 8 f f 8 8 8 f f f .
            . f 8 f 8 8 8 8 8 8 8 f 8 8 8 f
            f 4 5 8 8 8 8 8 8 8 f 8 f f 8 f
            f 5 5 5 8 8 8 8 8 f 8 8 8 8 f .
            . f f f 8 8 8 8 8 8 8 8 8 8 f .
            . . . . f f f f f 8 8 8 f f . .
            . . . . . . . . f f f f . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            """)]
    birdGoingRight = [img("""
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . f f f f . . .
            . f f f . f f f f 8 8 8 8 f . .
            f 8 8 8 f 8 8 8 8 8 8 8 f 8 f .
            f 8 f f 8 8 8 8 8 8 8 8 8 5 4 f
            . f 8 8 8 8 8 8 8 f 8 8 5 5 5 f
            . f 8 8 8 8 8 8 f 8 8 8 f f f .
            . . f f 8 8 8 f f f f f . . . .
            . . . . f f f f . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            """),
      img("""
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . f f f f . . .
            . f f f . f f f f 8 8 8 8 f . .
            f 8 8 8 f 8 f 8 8 8 8 8 f 8 f .
            f 8 8 8 8 f 8 8 8 8 8 8 8 5 4 f
            . f 8 8 f 8 8 8 8 f 8 8 5 5 5 f
            . f 8 f 8 8 8 8 f 8 8 8 f f f .
            . . f f 8 8 8 8 f f f f . . . .
            . . . f 8 8 8 f . . . . . . . .
            . . . f 8 8 f . . . . . . . . .
            . . . . f f . . . . . . . . . .
            """),
      img("""
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . f f f f . . .
            . f f f . f f f f 8 8 8 8 f . .
            f 8 8 8 f 8 8 8 8 8 8 8 f 8 f .
            f 8 f f 8 8 8 8 8 8 8 8 8 5 4 f
            . f 8 8 8 8 8 8 8 f 8 8 5 5 5 f
            . f 8 8 8 8 8 8 f 8 8 8 f f f .
            . . f f 8 8 8 f f f f f . . . .
            . . . . f f f f . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            """),
      img("""
            . . . f f . . . . . . . . . . .
            . . f 8 8 f . . . . . . . . . .
            . . f 8 8 8 f f . f f f f . . .
            . f f f 8 8 8 f f 8 8 8 8 f . .
            f 8 8 8 f 8 8 8 8 8 8 8 f 8 f .
            f 8 f f 8 f 8 8 8 8 8 8 8 5 4 f
            . f 8 8 8 8 f 8 8 8 8 8 5 5 5 f
            . f 8 8 8 8 8 8 8 8 8 8 f f f .
            . . f f 8 8 8 f f f f f . . . .
            . . . . f f f f . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            """)]
def createBird():
    global saucerSpeed, chosenAnimation, bird
    if Math.percent_chance(50):
      saucerSpeed = 20
      chosenAnimation = birdGoingRight
    else:
      saucerSpeed = -20
      chosenAnimation = birdGoingLeft
    bird = sprites.create_projectile_from_side(img("""
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . f f f f . . . . . . . . .
            . . f 8 8 8 8 f f f f . f f f .
            . f 8 f 8 8 8 8 8 8 8 f 8 8 8 f
            f 4 5 8 8 8 8 8 8 8 8 8 f f 8 f
            f 5 5 5 8 8 f 8 8 8 8 8 8 8 f .
            . f f f 8 8 8 f 8 8 8 8 8 8 f .
            . . . . f f f f f 8 8 8 f f . .
            . . . . . . . . f f f f . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            """),
      saucerSpeed,
      0)
    animation.run_image_animation(bird, chosenAnimation, 100, True)
    bird.y = randint(12, scene.screen_height() - 10)
def createCloud():
    global cloudImages, cloud
    cloudImages = [img("""
            ..................1111...............
            ................11111111.............
            ...............1111111111............
            ..............11111111111....11111...
            ..............111111111111.11111111..
            .............11111111111111111111111.
            ........11111111111111111111111111111
            .......111111111111111111111111111111
            1111111111111111111111111111111111111
            .111111111111111111111111111111111111
            .......111111111111111111111111111111
            .......................1111111111111.
            """),
      img("""
            . . . 1 1 1 1 . . . 1 1 . . . . . . . .
            . . 1 1 1 1 1 1 . 1 1 1 1 . . . . . . .
            . 1 1 1 1 1 1 1 1 1 1 1 1 1 . . . . . .
            . 1 1 1 1 1 1 1 1 1 1 1 1 1 . 1 1 . . .
            1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
            1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
            1 1 1 1 1 1 1 1 1 1 1 1 1 . . . . . . .
            """),
      img("""
            ............111111...........
            ..........111111111..........
            .........11111111111.........
            ........1111111111111........
            ........1111111111111........
            ........11111111111111.......
            ....111111111111111111111111.
            ...11111111111111111111111111
            ..111111111111111111111111111
            ..111111111111111111111111111
            11111111111111111111111111111
            .11111111111111111111.1.1111.
            1........11111111111.....11..
            11111111111111...............
            """)]
    cloud = sprites.create_projectile_from_side(cloudImages, -5, 0)
    cloud.z = -10
    cloud.set_flag(SpriteFlag.GHOST, True)
    cloud.y = randint(0, scene.screen_height() * 0.6)

def on_on_overlap(sprite, otherSprite):
    info.change_life_by(-1)
    otherSprite.set_flag(SpriteFlag.GHOST, True)
    sprite.say("ow!", 500)
sprites.on_overlap(SpriteKind.player, SpriteKind.projectile, on_on_overlap)

def placeMountain(leftPosition: number):
    global lastCreatedMountain
    lastCreatedMountain = sprites.create(mountains, SpriteKind.Mountain)
    lastCreatedMountain.set_flag(SpriteFlag.GHOST, True)
    lastCreatedMountain.set_flag(SpriteFlag.AUTO_DESTROY, True)
    lastCreatedMountain.bottom = scene.screen_height()
    lastCreatedMountain.left = leftPosition
    lastCreatedMountain.z = -15

def on_button_released():
    balloon.ay = 50
    effects.clear_particles(balloon)
    balloon.set_image(balloonDeflated)
controller.any_button.on_event(ControllerButtonEvent.RELEASED, on_button_released)

def on_button_pressed():
    balloon.start_effect(effects.fire)
    balloon.start_effect(effects.fire)
    balloon.ay = -50
    balloon.set_image(balloonInflated)
controller.any_button.on_event(ControllerButtonEvent.PRESSED, on_button_pressed)

def createTree():
    global tree
    tree = sprites.create_projectile_from_side(img("""
            . . . . . . . c c . . . . . . .
            . . . . c c c 6 5 c 6 6 . . . .
            . . . . c 6 c 5 5 c 7 6 . . . .
            . . . 6 c c 7 5 5 7 c 6 6 . . .
            . . c c 7 7 7 7 7 5 7 7 c 6 . .
            . 6 6 6 c 6 7 7 7 7 6 c c 6 6 .
            c 7 7 7 6 c 7 c 6 7 6 7 7 7 7 6
            c c c 6 6 6 c 6 6 6 6 7 7 6 6 6
            . c c 7 6 6 6 6 6 7 7 7 7 c 6 .
            . c 7 7 6 6 7 6 6 7 7 6 7 7 c .
            . c c c c 7 7 6 f 7 7 c c c c .
            . . . . c 7 c f f c 7 c . . . .
            . . . . . 6 f e e e c . . . . .
            . . . . . e e e d e e . . . . .
            """),
      -10,
      0)
    tree.z = -5
    tree.bottom = scene.screen_height()
    tree.set_flag(SpriteFlag.GHOST, True)
nearGroundCount = 0
tree: Sprite = None
cloud: Sprite = None
cloudImages: List = []
bird: Sprite = None
chosenAnimation: List = []
birdGoingRight: List = []
birdGoingLeft: List = []
flyingSaucer: List = []
saucer: Sprite = None
saucerSpeed = 0
lastCreatedMountain: Sprite = None
mountains: List = []
balloon: Sprite = None
balloonInflated: Image = None
balloonDeflated: Image = None
balloonDeflated = img("""
    ...................
    ...................
    .......fffff.......
    .....ff22222ff.....
    ....f222222442f....
    ...f22222222442f...
    ..f2222222222442f..
    .f222322223222422f.
    .f222322223222222f.
    .f222322223222222f.
    .f222232222322222f.
    .f222222222222222f.
    ..f2222322232222f..
    ..f2222233322222f..
    ...ff222222222ff...
    ....ffff222ffff....
    .....f.fffff.f.....
    .....f.......f.....
    .....f.......f.....
    ......f.....f......
    ......f.....f......
    .......f...f.......
    .......f.2.f.......
    ......fffffff......
    .....fcccccccf.....
    .....fcbbbbbcf.....
    .....fcabbbacf.....
    .....fcbaaabcf.....
    .....fcbbbbbcf.....
    .....fcabbbacf.....
    .....fccaaaccf.....
    ......fcccccf......
    .......fffff.......
    """)
balloonInflated = img("""
    ...................
    ......fffffff......
    ....ff2222222ff....
    ...f22222222442f...
    ..f2222222222442f..
    .f222222222222442f.
    f22232222223222422f
    f22232222223222222f
    f22232222223222222f
    f22223222222322222f
    f22222222222222222f
    f22222222222222222f
    .f222232222232222f.
    .f222223333322222f.
    ..ff22222222222ff..
    ....ffff222ffff....
    .....f.fffff.f.....
    .....f.......f.....
    .....f.......f.....
    ......f.....f......
    ......f.....f......
    .......f...f.......
    .......f.2.f.......
    ......fffffff......
    .....fcccccccf.....
    .....fcbbbbbcf.....
    .....fcabbbacf.....
    .....fcbaaabcf.....
    .....fcbbbbbcf.....
    .....fcabbbacf.....
    .....fccaaaccf.....
    ......fcccccf......
    .......fffff.......
    """)
music.set_volume(0)
balloon = sprites.create(balloonDeflated, SpriteKind.player)
scene.set_background_color(9)
balloon.ay = 35
balloon.set_stay_in_screen(True)
balloon.z = 100
info.set_score(0)
info.set_life(3)
createAnimationArrays()
mountains = [img("""
      ......................333333........................3333........................
      ...................333333333333...................3333333333....................
      ................333333333333333333..............3333333333333333................
      .............33333333333333333333333.........333333333333333333333333...........
      ..........333333333333333333333333333......333333333333333333333333333333.......
      ........3333333333333333333333333333333..33333333333333333333333333bb33333333...
      ......333333333bb3333333333333333b33333b3333333333333333333333333bbbb333333333..
      ....333333333333b33333333333333333b333bb3333333333333333333333bbbbbbbb333333333.
      ..3333333333333bbb33b3333333333b33bbbbbbbb3b33333333333333b3bbbbbbbbbb3333333333
      3333333333333333bb33b3333333333bbbbbbbbbbbbb33333333333333bbbbbbbbbbbbb3333b3333
      3333333333333b33bbbbbb33b3b3bbbbbbbbbbbbbbbbb333333333b33bbbbbbbbbbbbbbbb33b3333
      333333333333bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb3b333333bbbbbbbbbbbcbbbbbbbbbb3bb3
      333333b33bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb333bbbbbbbbbcbbbcccbbbbbbbbb3b33
      333b33bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcbbcbbcccccbccbbbbbbbbbb33
      333bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccbccbbbbbbbbbb
      33bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccbccbbbbbbcb
      cbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccbccccccccccccbcccccccccccccbcbbcc
      cccbcbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcbbcccbccccccccccccccccccbcccccccccccccbccccc
      cccccbbcbbbbbbbbbbbbbbbbbbbbbbbbbcbcccccccccccccccccccccccccccccccccccccccbbcccc
      ccccccccbcbcbbbbbbbbbbbbbbbbbbcbcccccccccccccccccccccccccccccccccccccccccccccccc
      ccccccccccccbbcbbbbcbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccc
      ccccccccccccccccbcbcbbbbbbcbcccccccccccccccccccccccccccccccccccccccccccccccccccc
      ccccbcccccccccccccccccbcbbcccccccccbcccccccccccccccccccccccccccccccccccccccccccc
      ccccccbcccccccccccccccccccccccccccbccccccccccccccccccccccccccccccccccccccccccccc
      ccccbcccbcccbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
      ccccccccccbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
      cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
      cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
      cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
      cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
      cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
      cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
      """),
    img("""
      ....................3...........................................................
      ....................3...........................................................
      ...................333..........................................................
      ...................3333.........................................................
      ..................333333........................................................
      ..................33333333......................................................
      .................33333333333....................................................
      ................33333333333333..................................................
      ...............3333333333333333.......................3.........................
      ..............333333333333333333...................33333........................
      .............33333333333333333333...............333333333333....................
      ...........33333333333333333333333............3333333333333333..................
      ..........3333333333333333333333333..........3333333333333333333................
      ........3333333333333333333333333333.......3333333333333333333b333..............
      .....33333333333333333333333333333333...333333333333333333333bbb3333..........3.
      .33333333333333333333333333333333333333333333333333333333333bbbbb33333......3333
      33333333333333333333333333333333333333333333333333333333333333b33333333333333333
      333333333333333333333333333333333b333333333333333333333333333bb33333333333333333
      333333333333333333333333333333b3bbb3b3333333333333333333333bbbbb333333333b333333
      333333333333b33333333333333333bbbbbbb3333333333333333333bbbbbbbbb33333333bb33333
      333333333b33b33b33b333333b33bbbbbbbbbb333333333333bbbbbbbbbbbbbbb33333333bbb3333
      33333333bbbbbbbbbbbb3b333bbbbbbbbbbbbbb33333333bbbbbbbbbbbbbbbbbbb333333bbbb33b3
      3333b3bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb3333bbbbbbbbbbbbbbbbbbbbbbb3b3bbbbbbbbb
      c333bbbbbbbbbbbbbbbbbbbbbbbbbbbcbcbbbbbbbbb3bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc
      cccbbbbbbbbbbbbbbbbbbbbbbbbbcbbccccbbbbbbbbbbbbbbbbbbbbcbbbbbbbbbbbbbbbbbbbcbbcc
      ccccbbbbbbbbbbbbbbbbbbbbbbbccccccbccbcbcbbbbbbbbbbbcbbccbbbbbbbbbbbbbbbbbbbcbccc
      ccccccbcbbbbbbbbbbbbbbbbbccccccccccccccccbbbbbbbcbbcccccccbcbbbbbbbbbbbbbcbccccc
      ccccccccbcbbbbbccbbbbbbcccccccccccccccccccccbcbcccccccccccccbbcbbbbbbbbbbccccccc
      cbccccccccbbcbccccbbcbcccccccccccccccccccccccccccccccccccccccccbbbbbcccccccccbcc
      cccccccccccccbbccbbbcccccbcbcccccccccccccccccccccccccccbccccbccccccccccccccccccc
      ccccccccccccccccccccccccccbcbcccccccccccccccccccccccbccccccccccccccccccccccccccc
      ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccbccccc
      cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
      ccccccccccccccccccccccccccccccccccccccccccccccbccccccccccccccccccccccccccccccccc
      ccccccbcbcbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccbccccccccc
      ccccccccbcbccccccccccccccccccccccccccccccccccccccccccccccbcccccccccccccccccccccc
      ccccccccccbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
      cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
      cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
      """)]
sun = sprites.create(img("""
      ......................................................................444444444444444...........................................................................
      ..............................................................444444444444444444444444444444444.................................................................
      ........................................................44444444444444444444555555444444444444444444444.........................................................
      .....................................................444444444444444444444555555555544444444444444444444444444444...............................................
      ..................................................44444444444444444444445555555555555544444444444444444444444444444.............................................
      ...............................................44444444444444444444444455555555555555554444444444444444444444444444444444444....................................
      .......................................4444444444444444444444444444444455555555555555554444444444444444444444444444444444444444444444444........................
      .................................444444444444444444444444444444444444455555555555555555544444444444444444444444444444444444444444444444444444444................
      .........................44444444444444444444444444444444444444444444455555555555555555544444444444444444444444444444444444444444444444444444444444444444.......
      44444.......444444444444444444444444444444444444444444444444444444444555555555555555555554444444444444444444444444444444444444444444444444444444444444444444....
      444444444444444444444444444444444444444444444444444444444444444444444555555555555555555554444444444444444444444444444444444444444444444444444444444444444444444.
      4444444444444444444444444444444444444444444444444444444444444444444445555555555555555555544444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444445555555555555555555544444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444445555555555555555555544444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444555555555555555555444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444555555555555555555444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444455555555555555554444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444455555555555555554444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444445555555555555544444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444444455555555554444444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444444444555555444444444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
      4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444
      """),
    SpriteKind.Background)
sun.bottom = scene.screen_height()
sun.set_flag(SpriteFlag.GHOST, True)
sun.z = -20
placeMountain(0)
placeMountain(lastCreatedMountain.right)
game.set_dialog_frame(img("""
    ...cc......................cc....
    ..c55c..bbbb...bbbbb......c55c...
    .cb55bcbdddbbbbbdddbbbbbbcb55bc..
    b555555bbdddb111bdddb11db555555b.
    bb5555bbdbdb11111bdb1111bb5555bb.
    cb5555bcddd11111ddd11111cb5555bc.
    .c5bb5c1111d111d111d111ddc5bb5c..
    .cbbbbc111111111111111111cbbbbc..
    ..b11111111111111111111111d111bb.
    ..b111111111111111111111111d1bdb.
    ..bb11111111111111111111111dbddb.
    .bbdb1d11111111111111111111ddddb.
    .bdddd11111111111111111111d1bdbb.
    .bddbd11111111111111111111111bb..
    .bdb1d111111111111111111111111b..
    .bb111d11111111111111111111111b..
    ..b11111111111111111111111d111bb.
    ..b111111111111111111111111d1bdb.
    ..bb11111111111111111111111dbddb.
    .bbdb1d11111111111111111111ddddb.
    .bdddd11111111111111111111d1bdbb.
    .bddbd11111111111111111111111bb..
    .bdbb1111111111111111111111111b..
    .bbbd1111111111111111111111111b..
    ..bcc111111111111111111111dccdb..
    ..c55c111d111d111d111d1111c55cb..
    .cb55bcdd11111ddd11111dddcb55bc..
    b555555b11111bdb11111bdbb555555b.
    bb5555bbb111bdddb111bdddbb5555bb.
    cb5555bcdbbbbbdddbbbbbddcb5555bc.
    .c5bb5c.bb...bbbbb...bbbbc5bb5c..
    .cbbbbc..................cbbbbc..
    .................................
    """))
game.show_long_text("Stay in the air as long as you can! Hold any   button to turn on the burner.",
    DialogLayout.CENTER)
for index in range(2):
    spawnSomething(randint(0, 40))

def on_on_update():
    info.change_score_by(1)
game.on_update(on_on_update)

def on_on_update2():
    balloon.vy = Math.constrain(balloon.vy, -25, 25)
game.on_update(on_on_update2)

def on_update_interval():
    spawnSomething(randint(0, 100))
game.on_update_interval(750, on_update_interval)

def on_forever():
    global nearGroundCount
    nearGroundCount = -1
    while balloon.bottom >= scene.screen_height() - 1:
      balloon.say("pull up!", 100)
      nearGroundCount += 1
      if nearGroundCount > 25:
            info.change_life_by(-1)
            nearGroundCount = -20
      pause(25)
forever(on_forever)

def on_update_interval2():
    # changing position explicitly to avoid fractions of
    # movement / clipping
    for value in sprites.all_of_kind(SpriteKind.Mountain):
      value.x += -1
    if lastCreatedMountain.right < scene.screen_width():
      placeMountain(lastCreatedMountain.right)
game.on_update_interval(200, on_update_interval2)

驴友花雕 发表于 2025-9-19 20:04:39

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

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

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

代码结构分析

1. 自定义精灵类型
python
class SpriteKind:

    Background = SpriteKind.create()

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

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

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

鸟类
python
def createBird():
随机选择飞行方向
使用不同的动画序列表示左右飞行
随机出现在屏幕中上部

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

树木
python
def createTree():
从右侧生成并向左移动
放置在地面高度
设置为幽灵模式

3. 动画系统
python
def createAnimationArrays():
创建飞碟的旋转动画(2帧)
创建鸟类左右飞行的动画(各4帧)
创建多种云朵图像变体

4. 热气球控制系统
上升机制
python
def on_button_pressed():

    balloon.start_effect(effects.fire)# 火焰特效

    balloon.ay = -50# 负加速度使气球上升

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

下降机制
python
def on_button_released():

    balloon.ay = 50# 正加速度使气球下降

    effects.clear_particles(balloon)# 清除火焰效果

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

5. 碰撞检测
python
def on_on_overlap(sprite, otherSprite):

    info.change_life_by(-1)# 减少生命值

    otherSprite.set_flag(SpriteFlag.GHOST, True)# 设置障碍物为幽灵模式

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

6. 游戏环境设置
山脉系统
python
def placeMountain(leftPosition: number):
创建随机选择的山脉图像
放置在地面位置
设置为幽灵模式和自动销毁

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

7. 游戏机制
分数系统
python
def on_on_update():

    info.change_score_by(1)# 每帧增加1分
游戏运行时间越长分数越高

高度限制
python
def on_on_update2():

    balloon.vy = Math.constrain(balloon.vy, -25, 25)# 限制垂直速度
限制热气球的最大上升和下降速度

地面检测
python
def on_forever():

    while balloon.bottom >= scene.screen_height() - 1:

      balloon.say("pull up!", 100)# 提示拉起

      if nearGroundCount > 25:# 长时间触地则减少生命

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

山脉移动
python
def on_update_interval2():

    for value in sprites.all_of_kind(SpriteKind.Mountain):

      value.x += -1# 山脉向左移动

    if lastCreatedMountain.right < scene.screen_width():

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

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

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

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

驴友花雕 发表于 2025-9-19 20:13:04

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

图形编程参考实验程序



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



实验场景记录







驴友花雕 发表于 2025-9-19 20:15:52

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


页: [1]
查看完整版本: 【花雕动手做】基于Kitronik可编程开发板之穿越热气球