驴友花雕 发表于 2025-9-6 07:34:37

【花雕动手做】基于Kitronik可编程开发板之躲避桶小游戏

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

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

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







驴友花雕 发表于 2025-9-6 07:37:40

【花雕动手做】基于Kitronik可编程开发板之躲避桶小游戏

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

MicroPython实验参考代码

def on_a_pressed():
    if mySprite.is_hitting_tile(CollisionDirection.BOTTOM):
      mySprite.vy = -200
controller.A.on_event(ControllerButtonEvent.PRESSED, on_a_pressed)

def on_on_overlap(sprite, otherSprite):
    game.over(False)
sprites.on_overlap(SpriteKind.player, SpriteKind.projectile, on_on_overlap)

projectile: Sprite = None
mySprite: Sprite = None
tiles.set_tilemap(tilemap("""
    级别1
    """))
mySprite = sprites.create(img("""
      . . . . . . 5 . 5 . . . . . . .
      . . . . . f 5 5 5 f f . . . . .
      . . . . f 1 5 2 5 1 6 f . . . .
      . . . f 1 6 6 6 6 6 1 6 f . . .
      . . . f 6 6 f f f f 6 1 f . . .
      . . . f 6 f f d d f f 6 f . . .
      . . f 6 f d f d d f d f 6 f . .
      . . f 6 f d 3 d d 3 d f 6 f . .
      . . f 6 6 f d d d d f 6 6 f . .
      . f 6 6 f 3 f f f f 3 f 6 6 f .
      . . f f d 3 5 3 3 5 3 d f f . .
      . . f d d f 3 5 5 3 f d d f . .
      . . . f f 3 3 3 3 3 3 f f . . .
      . . . f 3 3 5 3 3 5 3 3 f . . .
      . . . f f f f f f f f f f . . .
      . . . . . f f . . f f . . . . .
      """),
    SpriteKind.player)
tiles.place_on_tile(mySprite, tiles.get_tile_location(1, 5))
mySprite.ay = 500

def on_update_interval():
    global projectile
    projectile = sprites.create_projectile_from_side(img("""
            1 e e e e e e 1
            e e e e e e e e
            1 1 1 1 1 1 1 1
            e e e e e e e e
            e e e e e e e e
            1 1 1 1 1 1 1 1
            e e e e e e e e
            1 e e e e e e 1
            """),
      randint(-100, -80),
      0)
    tiles.place_on_tile(projectile, tiles.get_tile_location(9, 5))
    info.change_score_by(1)
game.on_update_interval(2000, on_update_interval)




驴友花雕 发表于 2025-9-6 07:45:39

【花雕动手做】基于Kitronik可编程开发板之躲避桶小游戏

这是一个躲避类游戏,玩家控制一个角色在平台上跳跃,躲避从右侧飞来的桶。如果被桶击中,游戏结束。
核心代码解析

1. 玩家控制
A按钮事件 - 跳跃
python

def on_a_pressed():
   if mySprite.is_hitting_tile(CollisionDirection.BOTTOM):
       mySprite.vy = -200# 设置垂直速度为负值(向上跳跃)
按下A键时,检查玩家是否站在平台上(底部有碰撞)
如果站在平台上,给玩家一个向上的速度(-200)实现跳跃
这是一种简单的跳跃机制,只有在接触地面时才能跳跃

2. 碰撞检测系统
玩家与桶的碰撞
python

def on_on_overlap(sprite, otherSprite):
   game.over(False)# 游戏结束,失败状态
当玩家与桶(抛射物)碰撞时,游戏立即结束
使用game.over(False)表示游戏失败

3. 游戏初始化
瓦片地图设置
python

tiles.set_tilemap(tilemap("级别1"))
设置游戏使用的瓦片地图,名为"级别1"
瓦片地图定义了游戏中的平台布局
玩家角色创建
python

mySprite = sprites.create(img("""角色图像"""), SpriteKind.player)
tiles.place_on_tile(mySprite, tiles.get_tile_location(1, 5))# 放置在位置(1,5)
mySprite.ay = 500# 设置垂直加速度(重力)
创建玩家角色,使用ASCII艺术定义外观
将玩家放置在瓦片地图的位置(1,5)上
设置垂直加速度为500,模拟重力效果

4. 桶生成系统
python

def on_update_interval():
   global projectile
   projectile = sprites.create_projectile_from_side(img("""桶图像"""),
       randint(-100, -80),# 水平速度(向左)
       0)                   # 垂直速度
   tiles.place_on_tile(projectile, tiles.get_tile_location(9, 5))# 放置在位置(9,5)
   info.change_score_by(1)# 得分+1
game.on_update_interval(2000, on_update_interval)# 每2000毫秒生成一个桶
每2秒生成一个新的桶(抛射物)
桶使用ASCII艺术定义外观
桶以随机速度(-100到-80)向左水平移动
桶从屏幕右侧(9,5)的位置出现
每生成一个桶,玩家得分增加1分

游戏机制总结
控制方式:使用A键跳跃,只能在站在平台上时跳跃
躲避目标:躲避从右侧飞来的桶
得分系统:每生成一个桶得1分(生存时间越长得分越高)
失败条件:被桶击中即游戏结束
物理系统:使用重力加速度模拟跳跃物理效果

技术特点
瓦片地图:使用瓦片地图定义游戏场景
物理模拟:通过设置垂直加速度(ay)模拟重力
碰撞检测:使用is_hitting_tile()检测与平台的碰撞
定时生成:使用game.on_update_interval()定时生成敌人

驴友花雕 发表于 2025-9-6 07:50:12

【花雕动手做】基于Kitronik可编程开发板之躲避桶小游戏

图形编程参考实验程序


驴友花雕 发表于 2025-9-6 07:55:59

【花雕动手做】基于Kitronik可编程开发板之躲避桶小游戏

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



实验场景记录







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