---
# System prepended metadata

title: 10/9 Arcade再進化-探索宇宙-射擊遊戲(4)
tags: [2022 iThome 鐵人賽]

---

---
tags: 2022 iThome 鐵人賽 
title: 10/9 Arcade再進化-探索宇宙-射擊遊戲(4)
AUTHOR: 謝熙智
---
# Arcade再進化
## 第四章：戰機升級(速度改變，造型改變)，增加保命裝備

成果展示:
1. 戰機原本型態

![](https://i.imgur.com/gdDTYj2.png)


<br>

2. 戰機改變型態

![](https://i.imgur.com/TPZErWd.png)

<br>

3. 護盾增加

![](https://i.imgur.com/BewDQfW.png)

<br>

### 第一部分：戰機升級(速度改變)
觸發條件:生命=5、分數大於等於25、按下鍵盤上的Q和E

1. 從 函式 中創建 戰機升級
2. 選取 邏輯 中的 如果true那麼
3. 選取 邏輯 中的 ()且()
4. 選取 邏輯 中的 大於 並選取 資訊 中的 得分 放入第一格 將第二格改成25
5. 選取 邏輯 中的 大於 並選取 資訊 中的 生命 放入第一格 將第二格改成5
6. 將兩個分別放入 ()且()
7. 選取 角色 中的 mysprite摧毀 放入函式

![](https://i.imgur.com/s6Js7fX.png)

8. 選取 邏輯 中的 如果true那麼 並放入 當A鍵被按住
9. 選取 控制器 中的 B鍵被按住 放入 true
10. 選取 函式 中的 呼叫戰機升級

![](https://i.imgur.com/XJMlvV2.png)

11. 選取 角色 中的 當摧毀的是角色sprite類別player
12. 選取 變數 中的 變數戰機設為角色()類別player
13. 選取 角色 中的 角色()類別player 並放入變數戰機設為()
14. 選取 控制器 中的 控制器移動角色戰機速度 並改成 vx:200 vy:200
15. 選取 場景 中的 鏡頭跟隨角色戰機

![](https://i.imgur.com/QPOVQO8.png)

### 第二部分：戰機升級(造型改變)

1. 點取 角色()類別player 中的 ()
2. 開始繪畫你心目中的戰機
3. 成品(長寬建議在20)

太大
![](https://i.imgur.com/KKNfqhb.png) 

剛好
![](https://i.imgur.com/08oM2jm.png)

### 第三部分：增加護盾
觸發條件:碰到你所設定的圖

1. 選取 變數 中的 變數戰機設為角色()類別player 並放入 當啟動時
2. 將 變數戰機 player 改為護航盾 並將()畫圖

![](https://i.imgur.com/vSWctiZ.png)

<br>

1. 複製 當遊戲更新 間隔隨機取數750到1000毫秒 整個程式
2. 將所有 變數子彈 buff 改為護航盾 速度vx改為10 vy隨機-10到100

![](https://i.imgur.com/tgmaWxB.png)

<br>

1. 從 函式 中創建 護航盾2
2. 選取 變數 中的 變數projectile設為發射物()來自mysprite速度vx:50 vy:50 
3. 並將 projectile 改為，護航盾 mysprite 改為 戰機，速度 都改為0
4. 選取 角色 中的 角色myEnemy跟隨角色mySprite 並將myEnemy改為 護航盾，mySprite 改為 戰機
5. 選取 角色 中的 change mySprite scale by 1 anchor 中，並將 mySprite 改為 護航盾 1 改為 3

![](https://i.imgur.com/dsn9Psb.png)

<br>

1. 複製 當角色sprite類別projectile重疊角色otherspite類別Enemy 並將 projectile 改為護航盾 
2. 選取 迴圈 裡的 暫停100毫秒 並將100改成200

![](https://i.imgur.com/lXKJhMd.png)

<br>

1. 再一次複製 當角色sprite類別projectile重疊角色otherspite類別Enemy 並將 otherspite 改為 player
2. 刪除 得分改變1 暫停200毫秒 
3. 選取 函式 中的 呼叫護航盾2 並放入

![](https://i.imgur.com/qwft5gA.png)

<br>

## 以下是使用JAVASCRIPT來做 

```javascript=
### 第一部分:戰機升級(速度改變)
function 戰機_升級 () {
    if (info.score() >= 25 && info.life() >= 5) {
        戰機.destroy()
    }
}
controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
    子彈2(1)
    if (controller.B.isPressed()) {
        戰機_升級()
    }
})
sprites.onDestroyed(SpriteKind.Player, function (sprite) {
    戰機 = sprites.create(img`
        ffffffffffffffffffff
        ffffffffffffffffffff
        fffffffff22fffffffff
        fffffffff22fffffffff
        fffffffffeefffffffff
        ffffffffeeeeffffffff
        fff5ffffe55effff5fff
        ff9effffe55effffe9ff
        ff9ef22feeeef22fe9ff
        ff9eeeeeeeeeeeeee9ff
        ff9eeeeeeddeeeeee9ff
        ff9ef22feddef22fe9ff
        ff9efddffeeffddfe9ff
        fff5fffffeefffff5fff
        ffffffff5ee5ffffffff
        ffffffffeeeeffffffff
        fffffffd2ee2dfffffff
        ffffffdd2ee2ddffffff
        ffffffffffffffffffff
        ffffffffffffffffffff
        `, SpriteKind.Player)
    scene.cameraFollowSprite(戰機)
    controller.moveSprite(戰機, 200, 200)
})

    
### 第三部分：增加護盾
let 護航盾2: Sprite = null
export const 護航盾 = SpriteKind.create()
game.onUpdateInterval(randint(750, 1000), function () {
    護航盾2 = sprites.createProjectileFromSide(img`
        . . . . . . . . . . 
        . . . . e 2 . . . . 
        . . . . e e . . . . 
        . e . . e e . . e . 
        e e . e 5 5 e . e e 
        5 e e e e e e e e 5 
        e e . . d d . . e e 
        . e . . e e . . e . 
        . . . e 2 2 e . . . 
        . . e e 2 2 e e . . 
        `, 10, randint(-10, 100))
    護航盾2.x = randint(10, 780)
    護航盾2.setKind(SpriteKind.護航盾)
})
function 護航盾3 () {
    護航盾2 = sprites.createProjectileFromSprite(img`
        . . 5 5 5 5 5 5 . . 
        . 5 5 . . . . 5 5 . 
        5 5 . . . . . . 5 5 
        5 . . . . . . . . 5 
        5 . . . . . . . . 5 
        5 . . . . . . . . 5 
        5 . . . . . . . . 5 
        5 5 . . . . . . 5 5 
        . 5 5 . . . . 5 5 . 
        . . 5 5 5 5 5 5 . . 
        `, 戰機, 0, 0)
    護航盾2.follow(戰機)
    護航盾2.changeScale(3, ScaleAnchor.Middle)
}
sprites.onOverlap(SpriteKind.護航盾, SpriteKind.Enemy, function (sprite, otherSprite) {
    otherSprite.destroy()
    info.changeScoreBy(1)
    pause(200)
    sprite.destroy()
})
sprites.onOverlap(SpriteKind.護航盾, SpriteKind.Player, function (sprite, otherSprite) {
    sprite.destroy()
    sprite.destroy(effects.halo)
    護航盾2()
})

<br>
  

[原官方版本](https://makecode.com/_cX0c1KXU55wJ)
[加強版](https://arcade.makecode.com/S09344-46753-02560-72225)
##### 作者:謝熙智