回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【花雕动手做】Kitronik 可编程游戏开发板基于 ARCADE MakeCode之穿越热气球 简单

头像 驴友花雕 2025.09.19 4 0

00 (3).jpg

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

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

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

 

00 (4).jpg

作为学习、练习与尝试,这里创建一个穿越热气球的小游戏。
打开网页版: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[randint(0, len(cloudImages) - 1)], -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[randint(0, 1)], 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[Image] = []
bird: Sprite = None
chosenAnimation: List[Image] = []
birdGoingRight: List[Image] = []
birdGoingLeft: List[Image] = []
flyingSaucer: List[Image] = []
saucer: Sprite = None
saucerSpeed = 0
lastCreatedMountain: Sprite = None
mountains: List[Image] = []
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)

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的多种高级功能,包括物理模拟、动画控制、粒子效果、碰撞检测和游戏状态管理,是一个完整的小游戏示例。

图形编程参考实验程序

 

149.jpg


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

 

00214---0.gif


实验场景记录

 

150 (1).jpg
150 (2).jpg
150 (3).jpg

评论

user-avatar
icon 他的勋章
    展开更多