🎮 C05b 打磚塊遊戲 2

進階版 - 物理反彈與遊戲流程完整實作

📚 第一章:準備工作

🎯 本週目標

這週我們要在上週的基礎上,加入更多進階功能:

  • 完整的遊戲流程(開始、進行、成功、失敗)
  • 物理反彈角度計算(入射角 = 反射角)
  • 角色的顯示與隱藏控制
  • 音效與背景切換

步驟 1:登入 Scratch 帳號

  1. 前往 https://scratch.mit.edu
  2. 使用你的帳號密碼登入
  3. 進入「我的作品」頁面
Scratch 我的作品頁面

Scratch 我的作品頁面示意圖

步驟 2:打開上週的檔案

  1. 找到上週完成的打磚塊遊戲專案
  2. 檔名應該是:你的學號-5
  3. 點擊「查看內部」開啟專案
  4. 確認上週的功能都正常運作:
    • ✓ 磚塊已經可以生成 4×4 排列
    • ✓ 分身碰撞偵測正常
    • ✓ 分數可以正確累加

⚠️ 給上週沒來的同學

如果你上週沒來,請先完成上週的進度:

  1. 請教旁邊的同學,了解上週做了什麼
  2. 參考 C05 打磚塊遊戲(基礎版) 講義
  3. 至少要完成以下功能才能繼續本週課程:
    • 建立分數變數
    • 磚塊分身生成(4×4 排列)
    • 磚塊碰撞偵測與刪除
💡 準備檢查清單:
  • ☐ 已登入 Scratch 帳號
  • ☐ 已打開上週的專案
  • ☐ 確認上週功能正常
  • ☐ 準備好開始本週的課程

🛠️ 第二章:開始製作

本章節我們將一步步完成遊戲的各項功能,請按照順序操作。

1️⃣ 背景切換

準備背景

我們需要準備 4 個不同的背景:

  1. 背景 1:遊戲說明文字(包含班級、座號、姓名)
  2. 背景 2:遊戲畫面(實際進行遊戲的背景)
  3. 背景 3:闖關失敗(球掉落時顯示)
  4. 背景 4:闖關成功(打破所有磚塊時顯示)
💡 背景製作技巧:
  • 可以使用 Scratch 內建背景,再加上文字
  • 或是用繪圖工具自己設計
  • 確保文字清晰可讀
  • 顏色要有足夠對比度

舞台程式:按綠旗顯示說明

綠旗 被點擊
切換背景到 背景1(遊戲說明)

說明:遊戲一開始先顯示遊戲說明背景。

舞台程式:按空白鍵開始遊戲

空白鍵 被按下
切換背景到 背景2(遊戲畫面)

說明:按下空白鍵後,切換到遊戲畫面,並開始遊戲(磚塊會自動生成)。

2️⃣ 球拍控制

球拍程式:隨滑鼠左右移動

空白鍵 被按下
重複無限次
將 x 設為 滑鼠的 x 座標

說明:按下空白鍵後,球拍開始跟隨滑鼠的 X 座標左右移動。

💡 提示:
  • 球拍的 Y 座標應該已經在上週設定好了(通常在 -150 左右)
  • 如果球拍會上下移動,確認只設定 X 座標,不要改變 Y 座標
  • 確保球拍的中心點設定在正中央

3️⃣ 球的運動

球程式:完整運動邏輯

空白鍵 被按下
定位到 x:0 y:0
面向 隨機取數 110 到 170
等待 1
重複無限次
移動 20
碰到邊緣就反彈
如果 碰到停止線 那麼
切換背景到 背景3(闖關失敗)
停止 全部程式
否則如果 碰到 球拍 或 碰到 磚塊 那麼
等待 0.02
面向 180 - 方向
播放音效 pop

📝 程式碼解析

  • 定位到 (0, 0):球的初始位置在舞台中央
  • 面向隨機 110-170 度:讓球以隨機角度往下掉(增加遊戲變化)
  • 等待 1 秒:給玩家準備時間
  • 移動 20 點:球的速度(數字越大越快)
  • 碰到邊緣就反彈:球碰到舞台邊緣會反彈
  • 碰到紅色:停止線,遊戲失敗
  • 碰到球拍或磚塊:使用物理反彈公式

⚠️ 重要:停止線設置

在背景 2(遊戲畫面)的底部畫一條紅色的線:

  1. 點選背景 2
  2. 使用繪圖工具
  3. 選擇紅色(使用滴管確保是純紅色)
  4. 在舞台底部畫一條橫線
  5. 位置大約在 Y = -170 左右

4️⃣ 入射角與反射角介紹

🎯 物理反彈原理

在物理學中,當球碰到平面時,入射角 = 反射角

球打到球拍

反彈角度 = 180° - θ

θ → 180° - θ

例如:如果球以 45° 撞擊球拍
反彈角度 = 180° - 45° = 135°

球打到磚塊

反彈角度 = 180° - θ

θ → 180° - θ

例如:如果球以 60° 撞擊磚塊
反彈角度 = 180° - 60° = 120°

球打到球拍的反射角示意圖

球打到球拍的反射角示意圖

球打到磚塊的反射角示意圖

球打到磚塊的反射角示意圖

🧮 Scratch 角度系統說明

Scratch 的角度是以「方向」來表示的:

  • 0°:向上 ↑
  • 90°:向右 →
  • 180°:向下 ↓
  • -90° 或 270°:向左 ←
反彈公式:面向 (180 - 方向) 度

在 Scratch 中,「方向」積木會回傳角色目前面對的角度。
所以「180 - 方向」就是物理反彈的計算公式!

程式碼:反彈效果

如果 碰到 球拍?或 碰到 磚塊? 那麼
面向 180 - 方向
播放音效 pop

說明:球碰到球拍或磚塊時,計算反彈角度並播放音效。

5️⃣ 得分過關以及停止程式

球程式:過關判定

空白鍵 被按下
重複無限次
如果 分數 = 16 那麼
切換背景到 背景4(闖關成功)
停止 全部程式

說明:當分數達到 16 分(所有磚塊都被打破),切換到成功背景並停止遊戲。

💡 提示:
  • 這個程式要獨立寫在「球」角色中
  • 會一直偵測分數是否達到 16
  • 可以在背景 4 加入慶祝動畫或文字

6️⃣ 角色隱藏與顯示

🎭 為什麼需要控制顯示?

在遊戲說明畫面(背景 1)時,我們不希望看到球拍、球和磚塊,所以需要控制角色的顯示與隱藏。

所有角色都要加入的程式

球拍、球、磚塊這三個角色中,都要加入以下程式:

綠旗 被點擊
隱藏
空白鍵 被按下
顯示

說明:

  • 按綠旗時,所有遊戲角色隱藏(只顯示背景 1)
  • 按空白鍵時,所有遊戲角色顯示(開始遊戲)

⚠️ 注意:磚塊的特殊處理

磚塊角色比較特別,因為它使用分身系統:

  • 磚塊本尊要加上「按綠旗隱藏」和「按空白鍵隱藏」
  • 因為我們要看到的是分身,不是本尊
  • 分身的顯示已經在「當分身產生」程式中處理了

✅ 完成檢查

確認以下項目都已完成:

  • ☐ 準備好 4 個背景(說明、遊戲、失敗、成功)
  • ☐ 按綠旗顯示遊戲說明背景
  • ☐ 按空白鍵切換到遊戲背景並生成磚塊
  • ☐ 球拍可以隨滑鼠左右移動
  • ☐ 球會以隨機角度往下掉
  • ☐ 球碰到紅線會切換到失敗背景並停止
  • ☐ 球碰到球拍或磚塊會以正確角度反彈
  • ☐ 分數達到 16 會切換到成功背景
  • ☐ 所有角色在說明畫面時隱藏,遊戲開始時顯示

⭐ 加分題挑戰

🏆 進階挑戰

完成基本功能後,可以挑戰以下加分項目來提升遊戲難度和豐富度!

加分題 1:磚塊增加為 8×4(32 個)⭐⭐

修改磚塊生成程式

將原本的 4×4 磚塊陣列改為 8×4,讓遊戲更有挑戰性。

空白鍵 被按下
將 分數 設為 0
重複 4
重複 8
建立自己的分身

⚠️ 注意事項

  • 內層迴圈改為「重複 8 次」(原本是 4 次)
  • 磚塊的 X 座標間距可能需要調整(例如改為 60 點)
  • 過關分數要改為 32 分(原本是 16 分)
  • 可能需要調整磚塊的大小以適應舞台
💡 建議調整:
  • 如果磚塊太擠,可以將間距從 100 改為 60-70
  • 起始 X 座標可能需要調整(例如從 -210 開始)
  • 磚塊角色可以縮小到 80% 左右

加分題 2:速度變數與動態難度 ⭐⭐⭐⭐

步驟 1:建立速度變數

在球角色中建立一個區域變數「速度

建立變數 速度(僅適用於此角色)

步驟 2:設定初始速度

在遊戲開始時,將速度設為初始值

空白鍵 被按下
將 速度 設為 10
定位到 x:0 y:0
面向 隨機取數 110 到 170
等待 1

步驟 3:使用速度變數控制球的移動

將原本固定的移動點數改為使用速度變數

重複無限次
移動 速度
碰到邊緣就反彈

步驟 4:每少 8 塊磚塊就加速

偵測分數變化,當打破一定數量的磚塊後增加速度

空白鍵 被按下
重複無限次
如果 分數 = 8 那麼
將 速度 改變 3
如果 分數 = 16 那麼
將 速度 改變 3
如果 分數 = 24 那麼
將 速度 改變 3

說明:當分數達到 8、16、24 時,速度各增加 3 點,讓遊戲越來越難。

🎮 速度變化效果

  • 0-7 分:速度 = 10(基礎速度)
  • 8-15 分:速度 = 13(稍微加快)
  • 16-23 分:速度 = 16(更快了)
  • 24-32 分:速度 = 19(挑戰難度!)

⚠️ 進階技巧(選用)

也可以使用數學運算來自動計算速度變化:

如果 (分數 除以 8) 的餘數 = 0 那麼
將 速度 設為 10 + (分數 ÷ 8 × 3)

這樣就不用寫很多個 if 判斷了!

✨ 加分題完成效果

  • ✓ 遊戲變得更長,更有挑戰性(32 個磚塊)
  • ✓ 難度漸進式提升,越後面越難
  • ✓ 玩家需要更快的反應速度
  • ✓ 增加遊戲的刺激感和重玩性

🎓 總結與測試

遊戲流程測試

  1. 按下綠旗:
    • 應該只看到背景 1(遊戲說明)
    • 看不到球拍、球、磚塊
  2. 按下空白鍵:
    • 切換到背景 2(遊戲畫面)
    • 磚塊生成 4×4 排列
    • 球拍、球都顯示出來
    • 球等待 1 秒後開始移動
  3. 遊戲進行中:
    • 球拍跟隨滑鼠移動
    • 球會反彈(碰到邊緣、球拍、磚塊)
    • 打到磚塊會加分並消失
    • 有反彈音效
  4. 遊戲結束:
    • 球掉落碰到紅線 → 背景 3(失敗)
    • 或分數達到 16 → 背景 4(成功)
    • 遊戲停止

🎯 本週學習重點

  • 物理反彈:理解並應用 180° - θ 的反彈公式
  • 遊戲流程:完整的開始、進行、成功、失敗流程
  • 角色控制:使用隱藏/顯示控制遊戲畫面
  • 條件判斷:偵測不同情況並做出對應反應
  • 音效運用:增加遊戲的趣味性

💡 進階挑戰(選做)

  • 調整球的速度,讓遊戲更有挑戰性
  • 加入生命值系統(3 次機會)
  • 製作多個關卡(不同的磚塊排列)
  • 加入特殊磚塊(需要打兩次才會消失)
  • 記錄最高分數
  • 加入背景音樂

⚠️ 常見問題解決

  • 球穿過球拍:球的速度太快,減少移動的點數(改為 10-15)
  • 球不會反彈:檢查「180 - 方向」的積木是否正確放置
  • 磚塊沒有顯示:確認分身產生時有加「顯示」指令
  • 過關判定沒反應:檢查分數變數是否正確累加
  • 紅線沒反應:使用滴管工具確保顏色一致

✨ 完成作品

恭喜你完成了完整的打磚塊遊戲!這個專案涵蓋了:

  • ✓ 變數與分身系統
  • ✓ 碰撞偵測與物理運算
  • ✓ 遊戲流程控制
  • ✓ 音效與視覺效果

記得將作品命名為:你的學號-5b,並繳交至 Classroom!

🎓 課程結束

你已經掌握了 Scratch 遊戲開發的核心技能!

© 2024 銘傳資科 - Scratch 程式設計課程