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

2025-09-261417
AI 快速预览详细 收起
基于Kitronik ARCADE开发板的太空探索游戏项目,使用Microsoft MakeCode平台进行开发。该项目具有图形化编程界面和即时模拟器,适合初学者快速上手。硬件清单包括Kitronik ARCADE开发板,最终效果是孩子们可以自己创建并测试太空探索游戏。难度等级适中,适合STEM教育场景。
【花雕动手做】基于Kitronik游戏机开发板之太空探索游戏图1

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


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

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(3)
驴友花雕
驴友花雕
作者
图形编程参考实验程序

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

驴友花雕
驴友花雕
作者
这段 Arcade MakeCode 的 JavaScript 代码构建了一个经典的《太空探索游戏》。玩家驾驶飞船在太空中移动,发射子弹击毁敌人,收集电池补充生命,并在生命耗尽时游戏结束。游戏核心机制如下:
1、玩家控制与初始化
javascript
[code]mySprite = sprites.create(assets.image`Ship`, SpriteKind.Player)
controller.moveSprite(mySprite, 100, 100)
info.setLife(3)
scene.setBackgroundImage(assets.image`Space`)[/code]
创建玩家飞船精灵,设为 SpriteKind.Player。
启用方向键控制移动,速度为 100。
设置初始生命值为 3。
设置太空背景图。
2、背景音乐播放
javascript
[code]music.play(music.createSong(assets.song`My Beat`), music.PlaybackMode.InBackground)[/code]
播放背景音乐 My Beat,在后台持续播放。
3、发射武器机制
A 键发射普通子弹
javascript
[code]controller.A.onEvent(ControllerButtonEvent.Pressed, function on_a_pressed() {
projectile = sprites.createProjectileFromSprite(img`...`, mySprite, 79, 3)
})[/code]
按 A 键从飞船发射一枚普通子弹,速度为 (79, 3)。
B 键发射特殊子弹 + 音效
javascript
[code]controller.B.onEvent(ControllerButtonEvent.Pressed, function on_b_pressed() {
projectile2 = sprites.createProjectileFromSprite(img`...`, mySprite, 79, 3)
music.play(music.createSoundEffect(...), music.PlaybackMode.UntilDone)
})[/code]
按 B 键发射特殊子弹并播放激烈音效。
4、敌人与道具生成
敌人飞船(每 0.5 秒)
javascript
[code]game.onUpdateInterval(500, function on_update_interval() {
mySprite2 = sprites.create(assets.image`Enemy Ship`, SpriteKind.Enemy)
mySprite2.setVelocity(-100, 5)
mySprite2.setPosition(randint(15, 145), randint(15, 105))
})[/code]
每 500 毫秒生成一个敌人飞船,速度为 (-100, 5),从右向左飞行。
电池道具(每 10 秒)
javascript
[code]game.onUpdateInterval(10000, function on_update_interval2() {
mySprite4 = sprites.create(assets.image`Battery`, SpriteKind.Food)
mySprite4.setVelocity(-100, 5)
mySprite4.setPosition(randint(15, 145), randint(15, 105))
})[/code]
每 10 秒生成一个电池道具,玩家可收集以恢复生命。
5、碰撞事件处理
子弹击中敌人
javascript
[code]sprites.onOverlap(SpriteKind.Projectile, SpriteKind.Enemy, function on_on_overlap2(...) {
info.changeScoreBy(1)
sprites.destroy(mySprite2)
})[/code]
子弹击中敌人后得分 +1,并销毁敌人。
玩家碰到敌人
javascript
[code]sprites.onOverlap(SpriteKind.Player, SpriteKind.Enemy, function on_on_overlap3(...) {
info.changeLifeBy(-1)
music.play(music.createSoundEffect(...), music.PlaybackMode.UntilDone)
})[/code]
玩家与敌人碰撞后生命 -1,并播放受伤音效。
玩家收集电池
javascript
[code]sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function on_on_overlap(...) {
info.changeLifeBy(1)
sprites.destroy(mySprite4)
})[/code]
玩家收集电池后生命 +1,并销毁电池道具。
6、游戏结束机制
javascript
[code]info.onLifeZero(function on_life_zero() {
game.gameOver(false)
sprites.destroy(mySprite)
game.splash("Game Over")
music.stopAllSounds()
})[/code]
当生命值为 0:
游戏失败。
销毁玩家飞船。
显示“Game Over”提示。
停止所有音乐。
驴友花雕
驴友花雕
作者
作为学习、练习与尝试,这里创建一个太空探索的小游戏。
打开网页版:https://arcade.makecode.com/,设置项目名称:太空探索
JavaScript 实验代码
[code]controller.A.onEvent(ControllerButtonEvent.Pressed, function on_a_pressed() {
projectile = sprites.createProjectileFromSprite(img`
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . 2 2 2 2 . . .
. . . . . . . 2 2 1 1 1 1 2 . .
. . . . 2 2 3 3 1 1 1 1 1 1 . .
. . 3 3 3 3 1 1 1 1 1 1 1 1 . .
. . 1 1 1 1 1 1 1 1 1 1 1 1 . .
. . 3 3 2 2 3 1 1 1 1 1 1 1 . .
. . . . . . 2 2 3 1 1 1 1 2 . .
. . . . . . . . . 2 2 2 2 . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
`, mySprite, 79, 3)
})
info.onScore(10, function on_on_score() {
})
controller.B.onEvent(ControllerButtonEvent.Pressed, function on_b_pressed() {
projectile2 = sprites.createProjectileFromSprite(img`
. . . . . . . . . . . . . . . . 8 .
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 6 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 6 8
6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8
6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8
6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8
9 9 1 1 1 1 1 1 1 1 1 1 1 1 6 6 9 8
9 9 1 1 1 1 1 1 1 1 1 1 1 1 6 6 9 8
6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8
6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8
6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 6 8
8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 6 8
. . . . . . . . . . . . . . . 8 6 8
. . . . . . . . . . . . . . . . 8 .
. . . . . . . . . . . . . . . . . .
`, mySprite, 79, 3)
music.play(music.createSoundEffect(WaveShape.Square, 1600, 1, 255, 0, 300, SoundExpressionEffect.None, InterpolationCurve.Curve), music.PlaybackMode.UntilDone)
})
info.onLifeZero(function on_life_zero() {
game.gameOver(false)
sprites.destroy(mySprite)
game.splash("Game Over")
music.stopAllSounds()
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function on_on_overlap(sprite: Sprite, otherSprite: Sprite) {
info.changeLifeBy(1)
sprites.destroy(mySprite4)
})
sprites.onOverlap(SpriteKind.Projectile, SpriteKind.Enemy, function on_on_overlap2(sprite2: Sprite, otherSprite2: Sprite) {
info.changeScoreBy(1)
sprites.destroy(mySprite2)
})
sprites.onOverlap(SpriteKind.Player, SpriteKind.Enemy, function on_on_overlap3(sprite3: Sprite, otherSprite3: Sprite) {
info.changeLifeBy(-1)
music.play(music.createSoundEffect(WaveShape.Noise, 3300, 1400, 255, 0, 150, SoundExpressionEffect.Warble, InterpolationCurve.Linear), music.PlaybackMode.UntilDone)
})
let mySprite2 : Sprite = null
let mySprite4 : Sprite = null
let projectile2 : Sprite = null
let projectile : Sprite = null
let mySprite : Sprite = null
mySprite = sprites.create(assets.image`
Ship
`, SpriteKind.Player)
controller.moveSprite(mySprite, 100, 100)
info.setLife(3)
scene.setBackgroundImage(assets.image`
Space
`)
music.play(music.createSong(assets.song`
My Beat
`), music.PlaybackMode.InBackground)
game.onUpdateInterval(500, function on_update_interval() {
mySprite2 = sprites.create(assets.image`
Enemy Ship
`, SpriteKind.Enemy)
mySprite2.setVelocity(-100, 5)
mySprite2.setPosition(randint(15, 145), randint(15, 105))
})
game.onUpdateInterval(10000, function on_update_interval2() {
mySprite4 = sprites.create(assets.image`
Battery
`, SpriteKind.Food)
mySprite4.setVelocity(-100, 5)
mySprite4.setPosition(randint(15, 145), randint(15, 105))
})[/code]
- 没有更多了 -