🔧 C08 函式積木(副程式)的運用

學習程式碼重構、模組化與自訂積木的完整教學

🎯 第一章:課程介紹

🔧 函式積木的核心概念

把重複的程式整理成「自訂積木」,簡化打磚塊與萬花筒兩個專題。任何會重複出現的片段,都可以抽成「自訂積木」,提升可讀性、維護性與除錯效率。

📚 學習目標

  • 程式碼重構:學會識別重複的程式碼片段
  • 自訂積木:掌握建立和使用自訂積木的技巧
  • 模組化設計:理解如何將複雜程式分解為簡單模組
  • 程式維護:提升程式碼的可讀性和維護性
💡 課程重點:
  • 識別程式中的重複模式
  • 建立參數化的自訂積木
  • 簡化複雜的程式邏輯
  • 提升程式碼的品質和效率

🛠️ 第二章:前置準備

📥 基本檔案下載

下載 C08 函式積木運用的基本檔案,包含打磚塊和萬花筒的原始程式

📁 下載 C08 基本檔.sb3
💡 使用說明:
  1. 點擊上方連結下載 .sb3 檔案
  2. 開啟 Scratch 網站 (scratch.mit.edu)
  3. 點選「上傳」按鈕選擇下載的檔案
  4. 立即修改檔名為「班級座號-8.sb3」
  5. 開始學習函式積木的重構技巧

📁 檔案準備步驟

  1. 匯入基本檔:匯入老師提供的基本檔
  2. 修改檔名:立即修改檔名(例如:81760-8.sb3)
  3. 檢查角色:確認打磚塊和萬花筒專案都存在
  4. 備份原檔:建議先備份原始檔案
⚠️ 注意事項:
  • 不要直接覆蓋舊作業
  • 確保檔名格式正確
  • 先理解原始程式邏輯再進行重構
  • 建議先備份原始檔案

🧩 第三章:函式積木概念

🔍 什麼是函式積木?

函式積木的定義

函式積木(自訂積木)是一種將重複的程式碼片段包裝成獨立模組的方法。就像把常用的工具放在工具箱裡,需要時就拿出來使用。

函式積木的優點

  • 程式碼重用:避免重複寫相同的程式
  • 提升可讀性:程式邏輯更清晰易懂
  • 易於維護:修改時只需要改一個地方
  • 模組化設計:將複雜問題分解為簡單模組
  • 參數化:可以傳入不同參數產生不同效果

🎯 何時使用函式積木?

適合使用的情況

  • 相同的程式碼出現3次以上
  • 複雜的邏輯需要重複執行
  • 需要參數化的重複操作
  • 想要提升程式可讀性

🎮 第四章:打磚塊專案重構

⚽ 球角色 - 建立「球的起點」函式

步驟1:建立自訂積木

把「每關一開始球回到原點、向下方隨機角度出發」抽出成一顆自訂積木:

定義 球的起點
將 x 設為 0
將 y 設為 0
面向 隨機 150 到 170
說明:把「每關一開始球回到原點、向下方隨機角度出發」抽出成一顆自訂積木。

步驟2:應用在球的主程式

❌ 重構前(重複程式碼)
當收到 go1
將 x 設為 0
將 y 設為 0
面向 隨機 150 到 170
當收到 go2
將 x 設為 0
將 y 設為 0
面向 隨機 150 到 170
當收到 go3
將 x 設為 0
將 y 設為 0
面向 隨機 150 到 170
✅ 重構後(使用函式)
當收到 go1
執行 球的起點
當收到 go2
執行 球的起點
當收到 go3
執行 球的起點

🧱 磚塊角色 - 建立「產生磚塊分身」函式

步驟1:建立參數化函式

建立一個可以產生指定數量磚塊分身的函式:

定義 產生磚塊分身(磚塊數)
重複 磚塊數
建立分身
等待 0.1
說明:建立一個可以產生指定數量磚塊分身的函式,提高程式碼的彈性。

步驟2:應用在不同關卡

當收到 go1
執行 產生磚塊分身(1)
當收到 go2
執行 產生磚塊分身(4)
當收到 go3
執行 產生磚塊分身(9)

🎨 第五章:萬花筒專案重構

🌈 建立「畫花瓣」函式

步驟1:建立花瓣繪製函式

將重複的花瓣繪製邏輯抽取成函式:

定義 畫花瓣(角度)
面向 角度
下筆
移動 100
右轉 30
移動 50
停筆
回到原位
說明:建立一個可以畫出指定角度花瓣的函式。

🎯 建立「畫萬花筒」函式

步驟2:建立萬花筒主函式

將整個萬花筒的繪製邏輯包裝成一個函式:

定義 畫萬花筒(花瓣數)
全部清除
重複 花瓣數
執行 畫花瓣(360/花瓣數 * 重複次數)
改變 顏色效果 10
說明:建立一個可以畫出指定花瓣數萬花筒的函式。

步驟3:簡化主程式

❌ 重構前(複雜重複)
綠旗 被點擊
重複無限次
全部清除
重複 8
面向 45 * 重複次數
下筆
移動 100
右轉 30
移動 50
停筆
回到原位
改變 顏色效果 10
✅ 重構後(簡潔清晰)
綠旗 被點擊
重複無限次
執行 畫萬花筒(8)

📈 第六章:重構優點分析

✅ 程式碼品質提升

重構前後比較

🎯 重構後的優點:
  • 程式碼減少:重複的程式碼大幅減少
  • 可讀性提升:主程式邏輯更清晰
  • 維護性改善:修改時只需要改函式定義
  • 彈性增加:可以透過參數產生不同效果
  • 除錯容易:問題定位更精確

🔧 實際應用場景

函式積木的應用

  • 遊戲開發:角色移動、攻擊、技能等重複動作
  • 動畫製作:重複的動畫序列
  • 數學計算:複雜的計算公式
  • 圖形繪製:重複的圖形模式
  • 音效控制:重複的音效播放邏輯
💡 最佳實踐:
  • 識別重複的程式碼模式
  • 為函式選擇有意義的名稱
  • 使用參數增加函式的彈性
  • 保持函式的單一職責
  • 適當的註解和說明

📝 第七章:作業要求

基本要求(必須完成)

  • ✅ 完成打磚塊專案的重構
  • ✅ 建立「球的起點」自訂積木
  • ✅ 建立「產生磚塊分身(磚塊數)」自訂積木
  • ✅ 完成萬花筒專案的重構
  • ✅ 建立「畫花瓣(角度)」自訂積木
  • ✅ 建立「畫萬花筒(花瓣數)」自訂積木
  • ✅ 確保重構後功能正常運作

進階挑戰(加分項目)

  • 🎨 為其他角色建立自訂積木
  • 🔧 建立更多參數化的函式
  • 📊 分析重構前後的程式碼行數
  • 🎵 為音效播放建立自訂積木
  • 🌈 建立不同風格的萬花筒函式
  • 🎮 為遊戲狀態管理建立函式
  • 📝 撰寫函式使用說明文件
⚠️ 繳交規範:
  • 檔案名稱:C08_函式積木運用_班級_姓名.sb3
  • 確保所有自訂積木功能正常
  • 在角色上註明班級和姓名
  • 測試重構前後的功能一致性
  • 提供重構前後的對比說明
🎉 完成檢查清單:
  • 打磚塊遊戲功能完整且正常運作
  • 萬花筒繪製功能完整且正常運作
  • 所有自訂積木都有適當的參數
  • 程式碼結構清晰易懂
  • 重複的程式碼已成功消除
  • 程式執行效率沒有降低
  • 自訂積木名稱有意義且易理解
💡 製作提示:
  • 先理解原始程式的邏輯再進行重構
  • 逐步重構,一次只改一個函式
  • 測試每個函式是否正常運作
  • 為函式選擇有意義的名稱
  • 考慮參數的設計和使用