海底有河豚和水母游來游去,你用方向鍵開一隻鯊魚去追,吃到一隻加 1 分,吃滿 10 隻鯊魚就吃飽了。這次要學會讓角色「自己動起來」:一直換造型變成動畫、碰到邊緣就反彈、每一步隨機轉個彎,看起來就像真的在游泳。
今天要做出來的作品

按下綠旗後:
- 河豚和水母在海裡慢慢游,方向一直在變,游到邊邊會自己轉回來;河豚會眨眼、水母會變色。
- 用 ↑ ↓ ← → 控制鯊魚,嘴巴一開一合。碰到魚就加 1 分,被吃掉的魚會換到別的地方再出現。
- 分數到 10,所有的魚消失,鯊魚說「我吃飽了!」。再按一次綠旗,分數歸零重新玩。
老師上課會先打開
03_海底世界.sb3按一次綠旗,大家一起看成品長什麼樣子。 📥 下載本堂講義 PDF
學習目標
- 會用「造型換成下一個」+「等待」做出一直播放的動畫
- 會用「碰到邊緣就反彈」和「迴轉方式設為 左-右」讓角色在舞台裡來回游
- 會用「右轉(隨機取數)度」做出隨機游動
- 會用「定位到 隨機 位置」讓被吃掉的魚換地方重來
- 知道同一個角色可以有好幾段綠旗程式同時跑
遊戲規則
| 項目 | 規則 |
|---|---|
| 怎麼玩 | 方向鍵控制鯊魚,每按一下走 10 點 |
| 怎麼得分 | 魚碰到鯊魚就加 1 分,那隻魚換到隨機位置 |
| 什麼時候結束 | 分數超過 9(也就是吃到 10 隻),魚全部消失、鯊魚說我吃飽了 |
| 重新開始 | 再按綠旗,分數歸零、魚全部回來 |
步驟 1:準備海底和角色
- 開新專案,刪掉小貓。
- 選個背景 → Underwater 1。
- 選個角色 → Pufferfish,名字改成「河豚」,尺寸 45;Jellyfish,名字改成「水母」,尺寸 40;Shark 2,名字改成「鯊魚」,尺寸 55。
- 點河豚 →「音效」分頁 → 選個音效 → 找 Bubbles 加進去(河豚本來沒有泡泡聲,水母本來就有)。
- 到變數類「建立一個變數」→「分數」,選「適用於所有角色」。

點河豚、切到上面的「造型」分頁看一下:官方的河豚本來就有 4 個長得差不多的造型(眼睛、泡泡不一樣)。
💡 為什麼要先去看造型?動畫就是「很快地換下一張圖」。一個角色有幾個造型、每個長怎樣,決定了換起來像不像在動。河豚 4 個造型只差一點點,換起來就像在眨眼吐泡泡;如果造型差很多(例如 Fish 的 4 個造型是 4 種不同的魚),一直換就會變成魚在「變身」。
步驟 2:舞台——海浪聲

點舞台 → 「音效」分頁 → 選個音效 → 找 Ocean Wave。回程式分頁拼:綠旗 → 背景換成 Underwater 1 → 重複無限次(播放音效 ocean wave 直到結束)。
💡 為什麼用「播放音效直到結束」,不用「播放音效」?「播放音效」一按就往下做,放在重複無限次裡面,一秒會重新開始放 30 次,只會聽到「沙沙沙」的雜音。「直到結束」會等這段海浪聲放完,才進下一圈,聲音才接得起來。
步驟 3:河豚——自己游來游去



第一段(綠旗):顯示 → 定位 → 迴轉方式設為 左-右 → 重複無限次:
- 移動 2 點
- 碰到邊緣就反彈
- 右轉(隨機取數 -15 到 15)度
- 如果 碰到 鯊魚?那麼:分數改變 1 → 播放音效 bubbles → 定位到 隨機 位置
💡 為什麼要「碰到邊緣就反彈」?只有「移動」的話,魚會一直往同一個方向游,游到舞台邊邊就卡住,大半個身體跑出畫面外。反彈會在碰到邊緣時把方向轉回來,魚就會在舞台裡來回游。
💡 為什麼要「迴轉方式設為 左-右」?反彈是把方向轉 180 度,預設的迴轉方式是「不限制」,魚會跟著轉成頭下腳上。設成「左-右」,角色只會朝左或朝右,往回游時是左右翻面,看起來才正常。
💡 為什麼右轉的角度要用「隨機取數 -15 到 15」?固定右轉 15 度,魚會一直原地繞圈圈。用隨機的話,這一步可能往右偏一點、下一步往左偏一點,路線就歪歪扭扭、猜不到,像真的魚在游。數字不要太大,超過 45 度魚會抖來抖去。
💡 為什麼「碰到鯊魚」寫在魚身上,不寫在鯊魚身上?被吃掉之後要「換到隨機位置」的是魚。寫在魚身上,每隻魚自己檢查、自己加分、自己跑走;寫在鯊魚身上,鯊魚還得分辨是哪一隻魚碰到它,程式會變得很複雜。
💡 為什麼吃到後要「定位到 隨機 位置」?如果不換位置,魚還貼在鯊魚身上,下一圈又「碰到鯊魚」,一秒就加 30 分。跑走之後就不會重複加分,也像是一隻新的魚游進來。
步驟 4:河豚——眨眼動畫
第二段(另一個綠旗):重複無限次(造型換成下一個 → 等待 0.3 秒)。

💡 為什麼動畫要另外寫一段,不塞進游泳那段?游泳那段每一圈都要做,不能停;如果把「等待 0.3 秒」放進去,魚就變成每 0.3 秒才走一步,游得一頓一頓的。分成兩段綠旗,兩段會同時跑:一段管游泳、一段管換造型,互不干擾。
💡 為什麼要「等待 0.3 秒」?不等的話,一秒會換 30 次造型,快到看不出在眨眼,只會一直閃。等待的秒數越大,動畫越慢。
第三段:當收到訊息「吃飽了」→ 隱藏 → 停止「這個物件的其它程式」。
💡 為什麼除了隱藏還要停止程式?隱藏只是看不見,游泳那段還在跑,萬一鯊魚剛好經過,看不見的魚還是會被「碰到」、繼續加分。停止其它程式,魚才真的不動了。
步驟 5:複製河豚、改成水母
在角色區的河豚上按右鍵 →「複製」,會多一隻「河豚2」,程式整套跟過去。水母可以用同樣的方法:把河豚的三段程式一段一段拖到角色區的水母身上,就會複製給水母(兩隻都有 bubbles 音效,不用改)。
💡 為什麼第一隻做好再複製?三隻魚的程式一模一樣。先把一隻測試到沒問題再複製,錯誤只要改一次;如果先複製再改,每改一個地方就要改三次,很容易漏掉一隻。
步驟 6:鯊魚——方向鍵、張嘴、吃飽了

- 第一段(綠旗):分數設為 0 → 定位到中間 → 面朝 90 度 → 迴轉方式左-右 → 說出(空白)→ 等待直到 分數 > 9 → 廣播「吃飽了」→ 說出「我吃飽了!」。
- 第二段(綠旗):重複無限次(造型換成 shark2-a → 等 0.3 秒 → 造型換成 shark2-b → 等 0.3 秒),嘴巴一開一合。
- 四段方向鍵:→ 面朝 90 度、移動 10 點;← 面朝 -90 度、移動 10 點;↑ y 改變 10;↓ y 改變 -10。
💡 為什麼分數歸零要寫在綠旗?變數會記住上一次玩的分數。不歸零的話,第二次按綠旗分數一開始就是 10,鯊魚馬上說吃飽了,魚一出來就消失。
💡 為什麼鯊魚要用「造型換成 a/b」而不是「造型換成下一個」?Shark 2 有 3 個造型,第 3 個是另一種姿勢。用「下一個」會輪到第 3 個,嘴巴動一動就突然變形。只在 a、b 兩個之間換,才是乾淨的一開一合。
💡 為什麼左右用「面朝+移動」,上下用「y 改變」?左右時要讓鯊魚轉頭朝向游的方向,面朝就會幫它翻面;上下如果也用「面朝 0 度+移動」,鯊魚的「方向」會變成朝上,要再按一次 ← 或 → 才轉得回來,很容易搞混。用「y 改變」最直接:只動上下、不動方向,鯊魚上浮下潛時頭還是朝著原本那一邊。
💡 為什麼用「等待直到 分數 > 9」?鯊魚不用一直問「吃飽了沒」,這一塊會在原地等,分數一到就往下做。寫「> 9」而不是「= 10」,是怕剛好兩隻魚同一瞬間被吃、分數從 9 直接跳到 11,「= 10」就永遠等不到。
✅ 檢查點:按綠旗,魚會自己游、會轉彎、不會跑出舞台、不會頭下腳上;河豚在眨眼;鯊魚吃到魚加 1 分、魚換位置;吃到 10 隻魚全部消失、鯊魚說我吃飽了;再按綠旗分數回到 0。
步驟 7:存檔
檔案 → 下載到你的電腦,再上傳到 Google Classroom。
💡 線上版 Scratch 沒有登入不會幫你存檔。下課前沒下載,關掉分頁作品就不見了。
收不到、不會動?先查這幾件事
| 狀況 | 多半是 |
|---|---|
| 魚卡在舞台邊邊不動 | 少了「碰到邊緣就反彈」 |
| 魚游回來時頭下腳上 | 少了「迴轉方式設為 左-右」 |
| 魚一直原地繞圈圈 | 右轉用了固定數字,要改成「隨機取數」 |
| 魚游得一頓一頓的 | 「等待」放進了游泳那段,要拆成另一段綠旗 |
| 碰一下分數就狂加 | 吃到後少了「定位到 隨機 位置」,魚還黏在鯊魚身上 |
| 第二次玩一開始就吃飽了 | 綠旗那段少了「分數設為 0」 |
| 吃飽了魚還會被吃、分數還在加 | 收到「吃飽了」只寫了隱藏,少了「停止這個物件的其它程式」 |
| 聽不到海浪聲,只有沙沙聲 | 用了「播放音效」,要改成「播放音效直到結束」 |
換成你自己的(必做)
- ☐ 換掉場景:不一定在海底,可以是草原(貓抓老鼠)、天空(老鷹抓鳥)
- ☐ 換掉角色:被抓的至少 2 種,而且都要有動畫
- ☐ 至少改一條規則:例如要吃幾隻才吃飽、魚游多快、鯊魚一步走多遠
挑戰(做完的人選一題)
- ★ 加一隻不能吃的(例如水母有毒):碰到就扣 2 分。
- ★ 讓鯊魚吃到魚時換到張大嘴的造型,並播放 chomp 音效。
- ★★ 讓魚被吃掉的時候先隱藏 2 秒再出現在隨機位置(舊版做法),想想看為什麼要先隱藏?
- ★★ 加上計時器:30 秒內吃飽才算贏,時間到還沒吃飽就說「時間到!」。
- ★★★ 分數越高,魚游得越快(提示:把「移動 2 點」的 2 換成跟分數有關的算式)。
互看檢查表(兩人互相打勾)
- ☐ 魚會自己游、會轉彎,不會跑出舞台、不會頭下腳上
- ☐ 河豚(或你的角色)有動畫,而且動畫不會讓它游得一頓一頓
- ☐ 鯊魚吃到一隻只加 1 分,吃到 10 隻就結束
- ☐ 再按一次綠旗分數會歸零
- ☐ 說得出:魚身上的程式是什麼意思?(兩段綠旗各在做什麼、為什麼要分開)
- ☐ 說得出:是誰廣播「吃飽了」、誰收到、收到後做了什麼
