🎮 C05 打磚塊遊戲

Scratch 遊戲開發與物理碰撞系統教學

🎯 第一章:課程介紹與打磚塊遊戲概念

🎮 經典打磚塊遊戲

打磚塊(Breakout)是一個經典的街機遊戲,玩家控制底部的擋板,讓球彈跳來擊破上方的磚塊

📷

打磚塊遊戲示意圖

建議尺寸:800x600像素

顯示:球、擋板、磚塊、分數等遊戲元素

🎲 遊戲規則

基本玩法

  • 玩家控制底部的擋板左右移動
  • 球會在場地內彈跳,碰到擋板會反彈
  • 球碰到磚塊時,磚塊消失並得分
  • 球掉到底部時失去一條生命
  • 消除所有磚塊即可過關

🎯 學習目標

完成本課程後,你將學會:

  • 📐 物理碰撞系統:理解碰撞檢測原理
  • 🎮 遊戲控制:鍵盤控制和滑鼠控制
  • 🎨 動畫效果:球的彈跳和磚塊消失效果
  • 📊 遊戲狀態管理:分數、生命、關卡系統
  • 🔧 程式架構:模組化遊戲開發

💡 核心概念

🏓 碰撞檢測

檢測球與其他物件的碰撞

📐 角度計算

計算球的反彈角度

🎯 座標系統

理解X、Y座標的運用

⚡ 物理模擬

模擬真實的物理運動

🛠️ 第二章:準備工作與遊戲場景設計

📋 開發清單

步驟一:建立新專案

  1. 開啟 Scratch 編輯器
  2. 刪除預設的貓咪角色
  3. 設定舞台背景為深色(建議黑色或深藍色)
  4. 將專案命名為「打磚塊遊戲」
📷

Scratch 編輯器介面

建議尺寸:900x600像素

標注:創作按鈕、角色區、程式區、舞台區

🎨 角色設計

🏓 球(Ball)

圓形,直徑約20像素
顏色:白色或亮色

🏒 擋板(Paddle)

長方形,寬80像素,高15像素
顏色:藍色或綠色

🧱 磚塊(Brick)

長方形,寬60像素,高20像素
多種顏色:紅、橙、黃、綠、藍

🏆 分數顯示

文字角色
顯示當前分數和生命數

🎯 角色建立步驟

建立球角色

當 🏁 被點擊 定位到 x: 0 y: 0 設定大小為 50% 顯示

💡 提示:使用繪圖工具畫一個白色圓形,或從角色庫選擇球類角色

建立擋板角色

當 🏁 被點擊 定位到 x: 0 y: -150 設定大小為 100% 顯示

💡 提示:畫一個長方形,寬度約為舞台的1/6

建立磚塊角色

當 🏁 被點擊 重複 5 次 重複 8 次 複製自己 改變 x 座標 60 結束 改變 y 座標 -25 設定 x 座標為 -210 結束

💡 提示:建立一個磚塊後,用程式自動複製成網格狀

⚠️ 注意事項

  • 確保所有角色的中心點都設定正確
  • 磚塊的顏色可以用變數控制,增加視覺豐富度
  • 角色大小要適合舞台比例

🎮 第三章:遊戲元素與基本控制

🕹️ 擋板控制系統

鍵盤控制

當 🏁 被點擊 重複無限次 如果 <按下 左箭頭 鍵?> 那麼 如果 -200> 那麼 改變 x 座標 -8 結束 結束 如果 <按下 右箭頭 鍵?> 那麼 如果 那麼 改變 x 座標 8 結束 結束 結束

滑鼠控制(進階版)

當 🏁 被點擊 重複無限次 設定 x 座標為 <滑鼠的 x 座標> 如果 200> 那麼 設定 x 座標為 200 結束 如果 那麼 設定 x 座標為 -200 結束 結束

⚽ 球的運動系統

🔬 物理運動原理

球的運動由速度向量控制,包含X方向和Y方向的分量

X方向速度

控制球的左右移動
正值向右,負值向左

Y方向速度

控制球的上下移動
正值向上,負值向下

建立速度變數

建立變數 球速度X 建立變數 球速度Y 建立變數 遊戲狀態 建立變數 分數 建立變數 生命

球的基本運動

當 🏁 被點擊 設定 球速度X 為 5 設定 球速度Y 為 5 設定 分數 為 0 設定 生命 為 3 定位到 x: 0 y: 0 重複無限次 改變 x 座標 <球速度X> 改變 y 座標 <球速度Y> // 邊界碰撞檢測 如果 220 或 x座標 < -220> 那麼 設定 球速度X 為 <球速度X * -1> 結束 如果 160> 那麼 設定 球速度Y 為 <球速度Y * -1> 結束 結束

🎯 基本碰撞系統

擋板碰撞

// 在球的運動迴圈中加入 如果 <碰到 擋板?> 那麼 設定 球速度Y 為 <球速度Y * -1> // 根據碰撞位置調整角度 設定 球速度X 為 <(x座標 - 擋板的x座標) / 10> 播放音效 pop 結束

🔧 碰撞檢測技巧

  • 使用「碰到顏色」可以更精確的碰撞檢測
  • 在碰撞後稍微移動球,避免重複觸發
  • 可以加入音效增加遊戲體驗
📷

碰撞檢測示意圖

建議尺寸:600x400像素

顯示:球與擋板碰撞的瞬間,標注碰撞點和反彈角度

⚡ 第四章:物理系統與碰撞檢測

🔬 碰撞檢測原理

碰撞檢測的類型

🏓 擋板碰撞

球碰到擋板時反彈
可根據碰撞位置調整角度

🧱 磚塊碰撞

球碰到磚塊時
磚塊消失,球反彈

🏠 邊界碰撞

球碰到舞台邊界時
改變移動方向

💀 底部碰撞

球掉到底部時
失去生命,重新開始

🎯 進階碰撞系統

磚塊碰撞處理

// 在磚塊角色中 當 🏁 被點擊 重複無限次 如果 <碰到 球?> 那麼 // 判斷碰撞方向 如果 <球的y座標 > y座標 + 10 或 球的y座標 < y座標 - 10> 那麼 // 上下碰撞,改變Y速度 廣播 改變球Y速度 否則 // 左右碰撞,改變X速度 廣播 改變球X速度 結束 改變 分數 10 播放音效 爆裂聲 隱藏 停止 這個角色的程式 結束 結束

球的碰撞回應

// 在球角色中 當收到 改變球Y速度 設定 球速度Y 為 <球速度Y * -1> 當收到 改變球X速度 設定 球速度X 為 <球速度X * -1>

📐 角度與速度計算

擋板反彈角度計算

// 更精確的擋板碰撞 如果 <碰到 擋板?> 那麼 // 計算碰撞位置比例 (-1 到 1) 設定 碰撞位置 為 <(x座標 - 擋板的x座標) / 40> // 根據位置調整反彈角度 設定 球速度X 為 <碰撞位置 * 6> 設定 球速度Y 為 // 限制最大速度 如果 8> 那麼 如果 <球速度X > 0> 那麼 設定 球速度X 為 8 否則 設定 球速度X 為 -8 結束 結束 結束

💡 物理系統優化技巧

  • 防止穿透:球移動太快時可能穿過物件,可以降低速度或增加檢測頻率
  • 碰撞緩衝:碰撞後稍微移動球,避免重複觸發碰撞
  • 速度限制:限制球的最大速度,保持遊戲可控性
  • 角度限制:避免球完全水平移動,增加遊戲趣味性
📷

物理碰撞系統圖解

建議尺寸:800x500像素

顯示:不同類型的碰撞和對應的反彈方向

🚀 第五章:完整遊戲開發流程

🎮 遊戲狀態管理

遊戲狀態變數

建立變數 遊戲狀態 // 0:開始畫面, 1:遊戲中, 2:遊戲結束, 3:過關 建立變數 關卡 建立變數 磚塊數量 建立變數 最高分數

遊戲初始化

當 🏁 被點擊 設定 遊戲狀態 為 0 設定 關卡 為 1 設定 分數 為 0 設定 生命 為 3 設定 磚塊數量 為 40 廣播 顯示開始畫面

🎯 完整球的控制邏輯

球的完整程式

當 🏁 被點擊 重複無限次 如果 <遊戲狀態 = 1> 那麼 // 移動球 改變 x 座標 <球速度X> 改變 y 座標 <球速度Y> // 左右邊界碰撞 如果 220 或 x座標 < -220> 那麼 設定 球速度X 為 <球速度X * -1> 結束 // 上邊界碰撞 如果 160> 那麼 設定 球速度Y 為 <球速度Y * -1> 結束 // 底部碰撞(失去生命) 如果 那麼 改變 生命 -1 如果 <生命 > 0> 那麼 廣播 重新開始球 否則 廣播 遊戲結束 結束 結束 // 擋板碰撞 如果 <碰到 擋板?> 那麼 設定 碰撞位置 為 <(x座標 - 擋板的x座標) / 40> 設定 球速度X 為 <碰撞位置 * 6> 設定 球速度Y 為 播放音效 彈跳 結束 結束 結束

🏆 分數與生命系統

分數顯示角色

當 🏁 被點擊 定位到 x: -180 y: 150 重複無限次 說出 <結合 "分數: " 和 分數> 持續 0.1 秒 結束 當 🏁 被點擊 定位到 x: 180 y: 150 重複無限次 說出 <結合 "生命: " 和 生命> 持續 0.1 秒 結束

🎊 勝利與失敗條件

遊戲結束檢查

// 在舞台程式中 當 🏁 被點擊 重複無限次 如果 <磚塊數量 = 0> 那麼 設定 遊戲狀態 為 3 廣播 過關 停止 所有程式 結束 如果 <生命 ≤ 0> 那麼 設定 遊戲狀態 為 2 廣播 遊戲結束 停止 所有程式 結束 結束 當收到 遊戲結束 切換造型為 遊戲結束 如果 <分數 > 最高分數> 那麼 設定 最高分數 為 <分數> 說出 "新紀錄!" 持續 3 秒 結束 當收到 過關 切換造型為 過關畫面 改變 關卡 1 等待 3 秒 廣播 下一關

⚠️ 程式架構建議

  • 模組化設計:將不同功能分配給不同角色
  • 事件驅動:使用廣播訊息來協調各個角色
  • 狀態管理:用變數控制遊戲的不同階段
  • 錯誤處理:考慮邊界情況和異常狀況

🌟 第六章:進階功能與遊戲優化

🎨 視覺效果增強

磚塊消失動畫

// 在磚塊角色中 如果 <碰到 球?> 那麼 // 爆炸效果 重複 10 次 改變 大小 -10 改變 顏色效果 25 等待 0.02 秒 結束 // 粒子效果(選擇性) 重複 5 次 複製自己 設定大小為 20% 面朝 <隨機取數 0 到 360> 移動 <隨機取數 20 到 50> 步 改變 透明效果 20 等待 0.1 秒 結束 隱藏 結束

🔊 音效系統

遊戲音效配置

// 不同情況的音效 如果 <碰到 擋板?> 那麼 播放音效 彈跳 音量 0.5 結束 如果 <碰到 磚塊?> 那麼 播放音效 爆裂聲 音量 0.7 結束 如果 <生命 = 0> 那麼 播放音效 失敗音效 音量 0.8 結束 如果 <磚塊數量 = 0> 那麼 播放音效 勝利音效 音量 1.0 結束

⚡ 特殊道具系統

🔥 火球

球變成火球,可以穿透磚塊

🔧 大擋板

擋板變大,更容易接到球

⚡ 慢動作

球的速度變慢,容易控制

🎯 多球

同時有多個球在場上

道具掉落系統

// 在磚塊碰撞時 如果 <隨機取數 1 到 10 = 1> 那麼 // 10% 機率掉落道具 設定 道具類型 為 <隨機取數 1 到 4> 複製 道具角色 定位到 x: y: 面朝 270 度 重複直到 移動 3 步 如果 <碰到 擋板?> 那麼 廣播 <結合 "道具" 和 道具類型> 隱藏 停止 這個角色的程式 結束 結束 隱藏 結束

🏆 關卡設計系統

多關卡配置

當收到 下一關 如果 <關卡 = 1> 那麼 廣播 建立關卡1 否則 如果 <關卡 = 2> 那麼 廣播 建立關卡2 否則 如果 <關卡 = 3> 那麼 廣播 建立關卡3 結束 // 增加難度 設定 球速度X 為 <球速度X * 1.1> 設定 球速度Y 為 <球速度Y * 1.1> 設定 遊戲狀態 為 1

🎯 遊戲平衡建議

  • 難度曲線:逐漸增加球速和磚塊數量
  • 獎勵機制:連續擊中磚塊給予額外分數
  • 容錯設計:給予玩家適當的犯錯空間
  • 視覺回饋:清楚的得分和狀態提示
📷

進階功能展示

建議尺寸:800x600像素

顯示:道具效果、特殊磚塊、多關卡設計等進階功能

📝 第七章:作業設計與學習評量

🎯 基礎作業

簡單

作業一:基本打磚塊遊戲

  • ✅ 建立球、擋板、磚塊三個基本角色
  • ✅ 實現球的彈跳運動
  • ✅ 完成擋板的左右控制
  • ✅ 實現基本的碰撞檢測
  • ✅ 加入分數系統

評分標準

  • 程式能正常運行(40分)
  • 碰撞檢測正確(30分)
  • 控制流暢(20分)
  • 介面美觀(10分)

🚀 進階作業

中等

作業二:完整遊戲系統

  • 🔥 加入生命系統(3條生命)
  • 🎯 實現遊戲開始和結束畫面
  • 🔊 加入音效系統
  • ⚡ 實現至少一種特殊效果
  • 🏆 加入最高分紀錄功能

🌟 創意挑戰

困難

作業三:創新設計

  • 🎨 設計獨特的視覺風格
  • 🎮 加入創新的遊戲機制
  • 📱 實現多關卡系統
  • 🏅 加入成就系統
  • 🎪 設計特殊磚塊類型

📸 作業提交格式

截圖要求

  1. 遊戲開始畫面:展示遊戲標題和開始按鈕
  2. 遊戲進行中:顯示球、擋板、磚塊、分數等元素
  3. 特殊功能:展示你加入的創新功能
  4. 程式碼截圖:主要的程式邏輯部分
📷

作業截圖範例

建議尺寸:800x600像素

檔名格式:學號_姓名_打磚塊遊戲_功能名稱.png

🏆 評量標準

優秀作品特徵

  • 🎯 功能完整:所有基本功能都能正常運作
  • 🎨 視覺精美:介面設計美觀,配色協調
  • 🎮 操作流暢:控制回應靈敏,遊戲體驗佳
  • 💡 創意突出:有獨特的創新元素
  • 🔧 程式優化:程式碼結構清晰,效能良好

⚠️ 常見問題提醒

  • 碰撞檢測:確保球不會穿透物件
  • 邊界處理:球不應該跑到舞台外面
  • 速度控制:避免球移動過快或過慢
  • 遊戲平衡:難度設定要合理