16浏览
查看: 16|回复: 3

[项目] 【花雕动手做】基于Kitronik游戏机开发板之太空探索游戏

[复制链接]
【花雕动手做】基于Kitronik游戏机开发板之太空探索游戏图1

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


【花雕动手做】基于Kitronik游戏机开发板之太空探索游戏图2

驴友花雕  中级技神
 楼主|

发表于 5 小时前

【花雕动手做】基于Kitronik游戏机开发板之太空探索游戏

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

JavaScript 实验代码

  1. controller.A.onEvent(ControllerButtonEvent.Pressed, function on_a_pressed() {
  2.    
  3.     projectile = sprites.createProjectileFromSprite(img`
  4.             . . . . . . . . . . . . . . . .
  5.             . . . . . . . . . . . . . . . .
  6.             . . . . . . . . . . . . . . . .
  7.             . . . . . . . . . . . . . . . .
  8.             . . . . . . . . . 2 2 2 2 . . .
  9.             . . . . . . . 2 2 1 1 1 1 2 . .
  10.             . . . . 2 2 3 3 1 1 1 1 1 1 . .
  11.             . . 3 3 3 3 1 1 1 1 1 1 1 1 . .
  12.             . . 1 1 1 1 1 1 1 1 1 1 1 1 . .
  13.             . . 3 3 2 2 3 1 1 1 1 1 1 1 . .
  14.             . . . . . . 2 2 3 1 1 1 1 2 . .
  15.             . . . . . . . . . 2 2 2 2 . . .
  16.             . . . . . . . . . . . . . . . .
  17.             . . . . . . . . . . . . . . . .
  18.             . . . . . . . . . . . . . . . .
  19.             . . . . . . . . . . . . . . . .
  20.             `, mySprite, 79, 3)
  21. })
  22. info.onScore(10, function on_on_score() {
  23.    
  24. })
  25. controller.B.onEvent(ControllerButtonEvent.Pressed, function on_b_pressed() {
  26.    
  27.     projectile2 = sprites.createProjectileFromSprite(img`
  28.             . . . . . . . . . . . . . . . . 8 .
  29.             8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 6 8
  30.             8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 6 8
  31.             6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8
  32.             6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8
  33.             6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8
  34.             9 9 1 1 1 1 1 1 1 1 1 1 1 1 6 6 9 8
  35.             9 9 1 1 1 1 1 1 1 1 1 1 1 1 6 6 9 8
  36.             6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8
  37.             6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8
  38.             6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8
  39.             8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 6 8
  40.             8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 6 8
  41.             . . . . . . . . . . . . . . . 8 6 8
  42.             . . . . . . . . . . . . . . . . 8 .
  43.             . . . . . . . . . . . . . . . . . .
  44.             `, mySprite, 79, 3)
  45.     music.play(music.createSoundEffect(WaveShape.Square, 1600, 1, 255, 0, 300, SoundExpressionEffect.None, InterpolationCurve.Curve), music.PlaybackMode.UntilDone)
  46. })
  47. info.onLifeZero(function on_life_zero() {
  48.     game.gameOver(false)
  49.     sprites.destroy(mySprite)
  50.     game.splash("Game Over")
  51.     music.stopAllSounds()
  52. })
  53. sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function on_on_overlap(sprite: Sprite, otherSprite: Sprite) {
  54.     info.changeLifeBy(1)
  55.     sprites.destroy(mySprite4)
  56. })
  57. sprites.onOverlap(SpriteKind.Projectile, SpriteKind.Enemy, function on_on_overlap2(sprite2: Sprite, otherSprite2: Sprite) {
  58.     info.changeScoreBy(1)
  59.     sprites.destroy(mySprite2)
  60. })
  61. sprites.onOverlap(SpriteKind.Player, SpriteKind.Enemy, function on_on_overlap3(sprite3: Sprite, otherSprite3: Sprite) {
  62.     info.changeLifeBy(-1)
  63.     music.play(music.createSoundEffect(WaveShape.Noise, 3300, 1400, 255, 0, 150, SoundExpressionEffect.Warble, InterpolationCurve.Linear), music.PlaybackMode.UntilDone)
  64. })
  65. let mySprite2 : Sprite = null
  66. let mySprite4 : Sprite = null
  67. let projectile2 : Sprite = null
  68. let projectile : Sprite = null
  69. let mySprite : Sprite = null
  70. mySprite = sprites.create(assets.image`
  71.     Ship
  72.     `, SpriteKind.Player)
  73. controller.moveSprite(mySprite, 100, 100)
  74. info.setLife(3)
  75. scene.setBackgroundImage(assets.image`
  76.     Space
  77.     `)
  78. music.play(music.createSong(assets.song`
  79.         My Beat
  80.         `), music.PlaybackMode.InBackground)
  81. game.onUpdateInterval(500, function on_update_interval() {
  82.    
  83.     mySprite2 = sprites.create(assets.image`
  84.         Enemy Ship
  85.         `, SpriteKind.Enemy)
  86.     mySprite2.setVelocity(-100, 5)
  87.     mySprite2.setPosition(randint(15, 145), randint(15, 105))
  88. })
  89. game.onUpdateInterval(10000, function on_update_interval2() {
  90.    
  91.     mySprite4 = sprites.create(assets.image`
  92.         Battery
  93.         `, SpriteKind.Food)
  94.     mySprite4.setVelocity(-100, 5)
  95.     mySprite4.setPosition(randint(15, 145), randint(15, 105))
  96. })
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 小时前

【花雕动手做】基于Kitronik游戏机开发板之太空探索游戏

这段 Arcade MakeCode 的 JavaScript 代码构建了一个经典的《太空探索游戏》。玩家驾驶飞船在太空中移动,发射子弹击毁敌人,收集电池补充生命,并在生命耗尽时游戏结束。游戏核心机制如下:

1、玩家控制与初始化
javascript
  1. mySprite = sprites.create(assets.image`Ship`, SpriteKind.Player)
  2. controller.moveSprite(mySprite, 100, 100)
  3. info.setLife(3)
  4. scene.setBackgroundImage(assets.image`Space`)
复制代码

创建玩家飞船精灵,设为 SpriteKind.Player。
启用方向键控制移动,速度为 100。
设置初始生命值为 3。
设置太空背景图。

2、背景音乐播放
javascript
  1. music.play(music.createSong(assets.song`My Beat`), music.PlaybackMode.InBackground)
复制代码

播放背景音乐 My Beat,在后台持续播放。

3、发射武器机制
A 键发射普通子弹
javascript
  1. controller.A.onEvent(ControllerButtonEvent.Pressed, function on_a_pressed() {
  2.     projectile = sprites.createProjectileFromSprite(img`...`, mySprite, 79, 3)
  3. })
复制代码

按 A 键从飞船发射一枚普通子弹,速度为 (79, 3)。
B 键发射特殊子弹 + 音效
javascript
  1. controller.B.onEvent(ControllerButtonEvent.Pressed, function on_b_pressed() {
  2.     projectile2 = sprites.createProjectileFromSprite(img`...`, mySprite, 79, 3)
  3.     music.play(music.createSoundEffect(...), music.PlaybackMode.UntilDone)
  4. })
复制代码

按 B 键发射特殊子弹并播放激烈音效。

4、敌人与道具生成
敌人飞船(每 0.5 秒)
javascript
  1. game.onUpdateInterval(500, function on_update_interval() {
  2.     mySprite2 = sprites.create(assets.image`Enemy Ship`, SpriteKind.Enemy)
  3.     mySprite2.setVelocity(-100, 5)
  4.     mySprite2.setPosition(randint(15, 145), randint(15, 105))
  5. })
复制代码

每 500 毫秒生成一个敌人飞船,速度为 (-100, 5),从右向左飞行。

电池道具(每 10 秒)
javascript
  1. game.onUpdateInterval(10000, function on_update_interval2() {
  2.     mySprite4 = sprites.create(assets.image`Battery`, SpriteKind.Food)
  3.     mySprite4.setVelocity(-100, 5)
  4.     mySprite4.setPosition(randint(15, 145), randint(15, 105))
  5. })
复制代码

每 10 秒生成一个电池道具,玩家可收集以恢复生命。

5、碰撞事件处理
子弹击中敌人
javascript
  1. sprites.onOverlap(SpriteKind.Projectile, SpriteKind.Enemy, function on_on_overlap2(...) {
  2.     info.changeScoreBy(1)
  3.     sprites.destroy(mySprite2)
  4. })
复制代码

子弹击中敌人后得分 +1,并销毁敌人。

玩家碰到敌人
javascript
  1. sprites.onOverlap(SpriteKind.Player, SpriteKind.Enemy, function on_on_overlap3(...) {
  2.     info.changeLifeBy(-1)
  3.     music.play(music.createSoundEffect(...), music.PlaybackMode.UntilDone)
  4. })
复制代码

玩家与敌人碰撞后生命 -1,并播放受伤音效。

玩家收集电池
javascript
  1. sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function on_on_overlap(...) {
  2.     info.changeLifeBy(1)
  3.     sprites.destroy(mySprite4)
  4. })
复制代码

玩家收集电池后生命 +1,并销毁电池道具。

6、游戏结束机制
javascript
  1. info.onLifeZero(function on_life_zero() {
  2.     game.gameOver(false)
  3.     sprites.destroy(mySprite)
  4.     game.splash("Game Over")
  5.     music.stopAllSounds()
  6. })
复制代码

当生命值为 0:
游戏失败。
销毁玩家飞船。
显示“Game Over”提示。
停止所有音乐。

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 小时前

【花雕动手做】基于Kitronik游戏机开发板之太空探索游戏

图形编程参考实验程序

【花雕动手做】基于Kitronik游戏机开发板之太空探索游戏图1

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

【花雕动手做】基于Kitronik游戏机开发板之太空探索游戏图2

回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail