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

【花雕动手做】Kitronik 可编程开发板基于 ARCADE MakeCode 之太空飞机小游戏 简单

头像 驴友花雕 2025.09.05 7 0

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

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

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

00 (2).jpg
00 (3).jpg
00 (4).jpg

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

MicroPython实验参考代码

代码
def on_a_pressed():
    global projectile
    projectile = sprites.create_projectile_from_sprite(img("""
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . 8 8 . . . . . . .
            . . . . 3 2 4 5 5 4 9 3 . . . .
            . . . . 9 b 9 5 5 9 b 9 9 9 . .
            . . . . . . . 8 8 . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            """),
        mySprite,
        200,
        0)
controller.A.on_event(ControllerButtonEvent.PRESSED, on_a_pressed)

def on_on_overlap(sprite, otherSprite):
    otherSprite.destroy(effects.fire, 500)
    info.change_score_by(1)
sprites.on_overlap(SpriteKind.projectile, SpriteKind.enemy, on_on_overlap)

def on_on_overlap2(sprite2, otherSprite2):
    mySprite2.destroy()
    scene.camera_shake(4, 500)
    info.change_life_by(-1)
sprites.on_overlap(SpriteKind.player, SpriteKind.enemy, on_on_overlap2)

mySprite2: Sprite = None
projectile: Sprite = None
mySprite: Sprite = None
mySprite = sprites.create(img("""
        ..ccc.........ffffff....
        ..f4cc.......fcc22ff....
        ..f44cc...fffccccff.....
        ..f244cccc22224442cc....
        ..f224cc2222222244b9c...
        ..cf2222222222222b999c..
        .c22c222222222b11199b2c.
        f22ccccccc222299111b222c
        fffffcc222c222222222222f
        .....f2222442222222222f.
        ....f222244fc2222222ff..
        ...c222244ffffffffff....
        ...c2222cfffc2f.........
        ...ffffffff2ccf.........
        .......ffff2cf..........
        ........fffff...........
        """),
    SpriteKind.player)
controller.move_sprite(mySprite, 200, 200)
mySprite.set_stay_in_screen(True)
info.set_life(5)

def on_update_interval():
    global mySprite2
    mySprite2 = sprites.create(img("""
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . 2 2 2 2 . . . . . . . . .
            . . 2 1 1 1 1 2 2 . . . . . . .
            . . 1 1 1 1 1 1 3 3 2 2 . . . .
            . . 1 1 1 1 1 1 1 1 3 3 3 3 . .
            . . 1 1 1 1 1 1 1 1 1 1 1 1 . .
            . . 1 1 1 1 1 1 1 3 2 2 3 3 . .
            . . 2 1 1 1 1 3 2 2 . . . . . .
            . . . 2 2 2 2 . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            . . . . . . . . . . . . . . . .
            """),
        SpriteKind.enemy)
    mySprite2.set_velocity(-100, 0)
    mySprite2.set_position(160, randint(5, 115))
    mySprite2.set_flag(SpriteFlag.AUTO_DESTROY, True)
game.on_update_interval(1000, on_update_interval)

太空飞机游戏代码解读
这是一个经典的太空射击游戏,玩家控制一艘宇宙飞船,射击从右侧出现的敌人,同时避免与敌人相撞。

核心代码解析

1. 玩家控制与射击
A按钮事件 - 发射子弹
python
def on_a_pressed():
global projectile
projectile = sprites.create_projectile_from_sprite(img("""子弹图像"""),
mySprite, # 从玩家飞船发射
200, # 速度200
0) # 方向0度(向右)
按下A键时,从玩家飞船创建一个子弹精灵
子弹使用ASCII艺术定义外观
子弹以200的速度向右水平发射

2. 碰撞检测系统
子弹与敌人的碰撞
python
def on_on_overlap(sprite, otherSprite):
otherSprite.destroy(effects.fire, 500) # 敌人被摧毁,火焰效果
info.change_score_by(1) # 得分+1
当子弹击中敌人时,敌人以火焰效果被摧毁
玩家得分增加1分
玩家与敌人的碰撞
python
def on_on_overlap2(sprite2, otherSprite2):
mySprite2.destroy() # 敌人被摧毁
scene.camera_shake(4, 500) # 屏幕震动
info.change_life_by(-1) # 生命值-1
当玩家与敌人碰撞时,敌人被摧毁
产生屏幕震动效果
玩家生命值减少1点

3. 游戏初始化
玩家飞船创建
python
mySprite = sprites.create(img("""飞船图像"""), SpriteKind.player)
controller.move_sprite(mySprite, 200, 200) # 设置移动速度
mySprite.set_stay_in_screen(True) # 限制在屏幕内
info.set_life(5) # 设置初始生命值为5
创建玩家飞船,使用ASCII艺术定义外观
设置飞船移动速度为200x200
限制飞船不能离开屏幕
设置初始生命值为5

4. 敌人生成系统
python
def on_update_interval():
global mySprite2
mySprite2 = sprites.create(img("""敌人图像"""), SpriteKind.enemy)
mySprite2.set_velocity(-100, 0) # 向左移动,速度100
mySprite2.set_position(160, randint(5, 115)) # 从右侧随机高度出现
mySprite2.set_flag(SpriteFlag.AUTO_DESTROY, True) # 离开屏幕自动销毁
game.on_update_interval(1000, on_update_interval) # 每1000毫秒生成一个敌人
每1秒生成一个新的敌人
敌人使用ASCII艺术定义外观(类似小行星)
敌人以100的速度向左移动
敌人从屏幕右侧(160)随机高度(5-115)出现
设置敌人离开屏幕时自动销毁

游戏机制总结
控制方式:使用方向键移动飞船,A键发射子弹
得分系统:击中敌人得1分
生命系统:初始5条生命,碰撞敌人失去1条生命
视觉反馈:
敌人被击中时有火焰效果
玩家被击中时有屏幕震动效果
敌人生成:敌人持续从右侧随机位置生成

技术特点
精灵分类:使用SpriteKind.player和SpriteKind.enemy区分玩家和敌人
碰撞检测:通过sprites.on_overlap()处理不同精灵类型的碰撞
自动清理:使用SpriteFlag.AUTO_DESTROY自动销毁离开屏幕的敌人
随机化:敌人从随机高度出现,增加游戏变化性

图形编程参考实验程序

59.jpg

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

00203-.gif

实验场景记录

60 (1).jpg
60 (2).jpg

评论

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