驴友花雕 发表于 4 天前

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

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

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

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







驴友花雕 发表于 4 天前

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

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

MicroPython实验参考代码

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)

驴友花雕 发表于 4 天前

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

这段代码是用 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毫秒触发一次生成

驴友花雕 发表于 4 天前

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

图形编程参考实验程序


驴友花雕 发表于 4 天前

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

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



实验场景记录







页: [1]
查看完整版本: 【花雕动手做】基于 Kitronik 可编程开发板之吃水果游戏