一、教學主題
主題名稱:迴圈型結構 — 擊落敵機遊戲設計
課程核心:透過 Scratch 建立一個「射擊敵機」的遊戲,讓學生理解並應用迴圈結構 (Loop Structures)。
二、程式概念講解
1. 課程焦點:迴圈型結構
定義
依據條件是否成立,決定是否重複執行一段程式。
2. 迴圈型結構的種類
A類型 A:條件成立才迴圈(類似 while(條件){...})
語法範例:
while (條件) {
// 執行的程式碼
}
Scratch 中對應方式:使用「重複執行」+「等待直到」
重要:Scratch 沒有等價積木,以「重複執行」+「等待直到」替代。
重點:當條件成立,才持續做圈內動作。
重點:當條件成立,才持續做圈內動作。
B類型 B:先做,直到條件成立才離開(重複直到…)
語法範例:
repeat until (條件) {
// 執行的程式碼
}
Scratch 中對應積木:重複直到…
重點:在條件成立前,一直重複圈內動作。
3. 迴圈結構的應用場景
- 遊戲循環:持續檢查遊戲狀態、更新畫面
- 動畫效果:重複執行移動、旋轉等動作
- 條件等待:等待特定事件發生
- 計數器:重複執行固定次數的動作
三、素材與變數(補充)
1. 角色建議
角色類型 | 建議內容 | 說明 |
---|---|---|
舞台 | 多張關卡背景 | 「時間到」「恭喜過關」背景 |
開始按鈕 | 點擊啟動遊戲 | 廣播 go 訊號 |
發射台 | 滑鼠跟隨 | 砲彈發射位置 |
砲彈 | 空白鍵發射 | 擊中敵機/客機 |
敵機 | 移動攻擊目標 | 擊中得分 +1 |
客機 | 誤擊扣分目標 | 擊中扣分 -4 |
爆炸特效 | 選擇性 | 增加視覺效果 |
2. 廣播訊號
廣播訊號:
• go(開始遊戲)
• gameover(時間到/結束)
• restart(重玩)
3. 變數設定
變數列表:
• 分數(計分用)
• 秒數(計時用)
• isOdd(單/雙號判斷)
• gameOn(遊戲狀態)
• bulletReady(子彈冷卻)
四、步驟化實作
A開始畫面與座號姓名
🎭 舞台背景設定
在開場背景上置入「班級座號姓名」
舞台 → 背景 → 在開場背景上置入文字
範例:81760林小明
▶️ 開始按鈕(補充)
點擊時廣播(go)並隱藏自己
當這個角色被點擊
├── 廣播 go
└── 隱藏
B發射台(滑鼠跟隨)
🚀 發射台程式
按綠旗 → 無限重複 → 定位到 (x: 滑鼠座標, y: -130)
當 綠旗 被點擊
重複無限次
定位到 x: 滑鼠的x座標 y: -130
等待 0.1 秒
小提醒:發射台太低會導致砲彈不發射(見 PDF 備註)
C砲彈(空白鍵發射)
💥 砲彈程式
按下空白鍵發射砲彈
當 綠旗 被點擊
隱藏
當接收到 go
重複無限次
等待直到 空白鍵被按下
定位到 x: 發射台的x座標 y: 發射台的y座標
顯示
重複直到 碰到邊緣
將y座標增加 50
等待 0.1 秒
隱藏
補充建議:
- 新增 bulletReady:避免連按造成多發判定
- 碰到敵/客機後,短暫等待 0.05 秒再隱藏,避免一次擊中被判多次
D計時(單/雙號規則)
⏰ 計時系統
PDF 要求:單號正數30秒,雙號倒數30秒
當接收到 go
設定 秒數 為 0
// 單號
設定 gameOn 為 true
重複直到 秒數 > 30
等待 1 秒
秒數 改變 1
// 單號
廣播 gameover
切換背景到 時間到
停止 全部
E敵機(Clone 機制)
✈️ 敵機程式
按綠旗 → 分數歸零、隱藏
當 綠旗 被點擊
設定 分數 為 0
隱藏
當接收到 go
重複無限次
等待 0.3 秒
// 單號
建立分身
當分身被建立
顯示
定位到 x: 在 -200 到 200 之間取隨機數 y: 130
面向 90 度
// 右
重複無限次
移動 10 點
如果 碰到邊緣
反彈
如果 碰到 砲彈
分數 改變 1
刪除分身
補充:可加入「著火下墜」特效(換造型→多次 y -10 → 刪分身),呼應 PDF 的「避免太高不會掉下來」提醒
F客機(誤擊扣分)
🛩️ 客機程式
接收到 go:立即產生第一個分身,之後每隔 3~4 秒再生
當接收到 go
建立分身
// 立即產生第一個
重複無限次
等待 3 秒
// 單號
建立分身
當分身被建立
定位到 x: 在 -200 到 200 之間取隨機數 y: 110
重複無限次
移動 5 點
如果 碰到 砲彈
分數 改變 -4
刪除分身
G計分與時間顯示(UI)
📊 顯示系統
按綠旗隱藏,接收go後顯示
當 綠旗 被點擊
隱藏分數與秒數監視器
當接收到 go
顯示分數與秒數
重複無限次
說出 "得分: " + 分數
說出 "時間: " + 秒數
重玩:確認有重新計分、計時
H關卡背景切換(多重判斷)
🎨 背景切換系統
邏輯寫在舞台,分數下降時可回到前一關
當接收到 go
重複無限次
如果 分數 ≤ 10
切換背景到 第1關
否則如果 分數 ≤ 20
切換背景到 第2關
否則如果 分數 ≤ 30
切換背景到 第3關
否則
切換背景到 過關
說出 "恭喜過關!"
停止 全部
關卡 | 分數條件 | 背景效果 |
---|---|---|
第 1 關 | ≤ 10 | 基礎背景 |
第 2 關 | 11 – 20 | 中等難度背景 |
第 3 關 | 21 – 30 | 困難背景 |
過關 | ≥ 31 | 顯示「恭喜過關」+ 停止全部 |
五、常見問題排除
⚠️ 重要提醒
- 發射台位置:不要太低,否則砲彈無法發射
- 飛機高度:不要太高,否則被擊中後不會掉下來
- 碰撞檢測:確保砲彈與飛機的碰撞範圍設定正確
- 移動速度:飛機移動速度要適中,不要太快或太慢
🔧 常見問題解決
問題 | 可能原因 | 解決方法 |
---|---|---|
砲彈不發射 | 發射台太低 | 調高 y 值(建議 -120 ~ -130) |
飛機被擊中卻不掉落 | 飛機太高 | 生成 y 值調低,或加入「著火下墜」特效 |
碰撞檢測失效 | 角色造型碰撞範圍設定 | 確認角色造型的碰撞範圍設定 |
分數計算錯誤 | 敵機和客機的碰撞條件 | 檢查敵機和客機的碰撞條件 |
計時器異常 | 計時器重設和增加邏輯 | 確認計時器重設和增加邏輯 |
背景切換問題 | 分數條件判斷的邏輯 | 檢查分數條件判斷的邏輯 |
六、延伸挑戰(補充)
🚀 進階功能挑戰
- 爆炸音效與粒子特效:造型+音效庫
- 子彈冷卻/連發限制:bulletReady 變數控制
- 客機誤擊連續扣分的防抖:碰到後先讓砲彈短暫隱藏
- 三條命或護盾道具:變數 life、shield
- 結束畫面提供「重玩」按鈕:廣播 restart
- 添加音效和背景音樂
- 設計更多種類的敵機
- 增加道具系統(加分、加時間等)
- 實作關卡選擇功能
- 添加最高分記錄功能
- 設計更複雜的敵機移動模式
七、完整遊戲流程
遊戲啟動順序
- 按綠旗啟動遊戲
- 顯示開始畫面(座號姓名)
- 點擊開始按鈕發送「go」訊號
- 所有角色接收 go 後進入遊戲
- 開始計時和得分系統
- 敵機和客機開始產生
- 玩家可以發射砲彈
- 根據分數切換關卡背景
- 時間到或達到過關分數時結束
八、作業繳交
📋 繳交步驟
- 完成所有程式功能
- 測試遊戲運行正常
- 儲存檔案(保持原檔名:C10.sb3)
- 下載作品檔案
- 上傳至 Classroom 作業 C10
- 完成繳交