15浏览
查看: 15|回复: 5

[项目] 【花雕动手做】基于Kitronik可编程开发板随机箭头小游戏

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

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

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

【花雕动手做】基于Kitronik可编程开发板随机箭头小游戏图2

【花雕动手做】基于Kitronik可编程开发板随机箭头小游戏图3

【花雕动手做】基于Kitronik可编程开发板随机箭头小游戏图1

驴友花雕  中级技神
 楼主|

发表于 6 小时前

【花雕动手做】基于Kitronik可编程开发板随机箭头小游戏

主要特征:
Kitronik ARCADE 是一款功能丰富的手持游戏手柄开发板,可与 Microsoft Arcade 编辑器一起使用。
编写您自己的游戏来玩或从 MakeCode Arcade 网站免费下载游戏。
使用丰富的教育材料从头开始创建游戏,或调整现有代码并学习开源方式。
它配备了全彩液晶广视角屏幕。
它有一个用于音频反馈的压电发声器。
利用振动电机进行触觉反馈。
它还具有;6 个玩家输入按钮、一个菜单按钮、一个重置按钮和一个开/关开关。
还有一个软件音量控制、一个 USB 编程端口和 2 个扩展端口,供专家级用户使用。
ARCADE 可以由 3xAA 电池或微型 USB 连接器供电。

【花雕动手做】基于Kitronik可编程开发板随机箭头小游戏图1

Kitronik ARCADE 是一款专为与 MakeCode Arcade 编辑器一起使用而设计的掌上游戏平台,既可以编写自己的游戏并在 ARCADE 上运行它们,也可以下载现有游戏并享受功能齐全的掌上游戏体验。(网页版:https://arcade.makecode.com/

Kitronik ARCADE 使用 Microsoft MakeCode 平台,具有以下优势:
图形化编程界面:适合初学者,支持拖拽式编程。
即时模拟器:可以实时测试游戏效果。
硬件兼容性:可部署到 Kitronik ARCADE 设备,实现实体游戏体验。
支持 Python/JavaScript:便于进阶学习。

【花雕动手做】基于Kitronik可编程开发板随机箭头小游戏图2

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 小时前

【花雕动手做】基于Kitronik可编程开发板随机箭头小游戏

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

1、MicroPython实验参考代码

  1. def on_button_multiplayer_up_pressed(player2):
  2.     mp.get_player_sprite(player2).set_image(assets.image("""
  3.         0
  4.         """))
  5.     if arrow.image.equals(assets.image("""
  6.         0
  7.         """)):
  8.         mp.change_player_state_by(player2, MultiplayerState.score, 1)
  9. mp.on_button_event(mp.MultiplayerButton.UP,
  10.     ControllerButtonEvent.PRESSED,
  11.     on_button_multiplayer_up_pressed)
  12. def on_button_multiplayer_right_pressed(player22):
  13.     mp.get_player_sprite(player22).set_image(assets.image("""
  14.         2
  15.         """))
  16.     if arrow.image.equals(assets.image("""
  17.         2
  18.         """)):
  19.         mp.change_player_state_by(player22, MultiplayerState.score, 1)
  20. mp.on_button_event(mp.MultiplayerButton.RIGHT,
  21.     ControllerButtonEvent.PRESSED,
  22.     on_button_multiplayer_right_pressed)
  23. def on_button_multiplayer_left_pressed(player23):
  24.     mp.get_player_sprite(player23).set_image(assets.image("""
  25.         1
  26.         """))
  27.     if arrow.image.equals(assets.image("""
  28.         1
  29.         """)):
  30.         mp.change_player_state_by(player23, MultiplayerState.score, 1)
  31. mp.on_button_event(mp.MultiplayerButton.LEFT,
  32.     ControllerButtonEvent.PRESSED,
  33.     on_button_multiplayer_left_pressed)
  34. def on_button_multiplayer_down_pressed(player24):
  35.     mp.get_player_sprite(player24).set_image(assets.image("""
  36.         3
  37.         """))
  38.     if arrow.image.equals(assets.image("""
  39.         3
  40.         """)):
  41.         mp.change_player_state_by(player24, MultiplayerState.score, 1)
  42. mp.on_button_event(mp.MultiplayerButton.DOWN,
  43.     ControllerButtonEvent.PRESSED,
  44.     on_button_multiplayer_down_pressed)
  45. arrow: Sprite = None
  46. arrow_list: List[Image] = []
  47. scene.set_background_image(assets.image("""
  48.     2pbg
  49.     """))
  50. def on_wrap1():
  51.     mp.set_player_sprite(mp.player_selector(mp.PlayerNumber.ONE),
  52.         sprites.create(assets.image("""
  53.             p1
  54.             """), SpriteKind.player))
  55.     mp.get_player_sprite(mp.player_selector(mp.PlayerNumber.ONE)).set_position(40, 90)
  56. bundles.wrap1(on_wrap1)
  57. def on_wrap2():
  58.     mp.set_player_sprite(mp.player_selector(mp.PlayerNumber.TWO),
  59.         sprites.create(assets.image("""
  60.             p2
  61.             """), SpriteKind.player))
  62.     mp.get_player_sprite(mp.player_selector(mp.PlayerNumber.TWO)).set_position(120, 90)
  63. bundles.wrap2(on_wrap2)
  64. def on_wrap3():
  65.     global arrow_list, arrow
  66.     arrow_list = [assets.image("""
  67.             0
  68.             """),
  69.         assets.image("""
  70.             1
  71.             """),
  72.         assets.image("""
  73.             2
  74.             """),
  75.         assets.image("""
  76.             3
  77.             """)]
  78.     arrow = sprites.create(img("""
  79.         .
  80.         """), SpriteKind.player)
  81.     arrow.set_position(80, 30)
  82. bundles.wrap3(on_wrap3)
  83. def on_wrap4():
  84.     game.splash("Be the quickest to match", "arrow directions to win!")
  85.     carnival.start_countdown_game(15, carnival.WinTypes.MULTI)
  86.     music.play_sound_effect(music.create_sound_effect(WaveShape.TRIANGLE,
  87.             4750,
  88.             4783,
  89.             255,
  90.             0,
  91.             449,
  92.             SoundExpressionEffect.NONE,
  93.             InterpolationCurve.CURVE),
  94.         SoundExpressionPlayMode.UNTIL_DONE)
  95. bundles.wrap4(on_wrap4)
  96. def on_update_interval():
  97.     arrow.set_image(arrow_list._pick_random())
  98. game.on_update_interval(500, on_update_interval)
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 小时前

【花雕动手做】基于Kitronik可编程开发板随机箭头小游戏

本帖最后由 驴友花雕 于 2025-9-1 13:06 编辑

代码解读

1. 方向按钮事件处理
上方向键处理
python
  1. def on_button_multiplayer_up_pressed(player2):
  2.     mp.get_player_sprite(player2).set_image(assets.image("0"))  # 设置玩家图像为上箭头
  3.     if arrow.image.equals(assets.image("0")):  # 如果与当前箭头匹配
  4.         mp.change_player_state_by(player2, MultiplayerState.score, 1)  # 得分+1
复制代码


右方向键处理
python
  1. def on_button_multiplayer_right_pressed(player22):
  2.     mp.get_player_sprite(player22).set_image(assets.image("2"))  # 设置玩家图像为右箭头
  3.     if arrow.image.equals(assets.image("2")):  # 如果与当前箭头匹配
  4.         mp.change_player_state_by(player22, MultiplayerState.score, 1)  # 得分+1
复制代码


左方向键处理
python
  1. def on_button_multiplayer_left_pressed(player23):
  2.     mp.get_player_sprite(player23).set_image(assets.image("1"))  # 设置玩家图像为左箭头
  3.     if arrow.image.equals(assets.image("1")):  # 如果与当前箭头匹配
  4.         mp.change_player_state_by(player23, MultiplayerState.score, 1)  # 得分+1
复制代码


下方向键处理
python
  1. def on_button_multiplayer_down_pressed(player24):
  2.     mp.get_player_sprite(player24).set_image(assets.image("3"))  # 设置玩家图像为下箭头
  3.     if arrow.image.equals(assets.image("3")):  # 如果与当前箭头匹配
  4.         mp.change_player_state_by(player24, MultiplayerState.score, 1)  # 得分+1
复制代码



2. 游戏初始化
背景设置
python
  1. scene.set_background_image(assets.image("2pbg"))  # 设置双人游戏背景
复制代码


玩家1设置
python
  1. def on_wrap1():
  2.     mp.set_player_sprite(mp.player_selector(mp.PlayerNumber.ONE),
  3.         sprites.create(assets.image("p1"), SpriteKind.player))  # 创建玩家1精灵
  4.     mp.get_player_sprite(mp.player_selector(mp.PlayerNumber.ONE)).set_position(40, 90)  # 设置位置
复制代码


玩家2设置
python
  1. def on_wrap2():
  2.     mp.set_player_sprite(mp.player_selector(mp.PlayerNumber.TWO),
  3.         sprites.create(assets.image("p2"), SpriteKind.player))  # 创建玩家2精灵
  4.     mp.get_player_sprite(mp.player_selector(mp.PlayerNumber.TWO)).set_position(120, 90)  # 设置位置
复制代码


箭头系统初始化
python
  1. def on_wrap3():
  2.     global arrow_list, arrow
  3.     arrow_list = [assets.image("0"),  # 上箭头
  4.         assets.image("1"),  # 左箭头
  5.         assets.image("2"),  # 右箭头
  6.         assets.image("3")]  # 下箭头
  7.    
  8.     arrow = sprites.create(img("."), SpriteKind.player)  # 创建箭头精灵
  9.     arrow.set_position(80, 30)  # 设置在屏幕上方中央
复制代码


游戏启动
python
  1. def on_wrap4():
  2.     game.splash("Be the quickest to match", "arrow directions to win!")  # 显示游戏说明
  3.     carnival.start_countdown_game(15, carnival.WinTypes.MULTI)  # 15秒倒计时,多人模式
  4.     music.play_sound_effect(...)  # 播放音效
复制代码


3. 游戏循环 - 箭头更新
python
  1. def on_update_interval():
  2.     arrow.set_image(arrow_list._pick_random())  # 随机选择箭头方向
  3. game.on_update_interval(500, on_update_interval)  # 每500毫秒更新一次
复制代码



游戏机制总结
反应测试游戏:玩家需要快速响应屏幕上显示的箭头方向
多人竞争:支持两名玩家同时游戏
视觉反馈:
屏幕中央显示随机方向的箭头
玩家按下按钮时,角色图像会变成对应的箭头
得分系统:
只有当玩家按下的方向与屏幕箭头匹配时才得分
使用MultiplayerState.score跟踪玩家分数
时间限制:游戏设置为15秒倒计时模式
音频反馈:游戏开始时播放三角波音效

技术特点
使用bundles模块:通过bundles.wrap1()到bundles.wrap4()组织初始化代码
图像资源管理:使用预定义的图像资源("0", "1", "2", "3"代表不同方向)
随机化机制:使用_pick_random()方法随机选择箭头方向
多人游戏支持:通过mp(multiplayer)模块处理多玩家交互
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 6 小时前

【花雕动手做】基于Kitronik可编程开发板随机箭头小游戏

图形编程参考实验程序

【花雕动手做】基于Kitronik可编程开发板随机箭头小游戏图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】基于Kitronik可编程开发板随机箭头小游戏

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

【花雕动手做】基于Kitronik可编程开发板随机箭头小游戏图1

实验场景记录

【花雕动手做】基于Kitronik可编程开发板随机箭头小游戏图2

【花雕动手做】基于Kitronik可编程开发板随机箭头小游戏图3
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail