太空裡下起了隕石雨!用左右鍵開著火箭躲開,每躲過一顆加 1 分,被打到就少 1 條命,3 條命用完遊戲結束。而且分數越高,隕石掉得越快——這堂要學的就是讓遊戲「自己變難」。

今天要做出來的作品

執行結果:躲隕石、越來越快、被打到、遊戲結束四個畫面

按下綠旗後:

  1. 隕石一顆一顆從上面隨機的位置掉下來,用 ← → 讓火箭躲開。
  2. 分數越高,速度越大,隕石掉得越快。
  3. 被打到,火箭說「好痛!」,生命少 1。
  4. 生命變成 0,火箭說出「遊戲結束!分數:…」,隕石全部停住。

老師上課會先打開 11_躲隕石.sb3 按一次綠旗,大家一起看成品長什麼樣子。 📥 下載本堂講義 PDF

學習目標

  • 會做生命值:用變數記剩幾條命,扣完才結束
  • 會讓難度隨分數變快:速度=3+分數 / 5
  • 會用運算積木做「減法」「除法」「加法」
  • 複習:分身、隨機位置、廣播「開始」「被打到」「遊戲結束」

遊戲規則

項目規則
操作← →:火箭左右移動
得分隕石掉到最下面(躲過了)+1
生命一開始 3 條,被打到 -1
難度每躲過一顆,速度重新算:3+分數 / 5(/ 是除號)
結束生命小於 1

步驟 1:準備角色和三個變數

變數類:建立變數、設為、改變
  1. 開新專案,刪掉小貓。「選個角色」挑 Rocketship,名字改成「火箭」,尺寸 35
  2. 「選個背景」挑 Stars
  3. 用畫筆畫一顆「隕石」(圓形石頭,上面加一點火焰),或從素材庫挑 Rocks 也可以。
  4. 建三個變數:分數生命速度

💡 為什麼「生命」要用變數,不直接被打到就結束?一碰就死,玩的人一不小心就沒了,沒機會學會怎麼躲。有 3 條命,玩家可以失誤兩次,遊戲比較有「差一點點」的刺激感。命有幾條,要記在一個會變的地方,所以是變數。

💡 為什麼速度也要做成變數?隕石往下掉多快如果寫死成「y 改變 -3」,就永遠一樣快。把 3 換成「速度」變數,只要改變數,所有隕石就一起變快。

步驟 2:火箭的程式

點角色區的「火箭」:

火箭的程式:綠旗設定變數、左右鍵、收到被打到、收到遊戲結束
  • 綠旗:定位到 (0, -130) → 分數設為 0、生命設為 3、速度設為 3 → 廣播「開始」
  • 當「向左」鍵被按下:x 改變 -25;當「向右」鍵被按下:x 改變 25。
  • 當收到「被打到」:如果 生命 < 1 → 廣播「遊戲結束」;否則 → 說出「好痛!」0.5 秒。
  • 當收到「遊戲結束」:說出「遊戲結束!分數:」和分數組合起來。

💡 為什麼三個變數都要在綠旗重設?變數會記住上一局的值。沒有重設,第二局一開始生命就是 0、速度還是上一局最快的速度,一開始就結束了。

💡 為什麼「檢查還有沒有命」寫在火箭,不寫在隕石?被打到是很多顆隕石都可能發生的事,但「還剩幾條命、要不要結束」只該有一個人判斷。隕石只負責喊「被打到」,火箭收到後統一檢查——就像裁判只有一個。

💡 為什麼用「如果…否則」?沒命了就說遊戲結束,還有命才喊好痛。如果兩個都做,「好痛!」的泡泡 0.5 秒後消失時,會把「遊戲結束」的字一起蓋掉。

步驟 3:隕石的程式(分身+隨機位置)

隕石的程式:綠旗隱藏、收到開始生分身、當分身產生往下掉、收到遊戲結束停住
  • 綠旗:隱藏。
  • 當收到「開始」:重複直到 生命 < 1 { 建立自己的分身、等待 0.6 秒 }。
  • 當分身產生:定位到 x: 隨機取數 -220 到 220、y: 170 → 顯示 → 重複直到「碰到火箭 或 y < -170」{ y 改變(0 − 速度)} → 如果 碰到火箭 { 生命改變 -1、廣播「被打到」} 否則 { 分數改變 1、速度設為(3 +(分數 / 5))} → 分身刪除。
  • 當收到「遊戲結束」:停止「這個物件的其它程式」。

💡 為什麼是 y 改變(0 − 速度)?速度是 3、4、5 這種正數,但往下掉要讓 y 變小。0 減速度就變成 -3、-4、-5,速度越大,掉得越快。

💡 為什麼碰到火箭之後要馬上「分身刪除」?分身如果還留著,下一格它還是碰著火箭,就會再扣一次命——一顆隕石扣光三條命。打到一次就刪掉,一顆只扣一次。

💡 為什麼生分身的迴圈用「重複直到 生命 < 1」?命用完了就不用再生隕石。用重複無限次的話,遊戲結束後隕石還會一直掉下來。

步驟 4:分數越高,隕石越快

運算類:加、減、除和小於

在隕石分身的「否則」裡,拼出:速度 設為 (3 +(分數 / 5))。Scratch 的除號是斜線「/」,乘號是「*」。先拖「+」,左邊打 3,右邊再放「/」,/ 的左邊放「分數」、右邊打 5。

分數速度
03
54
105
207

💡 為什麼不用「速度改變 1」?每躲一顆加 1 的話,躲 10 顆速度就變 13,快到根本躲不了。用公式算,分數每多 5 分速度才多 1,難度是慢慢爬上去的;想要變難快一點,只要把 5 改成 3。

💡 為什麼公式要寫在「躲過加分」之後?分數剛改變的那一刻重算速度,下一顆隕石就用新的速度。寫在綠旗只會算一次,分數怎麼漲速度都不會變。

💡 為什麼 / 要放在 + 的裡面?Scratch 是從最裡面那塊先算:先算 分數 / 5,再加 3。如果反過來把 + 放在 / 裡面,會變成(3+分數)/ 5,分數 0 時速度只有 0.6,隕石幾乎不動。

✅ 檢查點:按綠旗,躲過幾顆後看「速度」變數有沒有變大;故意被打三次,生命變 0 時要說「遊戲結束!分數:…」,隕石全部停住、不再掉新的。

步驟 5:舞台和存檔

舞台的程式:綠旗換成 Stars

舞台:當綠旗被點擊 → 背景換成 Stars。

存檔:檔案 → 下載到你的電腦,再上傳到 Google Classroom。

💡 為什麼一定要下載?線上版 Scratch 不會自動存到你的電腦,關掉視窗作品就不見了。

收不到、不會動?先查這幾件事

狀況多半是
被一顆隕石打到就扣光命碰到火箭後沒有「分身刪除」
生命是 0 還不結束火箭的「被打到」那段寫成「生命 = 0」,但同時被兩顆打到變成 -1 就不等於 0 了;改用「< 1」
隕石往上飛寫成 y 改變(速度),少了「0 −」
速度一直是 3公式放在綠旗;或「否則」和「如果」放反了
第二局一開始就結束綠旗沒把生命設回 3
結束後隕石還一直掉生分身的迴圈用了重複無限次,或少了「收到遊戲結束 → 停止」

換成你自己的(必做)

  • ☐ 換掉火箭、隕石和背景(例如:接便當的學生躲雨滴、小魚躲漁網)
  • ☐ 改一條難度規則:一開始的速度、公式裡的 5、生分身的等待秒數,選一個改
  • ☐ 生命改成你覺得剛好的數量,並說出為什麼
  • ☐ 自己玩三次,最高分寫在程式區的註解裡

挑戰(做完的人選一題)

  • ★ 被打到時火箭閃一下(圖像效果「幽靈」設為 50,等 0.2 秒再清除)。
  • ★★ 加一種「愛心」分身,接到生命 +1,但生命最多 3。
  • ★★ 生分身的等待秒數也隨分數變短(提示:等待(1 − 分數 / 50),但不能小於 0.2)。
  • ★★★ 每 10 分換一張背景,並讓火箭說「第 2 關!」(提示:如果 分數 = 10 → 廣播「第二關」)。

互看檢查表(兩人互相打勾)

  • ☐ 一顆隕石只扣 1 條命
  • ☐ 玩久一點,隕石真的越掉越快
  • ☐ 生命用完才結束,結束後不再掉隕石
  • ☐ 第二次按綠旗,分數、生命、速度都回到起始值
  • ☐ 說得出:速度的公式是什麼?分數 10 分時速度是多少?
  • ☐ 說得出:是廣播「被打到」、收到後決定要不要結束