12浏览
查看: 12|回复: 4

[求助] 【花雕动手做】基于Kitronik可编程开发板之太空飞机游戏

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

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

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

【花雕动手做】基于Kitronik可编程开发板之太空飞机游戏图3

【花雕动手做】基于Kitronik可编程开发板之太空飞机游戏图1

【花雕动手做】基于Kitronik可编程开发板之太空飞机游戏图2

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】基于Kitronik可编程开发板之太空飞机


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

MicroPython实验参考代码



  1. def on_a_pressed():
  2.     global projectile
  3.     projectile = sprites.create_projectile_from_sprite(img("""
  4.             . . . . . . . . . . . . . . . .
  5.             . . . . . . . . . . . . . . . .
  6.             . . . . . . . . . . . . . . . .
  7.             . . . . . . . . . . . . . . . .
  8.             . . . . . . . . . . . . . . . .
  9.             . . . . . . . . . . . . . . . .
  10.             . . . . . . . 8 8 . . . . . . .
  11.             . . . . 3 2 4 5 5 4 9 3 . . . .
  12.             . . . . 9 b 9 5 5 9 b 9 9 9 . .
  13.             . . . . . . . 8 8 . . . . . . .
  14.             . . . . . . . . . . . . . . . .
  15.             . . . . . . . . . . . . . . . .
  16.             . . . . . . . . . . . . . . . .
  17.             . . . . . . . . . . . . . . . .
  18.             . . . . . . . . . . . . . . . .
  19.             . . . . . . . . . . . . . . . .
  20.             """),
  21.         mySprite,
  22.         200,
  23.         0)
  24. controller.A.on_event(ControllerButtonEvent.PRESSED, on_a_pressed)
  25. def on_on_overlap(sprite, otherSprite):
  26.     otherSprite.destroy(effects.fire, 500)
  27.     info.change_score_by(1)
  28. sprites.on_overlap(SpriteKind.projectile, SpriteKind.enemy, on_on_overlap)
  29. def on_on_overlap2(sprite2, otherSprite2):
  30.     mySprite2.destroy()
  31.     scene.camera_shake(4, 500)
  32.     info.change_life_by(-1)
  33. sprites.on_overlap(SpriteKind.player, SpriteKind.enemy, on_on_overlap2)
  34. mySprite2: Sprite = None
  35. projectile: Sprite = None
  36. mySprite: Sprite = None
  37. mySprite = sprites.create(img("""
  38.         ..ccc.........ffffff....
  39.         ..f4cc.......fcc22ff....
  40.         ..f44cc...fffccccff.....
  41.         ..f244cccc22224442cc....
  42.         ..f224cc2222222244b9c...
  43.         ..cf2222222222222b999c..
  44.         .c22c222222222b11199b2c.
  45.         f22ccccccc222299111b222c
  46.         fffffcc222c222222222222f
  47.         .....f2222442222222222f.
  48.         ....f222244fc2222222ff..
  49.         ...c222244ffffffffff....
  50.         ...c2222cfffc2f.........
  51.         ...ffffffff2ccf.........
  52.         .......ffff2cf..........
  53.         ........fffff...........
  54.         """),
  55.     SpriteKind.player)
  56. controller.move_sprite(mySprite, 200, 200)
  57. mySprite.set_stay_in_screen(True)
  58. info.set_life(5)
  59. def on_update_interval():
  60.     global mySprite2
  61.     mySprite2 = sprites.create(img("""
  62.             . . . . . . . . . . . . . . . .
  63.             . . . . . . . . . . . . . . . .
  64.             . . . . . . . . . . . . . . . .
  65.             . . . . . . . . . . . . . . . .
  66.             . . . 2 2 2 2 . . . . . . . . .
  67.             . . 2 1 1 1 1 2 2 . . . . . . .
  68.             . . 1 1 1 1 1 1 3 3 2 2 . . . .
  69.             . . 1 1 1 1 1 1 1 1 3 3 3 3 . .
  70.             . . 1 1 1 1 1 1 1 1 1 1 1 1 . .
  71.             . . 1 1 1 1 1 1 1 3 2 2 3 3 . .
  72.             . . 2 1 1 1 1 3 2 2 . . . . . .
  73.             . . . 2 2 2 2 . . . . . . . . .
  74.             . . . . . . . . . . . . . . . .
  75.             . . . . . . . . . . . . . . . .
  76.             . . . . . . . . . . . . . . . .
  77.             . . . . . . . . . . . . . . . .
  78.             """),
  79.         SpriteKind.enemy)
  80.     mySprite2.set_velocity(-100, 0)
  81.     mySprite2.set_position(160, randint(5, 115))
  82.     mySprite2.set_flag(SpriteFlag.AUTO_DESTROY, True)
  83. game.on_update_interval(1000, on_update_interval)
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】基于Kitronik可编程开发板之太空飞机

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

核心代码解析

1. 玩家控制与射击
A按钮事件 - 发射子弹
python
  1. def on_a_pressed():
  2.     global projectile
  3.     projectile = sprites.create_projectile_from_sprite(img("""子弹图像"""),
  4.         mySprite,  # 从玩家飞船发射
  5.         200,       # 速度200
  6.         0)         # 方向0度(向右)
复制代码

按下A键时,从玩家飞船创建一个子弹精灵
子弹使用ASCII艺术定义外观
子弹以200的速度向右水平发射

2. 碰撞检测系统
子弹与敌人的碰撞
python
  1. def on_on_overlap(sprite, otherSprite):
  2.     otherSprite.destroy(effects.fire, 500)  # 敌人被摧毁,火焰效果
  3.     info.change_score_by(1)  # 得分+1
复制代码

当子弹击中敌人时,敌人以火焰效果被摧毁
玩家得分增加1分
玩家与敌人的碰撞
python
  1. def on_on_overlap2(sprite2, otherSprite2):
  2.     mySprite2.destroy()  # 敌人被摧毁
  3.     scene.camera_shake(4, 500)  # 屏幕震动
  4.     info.change_life_by(-1)  # 生命值-1
复制代码

当玩家与敌人碰撞时,敌人被摧毁
产生屏幕震动效果
玩家生命值减少1点

3. 游戏初始化
玩家飞船创建
python
  1. mySprite = sprites.create(img("""飞船图像"""), SpriteKind.player)
  2. controller.move_sprite(mySprite, 200, 200)  # 设置移动速度
  3. mySprite.set_stay_in_screen(True)  # 限制在屏幕内
  4. info.set_life(5)  # 设置初始生命值为5
复制代码

创建玩家飞船,使用ASCII艺术定义外观
设置飞船移动速度为200x200
限制飞船不能离开屏幕
设置初始生命值为5

4. 敌人生成系统
python
  1. def on_update_interval():
  2.     global mySprite2
  3.     mySprite2 = sprites.create(img("""敌人图像"""), SpriteKind.enemy)
  4.     mySprite2.set_velocity(-100, 0)  # 向左移动,速度100
  5.     mySprite2.set_position(160, randint(5, 115))  # 从右侧随机高度出现
  6.     mySprite2.set_flag(SpriteFlag.AUTO_DESTROY, True)  # 离开屏幕自动销毁
  7. 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自动销毁离开屏幕的敌人
随机化:敌人从随机高度出现,增加游戏变化性

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 3 小时前

【花雕动手做】基于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