【花雕动手做】基于 Kitronik 可编程开发板之吃水果游戏

2025-09-091117
AI 快速预览详细 收起
Kitronik ARCADE是一款专为编程教学与创客实践设计的可编程游戏机开发板,支持MakeCode Arcade平台。它集成了彩色LCD显示屏、方向控制键、功能按键、蜂鸣器和震动马达等交互组件,提供完整的游戏输入输出体验。无论是初学者进行编程启蒙,还是创客群体开发交互式作品,Kitronik ARCADE都能作为理想的硬件载体,助力创意实现。
Kitronik ARCADE 是一款由英国教育科技公司 Kitronik 精心打造的可编程游戏机开发板,专为编程教学与创客实践而设计。该设备原生支持微软的 MakeCode Arcade 平台,用户可通过图形化或 JavaScript 编程方式,轻松创建、下载并运行复古风格的街机游戏。

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

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

【花雕动手做】基于 Kitronik 可编程开发板之吃水果游戏图3

【花雕动手做】基于 Kitronik 可编程开发板之吃水果游戏图1

【花雕动手做】基于 Kitronik 可编程开发板之吃水果游戏图2

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(4)
驴友花雕
驴友花雕
作者
通过模拟器,调试与模拟运行

实验场景记录


驴友花雕
驴友花雕
作者
图形编程参考实验程序

驴友花雕
驴友花雕
作者
这段代码是用 MakeCode Arcade 编写的一个 吃水果游戏 的核心逻辑。玩家控制一个角色在屏幕上移动,吃到水果得分,碰到障碍物则扣血。
游戏目标
玩家控制角色吃掉“水果”(SpriteKind.food)来得分。
避免碰到“障碍物”(SpriteKind.projectile),否则会扣除生命值。
游戏中不断生成三种不同的物体,其中一种是水果,其余是障碍。
代码逐段解析
(1)玩家碰到障碍物(扣血)
python
def on_on_overlap(sprite, otherSprite):
info.change_life_by(-1) # 扣除1点生命
scene.camera_shake(4, 500) # 屏幕震动效果
otherSprite.destroy(effects.bubbles) # 销毁障碍物并显示泡泡效果
sprites.on_overlap(SpriteKind.player, SpriteKind.projectile, on_on_overlap)
(2) 玩家吃到水果(加分)
python
def on_on_overlap2(sprite2, otherSprite2):
info.change_score_by(1) # 得分+1
otherSprite2.destroy() # 销毁水果
sprite2.start_effect(effects.hearts, 100) # 玩家显示心形特效
music.ba_ding.play() # 播放提示音效
sprites.on_overlap(SpriteKind.player, SpriteKind.food, on_on_overlap2)
(3)创建玩家角色
python
mySprite = sprites.create(img("""..."""), SpriteKind.player)
controller.move_sprite(mySprite, 100, 100) # 启用控制器移动
mySprite.set_stay_in_screen(True) # 限制角色在屏幕内
info.set_life(5) # 设置初始生命值为5
(4)设置背景颜色
python
scene.set_background_color(13) # 设置背景颜色(13是紫色)
(5)每隔0.5秒生成一个物体
python
def on_update_interval():
global choice, projectile
choice = randint(1, 3) # 随机选择1~3
(6)生成障碍物(从左边飞来)
python
if choice == 1:
projectile = sprites.create_projectile_from_side(img("""..."""), -60, 0)
(7)生成障碍物(从右边飞来)
python
elif choice == 2:
projectile = sprites.create_projectile_from_side(img("""..."""), 60, 0)
(8)生成水果(从右边飞来)
python
else:
projectile = sprites.create_projectile_from_side(img("""..."""), 55, 0)
projectile.set_kind(SpriteKind.food) # 设置为食物类型
(9)设置物体的垂直位置
python
projectile.y = randint(10, 110) # 随机Y轴位置
(10)定时器触发
python
game.on_update_interval(500, on_update_interval) # 每500毫秒触发一次生成
驴友花雕
驴友花雕
作者
作为学习、练习与尝试,这里创建一个吃水果的小游戏。
打开网页版:https://arcade.makecode.com/,设置项目名称:吃水果
MicroPython实验参考代码
[code]def on_on_overlap(sprite, otherSprite):
info.change_life_by(-1)
scene.camera_shake(4, 500)
otherSprite.destroy(effects.bubbles)
sprites.on_overlap(SpriteKind.player, SpriteKind.projectile, on_on_overlap)
def on_on_overlap2(sprite2, otherSprite2):
info.change_score_by(1)
otherSprite2.destroy()
sprite2.start_effect(effects.hearts, 100)
music.ba_ding.play()
sprites.on_overlap(SpriteKind.player, SpriteKind.food, on_on_overlap2)
projectile: Sprite = None
choice = 0
scene.set_background_color(13)
mySprite = sprites.create(img("""
. . . . . . f f f f . . . . . .
. . . . f f f 2 2 f f f . . . .
. . . f f f 2 2 2 2 f f f . . .
. . f f f e e e e e e f f f . .
. . f f e 2 2 2 2 2 2 e e f . .
. . f e 2 f f f f f f 2 e f . .
. . f f f f e e e e f f f f . .
. f f e f b f 4 4 f b f e f f .
. f e e 4 1 f d d f 1 4 e e f .
. . f e e d d d d d d e e f . .
. . . f e e 4 4 4 4 e e f . . .
. . e 4 f 2 2 2 2 2 2 f 4 e . .
. . 4 d f 2 2 2 2 2 2 f d 4 . .
. . 4 4 f 4 4 5 5 4 4 f 4 4 . .
. . . . . f f f f f f . . . . .
. . . . . f f . . f f . . . . .
"""),
SpriteKind.player)
controller.move_sprite(mySprite, 100, 100)
mySprite.set_stay_in_screen(True)
info.set_life(5)
def on_update_interval():
global choice, projectile
choice = randint(1, 3)
if choice == 1:
projectile = sprites.create_projectile_from_side(img("""
. . . . . . . . . . b b b . . .
. . . . . . . . b e e 3 3 b . .
. . . . . . b b e 3 2 e 3 a . .
. . . . b b 3 3 e 2 2 e 3 3 a .
. . b b 3 3 3 3 3 e e 3 3 3 a .
b b 3 3 3 3 3 3 3 3 3 3 3 3 3 a
b 3 3 3 d d d d 3 3 3 3 3 d d a
b b b b b b b 3 d d d d d d 3 a
b d 5 5 5 5 d b b b a a a a a a
b 3 d d 5 5 5 5 5 5 5 d d d d a
b 3 3 3 3 3 3 d 5 5 5 d d d d a
b 3 d 5 5 5 3 3 3 3 3 3 b b b a
b b b 3 d 5 5 5 5 5 5 5 d d b a
. . . b b b 3 d 5 5 5 5 d d 3 a
. . . . . . b b b b 3 d d d b a
. . . . . . . . . . b b b a a .
"""),
-60,
0)
elif choice == 2:
projectile = sprites.create_projectile_from_side(img("""
. . . . . 3 3 b 3 3 d d 3 3 . .
. . . . 3 1 1 d 3 d 1 1 1 1 3 .
. . . 3 d 1 1 1 d 1 1 1 d 3 1 3
. . 3 d d 1 1 1 d d 1 1 1 3 3 3
. 3 1 1 d 1 1 1 1 d d 1 1 b . .
. 3 1 1 1 d 1 1 1 1 1 d 1 1 3 .
. b d 1 1 1 d 1 1 1 1 1 1 1 3 .
. 4 b 1 1 1 1 d d 1 1 1 1 d 3 .
. 4 4 d 1 1 1 1 1 1 d d d b b .
. 4 d b d 1 1 1 1 1 1 1 1 3 . .
4 d d 5 b d 1 1 1 1 1 1 1 3 . .
4 5 d 5 5 b b d 1 1 1 1 d 3 . .
4 5 5 d 5 5 d b b b d d 3 . . .
4 5 5 5 d d d d 4 4 b 3 . . . .
. 4 5 5 5 4 4 4 . . . . . . . .
. . 4 4 4 . . . . . . . . . . .
"""),
60,
0)
else:
projectile = sprites.create_projectile_from_side(img("""
. . . . . . . 6 . . . . . . . .
. . . . . . 8 6 6 . . . 6 8 . .
. . . e e e 8 8 6 6 . 6 7 8 . .
. . e 2 2 2 2 e 8 6 6 7 6 . . .
. e 2 2 4 4 2 7 7 7 7 7 8 6 . .
. e 2 4 4 2 6 7 7 7 6 7 6 8 8 .
e 2 4 5 2 2 6 7 7 6 2 7 7 6 . .
e 2 4 4 2 2 6 7 6 2 2 6 7 7 6 .
e 2 4 2 2 2 6 6 2 2 2 e 7 7 6 .
e 2 4 2 2 4 2 2 2 4 2 2 e 7 6 .
e 2 4 2 2 2 2 2 2 2 2 2 e c 6 .
e 2 2 2 2 2 2 2 4 e 2 e e c . .
e e 2 e 2 2 4 2 2 e e e c . . .
e e e e 2 e 2 2 e e e c . . . .
e e e 2 e e c e c c c . . . . .
. c c c c c c c . . . . . . . .
"""),
55,
0)
projectile.set_kind(SpriteKind.food)
projectile.y = randint(10, 110)
game.on_update_interval(500, on_update_interval)[/code]
- 没有更多了 -