驴友花雕 发表于 2025-9-26 12:01:55

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



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



驴友花雕 发表于 2025-9-26 12:03:13

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

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

JavaScript 实验代码

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))
})

驴友花雕 发表于 2025-9-26 12:07:30

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

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

1、玩家控制与初始化
javascript
mySprite = sprites.create(assets.image`Ship`, SpriteKind.Player)

controller.moveSprite(mySprite, 100, 100)

info.setLife(3)

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

2、背景音乐播放
javascript
music.play(music.createSong(assets.song`My Beat`), music.PlaybackMode.InBackground)
播放背景音乐 My Beat,在后台持续播放。

3、发射武器机制
A 键发射普通子弹
javascript
controller.A.onEvent(ControllerButtonEvent.Pressed, function on_a_pressed() {

    projectile = sprites.createProjectileFromSprite(img`...`, mySprite, 79, 3)

})
按 A 键从飞船发射一枚普通子弹,速度为 (79, 3)。
B 键发射特殊子弹 + 音效
javascript
controller.B.onEvent(ControllerButtonEvent.Pressed, function on_b_pressed() {

    projectile2 = sprites.createProjectileFromSprite(img`...`, mySprite, 79, 3)

    music.play(music.createSoundEffect(...), music.PlaybackMode.UntilDone)

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

4、敌人与道具生成
敌人飞船(每 0.5 秒)
javascript
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))

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

电池道具(每 10 秒)
javascript
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))

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

5、碰撞事件处理
子弹击中敌人
javascript
sprites.onOverlap(SpriteKind.Projectile, SpriteKind.Enemy, function on_on_overlap2(...) {

    info.changeScoreBy(1)

    sprites.destroy(mySprite2)

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

玩家碰到敌人
javascript
sprites.onOverlap(SpriteKind.Player, SpriteKind.Enemy, function on_on_overlap3(...) {

    info.changeLifeBy(-1)

    music.play(music.createSoundEffect(...), music.PlaybackMode.UntilDone)

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

玩家收集电池
javascript
sprites.onOverlap(SpriteKind.Player, SpriteKind.Food, function on_on_overlap(...) {

    info.changeLifeBy(1)

    sprites.destroy(mySprite4)

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

6、游戏结束机制
javascript
info.onLifeZero(function on_life_zero() {

    game.gameOver(false)

    sprites.destroy(mySprite)

    game.splash("Game Over")

    music.stopAllSounds()

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

驴友花雕 发表于 2025-9-26 12:11:42

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

图形编程参考实验程序



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



页: [1]
查看完整版本: 【花雕动手做】基于Kitronik游戏机开发板之太空探索游戏