這堂要做一隻「會掉下來」的小鳥:按空白鍵往上拍一下翅膀,不按就越掉越快;水管一根一根從右邊飛過來,要從中間的縫鑽過去。讓東西「越掉越快」的秘密,是用一個速度變數假裝地心引力。
今天要做出來的作品

按下綠旗後:
- 小鳥從左邊開始往下掉,按空白鍵就往上飛一下。
- 水管從右邊飛過來,每根的縫高高低低都不一樣。
- 每鑽過一根水管,分數加 1。
- 撞到水管或掉到地上,小鳥說出「遊戲結束!分數:…」,水管全部停住。
老師上課會先打開
10_飛翔小鳥.sb3按一次綠旗,大家一起看成品長什麼樣子。 📥 下載本堂講義 PDF
學習目標
- 會用變數做重力:速度每次減 1,位置每次加上速度
- 會用分身:一個水管角色,生出很多根水管
- 會用「隨機取數」讓每根水管的高度都不一樣
- 複習:廣播「開始」「遊戲結束」管遊戲狀態、重複直到、碰到
遊戲規則
| 項目 | 規則 |
|---|---|
| 操作 | 空白鍵:往上飛一下 |
| 得分 | 每鑽過一根水管 +1 |
| 結束 | 碰到水管,或掉到舞台最下面 |
| 誰喊開始 | 小鳥(綠旗後廣播「開始」) |
| 誰喊結束 | 小鳥(迴圈停下來就廣播「遊戲結束」) |
步驟 1:準備角色和兩個變數

- 開新專案,刪掉小貓。「選個角色」挑 Parrot,名字改成「小鳥」,尺寸改成 35。
- 「選個背景」挑 Blue Sky。
- 到橘色的變數類,按「建立一個變數」,建兩個:分數、速度(都選「適用於所有角色」)。
💡 為什麼要多一個「速度」變數?「y 改變 -5」每次都掉一樣多,看起來像坐電梯,不像在掉。真的東西掉下來是越掉越快的;要讓每次掉的量不一樣,就得把「這次要掉多少」記在一個會變的地方——那就是變數。
💡 為什麼尺寸要改小?鳥太大,縫就要開很大才鑽得過,遊戲就沒挑戰了。角色大小會直接改變遊戲難度。
步驟 2:小鳥的重力和拍翅膀
點角色區的「小鳥」,拼出這三段:

- 綠旗:定位到左邊 → 分數、速度都設為 0 → 廣播「開始」 → 重複直到「碰到水管 或 y 座標 < -165」:速度改變 -1、y 改變(速度)→ 迴圈結束就廣播「遊戲結束」。
- 當空白鍵被按下:速度設為 8、造型換成下一個(拍翅膀)。
- 當收到「遊戲結束」:說出「遊戲結束!分數:」和分數字串組合在一起。
💡 為什麼「速度改變 -1」會變成重力?迴圈每跑一圈,速度就少 1:0、-1、-2、-3……而 y 每圈加上速度,所以一開始只掉 1 點,接著 2 點、3 點,越掉越快。速度管「這一圈移動多少」,y 管「現在在哪裡」,兩個分開記,才做得出加速。
💡 為什麼拍翅膀用「設為 8」,不用「改變 8」?如果小鳥正在快速往下掉(速度 -10),改變 8 只變成 -2,還是在往下掉;設為 8 是直接換成往上飛。真的拍翅膀也是一樣,不管剛才掉多快,拍一下就往上。
💡 為什麼用「重複直到」而不是「重複無限次」?重複直到會自己停,停下來的那一刻就是「撞到了」,下面接一塊「廣播遊戲結束」剛好。用重複無限次的話,還要另外寫一段去判斷什麼時候結束。
💡 為什麼 y 要小於 -165 才算掉到地上?舞台最下面是 -180。小鳥的中心點在身體中間,身體還有一半在下面,所以中心到 -165 時,腳已經碰到地了。
步驟 3:畫水管,用分身生很多根

- 「選個角色」→ 最下面的畫筆(繪畫),名字改成「水管」。
- 在造型頁用矩形畫兩根綠色長條,上面一根、下面一根,中間留一個縫(範例的縫有 160 點高)。
- 把兩根水管一起拖,讓縫的正中間對準畫布中間的十字(造型中心)。
- 回到程式頁,拼出這四段:

- 綠旗:隱藏。
- 當收到「開始」:重複無限次 { 建立自己的分身、等待 2.2 秒 }。
- 當分身產生:定位到 x: 250、y: 隨機(下一步)→ 顯示 → 重複直到 x < -120 { x 改變 -4 } → 分數改變 1 → 重複直到 x < -240 { x 改變 -4 } → 分身刪除。
- 當收到「遊戲結束」:停止「這個物件的其它程式」。
💡 為什麼要用分身,不直接複製 5 個水管角色?複製角色的話,要改速度就得改 5 次,而且畫面上永遠只有那 5 根。分身是程式跑的時候才生出來的,一個角色的程式寫一次,要幾根就生幾根。
💡 為什麼本尊要隱藏?本尊只負責「生分身」,像工廠一樣。它如果顯示在畫面上,就會有一根不會動的水管卡在那裡,小鳥一碰就死。分身一出生就繼承本尊的樣子(隱藏),所以分身要自己「顯示」。
💡 為什麼分數寫在水管,而且切成兩個「重複直到」?小鳥站在 x = -120,水管飛過 -120 的那一刻就是「鑽過去了」。第一個迴圈飛到小鳥那裡、加 1 分,第二個迴圈繼續飛出畫面。每根水管只會經過一次,所以每根只會加 1 分。
💡 為什麼飛出畫面一定要「分身刪除」?沒刪的分身還在,只是看不到。每 2.2 秒生一根,玩一分鐘就有二十幾根在背景跑,電腦會越來越卡,Scratch 最多也只准 300 個分身。
💡 為什麼收到「遊戲結束」要停止「這個物件的其它程式」?本尊和每一根分身都會收到這個廣播:本尊停了就不再生新水管,分身停了就停在原地。整個畫面定格,玩家才看得到自己是撞在哪裡。
步驟 4:隨機高度

把綠色運算類的「隨機取數 1 到 10」拖進分身那段「定位到」的 y 格子,改成 -70 到 70。
💡 為什麼放在「當分身產生」裡面?每根分身出生時都會重新抽一次數字,所以每根的縫高低都不一樣。如果只在綠旗抽一次,全部水管的縫都在同一個高度,一直按同樣的節奏就能玩下去。
💡 為什麼是 -70 到 70,不是 -180 到 180?造型中心是縫的中間,y 設成 150 時縫就跑到天花板旁邊,小鳥要一路從底下衝上去,來不及就撞了。範圍小一點,保證每根都「有機會過」。
✅ 檢查點:按綠旗,不按空白鍵,小鳥會越掉越快、掉到底說「遊戲結束!分數:0」;一直按空白鍵,水管一根一根飛過來、縫的高度都不一樣,鑽過去分數會加 1。
步驟 5:舞台和存檔

點右邊的「舞台」,拼:當綠旗被點擊 → 背景換成 Blue Sky。
💡 為什麼背景也要寫?現在只有一張背景看不出差別;等你加了「開始畫面」「結束畫面」,綠旗先換回遊戲背景,每一局才會從同一個畫面開始。
存檔:檔案 → 下載到你的電腦,再上傳到 Google Classroom。
💡 線上版 Scratch 不會自動幫你存到電腦裡,沒下載就關掉視窗,作品就不見了。
收不到、不會動?先查這幾件事
| 狀況 | 多半是 |
|---|---|
| 小鳥一直等速往下掉,不會加速 | 迴圈裡寫成「y 改變 -1」,沒有放「速度」變數進去 |
| 按空白鍵小鳥不往上 | 寫成「速度改變 8」,或空白鍵那段寫到別的角色 |
| 一按綠旗就結束 | 本尊水管沒隱藏,小鳥一開始就碰到它;或小鳥起點太低 |
| 只有一根水管 | 「建立分身」沒放在重複無限次裡面,或選成別的角色的分身 |
| 水管都在同一個高度 | 隨機取數放在綠旗那段,不是放在「當分身產生」 |
| 分數一次加很多 | 加分的積木放進了「重複直到」迴圈裡面 |
| 越玩越卡 | 分身飛出去之後沒有「分身刪除」 |
| 結束後水管還在跑 | 水管少了「當收到遊戲結束 → 停止這個物件的其它程式」 |
換成你自己的(必做)
- ☐ 換掉小鳥和背景(例如:蜜蜂穿過樹林、潛水艇穿過珊瑚)
- ☐ 水管換成自己畫的障礙物,顏色、形狀都可以改,但縫的中間要對準造型中心
- ☐ 至少改一條規則:重力大小(改變 -1)、拍翅膀力道(設為 8)、縫的大小、水管速度、隨機範圍,選一個改
- ☐ 改完自己玩三次,確定「難但過得去」
挑戰(做完的人選一題)
- ★ 撞到時播放音效,並換成另一個造型(小鳥暈倒)。
- ★★ 分數每到 5 分,水管變快一點(提示:新增變數「水管速度」,x 改變(0 − 水管速度))。
- ★★ 加一個「最高分」變數:遊戲結束時,如果分數 > 最高分,就把最高分設為分數。
- ★★★ 加開始畫面:綠旗先顯示標題,按空白鍵才廣播「開始」(提示:想想綠旗那段的「廣播開始」要搬到哪裡)。
互看檢查表(兩人互相打勾)
- ☐ 不按空白鍵,小鳥是越掉越快,不是等速往下
- ☐ 每根水管的縫高度都不一樣
- ☐ 鑽過一根只加 1 分
- ☐ 撞到後水管全部停住,小鳥說出分數
- ☐ 說得出:速度和 y 座標差在哪裡?為什麼拍翅膀用「設為」不用「改變」?
- ☐ 說得出:是誰廣播「開始」、誰收到後開始生水管
