---
tags: 2022 iThome 鐵人賽
title: 9/27 Arcade再進化-探索宇宙-射擊遊戲(2)
AUTHOR: 謝熙智
---
# 第二章:增加回血功能、增加扣分機制、改變場景大小
[官方原始版本](https://makecode.com/_cX0c1KXU55wJ)
[進化版本](https://makecode.com/_WozWp3FdE3zt)
## 以下是使用積木為例
### 第一部分:增加回血功能
> 可以消耗10分,增加一條命。只要分數大於10分,按下B鍵即可回血。
1. 選取 控制器 裡的 當A鍵被按住 並將A改成B


2. 選取 邏輯 裡的 如果True那麼 並按下下方的 + 字號



3. 選取 邏輯 裡的 且 0大於0 0小於0 並將 0大於0 0小於0 分別放於 且 的前後


4. 選取 資訊 裡的 生命和得分

5. 將 得分和生命 放於 0大於0 0小於0 的第一格中

6. 將 0大於0 0小於0 的第二格中0 分別改成10跟5

7. 選取 資訊 裡的 生命改變和得分改變 個複製一次 分別放於 如果 否則


8. 將 如果 裡的 生命改變:1 得分改變:-10 否則 裡的 不變

### 第二部分:增加扣分機制
> 戰機碰到隕石,除了損血還會扣分。最低扣到0分。
1. 選取 邏輯 裡的 如果True那麼 否則 放在 當角色sprite類別player


2. 選取 邏輯 裡的 0=0 並改成大於 放在True

3. 選取 資訊 裡的 得分改變 放在 那麼 並把數字0改成-1

4. 選取 資訊 裡的 得分 放在 0大於0 的第一格

5. 選取 資訊 裡的 得分改變 放在 否則 數字不改

### 第三部分:改變場景大小
> 因場景加大,隕石生成不夠快,戰機也飛太慢,因此需要一併修改。
>
1. 選取 場景 裡的 貼圖地圖 並放在 當啟動時

2. 將左下角的 寬:16 長:16 改為 寬:50 長:50


3. 將圖全用成黑色


4. 刪除 將飛船下面 設為120

5. 選取 角色 裡的 角色mysprite的位置 X:0 Y:0 並改成 飛船


6. 選取 數學 裡的 0x0 並複製 分別放入 X Y


7. 選取 場景 裡的 畫面寬度、高度 分別放於第一格 0 中


8. 改變 第二格 0 畫面寬度x2.5 畫面高度x3.3

9. 更改 當遊戲更新間格 1000到1500毫秒 改成 350到500

10. 更改 當遊戲更新間格 500毫秒 改成 100

11. 更改 將子彈X設為 隨機10到780

12. 更改 控制器移動角色飛船速度 X:150 Y:150

## 以下是使用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)
})