---
# System prepended metadata

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

---

---
tags: 2022 iThome 鐵人賽 
title: 9/27 Arcade再進化-探索宇宙-射擊遊戲(2)
AUTHOR: 謝熙智
---

# 第二章：增加回血功能、增加扣分機制、改變場景大小
[官方原始版本](https://makecode.com/_cX0c1KXU55wJ)
[進化版本](https://makecode.com/_WozWp3FdE3zt)

## 以下是使用積木為例
### 第一部分:增加回血功能
> 可以消耗10分，增加一條命。只要分數大於10分，按下B鍵即可回血。

1. 選取 控制器 裡的 當A鍵被按住 並將A改成B
   ![](https://i.imgur.com/vPoo4vE.png)
   
   ![](https://i.imgur.com/DoqUcaI.png)
   
2. 選取 邏輯 裡的 如果True那麼 並按下下方的 + 字號
   ![](https://i.imgur.com/fFxVrM6.png)
   
   ![](https://i.imgur.com/xzrYjMZ.png)
   
   ![](https://i.imgur.com/TEX6QbU.png)
   
3. 選取 邏輯 裡的 且 0大於0 0小於0 並將 0大於0 0小於0 分別放於 且 的前後
   ![](https://i.imgur.com/YKCAVf4.png)
   
   ![](https://i.imgur.com/1MOIifl.png)
   
4. 選取 資訊 裡的 生命和得分
   ![](https://i.imgur.com/jrhK520.png)
   
5. 將 得分和生命 放於 0大於0 0小於0 的第一格中 
   ![](https://i.imgur.com/un8MQM5.png)
   
6. 將 0大於0 0小於0 的第二格中0 分別改成10跟5
   ![](https://i.imgur.com/D1ZRNF8.png)
   
7. 選取 資訊 裡的 生命改變和得分改變 個複製一次 分別放於 如果 否則
   ![](https://i.imgur.com/3Jy2qVw.png)
   
   ![](https://i.imgur.com/Nt4rdCY.png)
   
8. 將 如果 裡的 生命改變:1 得分改變:-10 否則 裡的 不變
   ![](https://i.imgur.com/BpCjYhE.png)
   
   
### 第二部分:增加扣分機制
> 戰機碰到隕石，除了損血還會扣分。最低扣到0分。
1. 選取 邏輯 裡的 如果True那麼 否則 放在 當角色sprite類別player
   ![](https://i.imgur.com/fFxVrM6.png)
   
   ![](https://i.imgur.com/IruItFi.png)
   
2. 選取 邏輯 裡的 0=0 並改成大於 放在True
   ![](https://i.imgur.com/jYy9Zwm.png)
   
3. 選取 資訊 裡的 得分改變 放在 那麼 並把數字0改成-1
   ![](https://i.imgur.com/4u2YTOS.png)
   
4. 選取 資訊 裡的 得分 放在 0大於0 的第一格
   ![](https://i.imgur.com/jT9wnwX.png)
   
5. 選取 資訊 裡的 得分改變 放在 否則 數字不改
   ![](https://i.imgur.com/9L5uxxp.png)
   
   
### 第三部分:改變場景大小
> 因場景加大，隕石生成不夠快，戰機也飛太慢，因此需要一併修改。
> 
1. 選取 場景 裡的 貼圖地圖 並放在 當啟動時
   ![](https://i.imgur.com/IqucBgl.png)

2. 將左下角的 寬:16 長:16 改為 寬:50 長:50
   ![](https://i.imgur.com/Vl9GnGA.png)

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

3. 將圖全用成黑色
   ![](https://i.imgur.com/uyxjplJ.png)

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

4. 刪除 將飛船下面 設為120
   ![](https://i.imgur.com/dW5SusY.png)

5. 選取 角色 裡的 角色mysprite的位置 X:0 Y:0 並改成 飛船 
   ![](https://i.imgur.com/GTnDIFK.png)
   
   ![](https://i.imgur.com/5P3kVwP.png)

6. 選取 數學 裡的 0x0 並複製 分別放入 X Y
   ![](https://i.imgur.com/2qwr5W7.png)

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

7. 選取 場景 裡的 畫面寬度、高度 分別放於第一格 0 中
   ![](https://i.imgur.com/BJWB9xI.png)
   
   ![](https://i.imgur.com/e7h6Ztw.png)

8. 改變 第二格 0 畫面寬度x2.5 畫面高度x3.3
   ![](https://i.imgur.com/NFfBTfM.png)

9. 更改 當遊戲更新間格 1000到1500毫秒 改成 350到500
   ![](https://i.imgur.com/9bchUB7.png)

10. 更改 當遊戲更新間格 500毫秒 改成 100
    ![](https://i.imgur.com/6kxhm1Y.png)

11. 更改 將子彈X設為 隨機10到780
    ![](https://i.imgur.com/RqVN6Yy.png)

12. 更改 控制器移動角色飛船速度 X:150 Y:150
    ![](https://i.imgur.com/AVH2RH4.png)

## 以下是使用JAVASCRIPT來做 

```javascript=
### 第一部分:增加回血功能
controller.B.onEvent(ControllerButtonEvent.Pressed, function () {
    if (info.score() > 10 && info.life() < 5) {
        info.changeLifeBy(1)
        info.changeScoreBy(-10)
    } else {
        info.changeLifeBy(0)
        info.changeScoreBy(0)
    }
})
### 第二部分:增加扣分機制
sprites.onOverlap(SpriteKind.Player, SpriteKind.Enemy, function (sprite, otherSprite) {
    scene.cameraShake(4, 500)
    otherSprite.destroy(effects.disintegrate)
    sprite.startEffect(effects.fire, 200)
    info.changeLifeBy(-1)
    if (info.score() > 0) {
        info.changeScoreBy(-1)
    } else {
        info.setScore(0)
    }
})

### 第三部分:改變場景大小(並更改隕石生成速度 飛船速度)
飛船 = sprites.create(sprites.space.spaceRedShip, SpriteKind.Player)
飛船.setPosition(scene.screenWidth() * 2.5, scene.screenHeight() * 3.3)
controller.moveSprite(飛船, 150, 150)
info.setLife(3)
info.setScore(0)
飛船.setStayInScreen(true)
effects.starField.startScreenEffect()
scene.cameraFollowSprite(飛船)
tiles.setCurrentTilemap(tilemap`層級5`)
game.onUpdateInterval(randint(350, 500), function () {
    子彈 = sprites.createProjectileFromSide(殞石[randint(0, 殞石.length - 1)], 10, randint(-10, 100))
    子彈.x = randint(10, 780)
    子彈.setKind(SpriteKind.Enemy)
})
game.onUpdateInterval(100, function () {
    子彈 = sprites.createProjectileFromSide(殞石[randint(0, 殞石.length - 1)], 0, 75)
    子彈.x = randint(10, 780)
    子彈.setKind(SpriteKind.Enemy)
})
