圖看不清楚就點一下,用滾輪或下方拉桿放大,按住圖片可以移動,按 × 關閉。
📦 動手前先下載素材
這幾樣是自己畫的,Scratch 素材庫裡找不到,點按鈕下載:
⬇ 球桌.svg⬇ 右球拍.sprite3⬇ 字卡.sprite3⬇ 左球拍.sprite3⬇ 球.sprite3
放進專案:
- 🖼️ 背景:滑鼠移到舞台區右下角的「選個背景」→ 點「上傳背景」
- 🧩 角色:滑鼠移到角色區右下角的「選個角色」→ 點「上傳角色」
講義寫「畫」的地方,直接用這些檔案(想自己畫也可以)。上傳的只有造型,程式還是要照講義自己拼。
兩人對打:左邊用 W / S、右邊用 ↑ / ↓ 控制球拍。球從哪邊出界,對方加 1 分,先得 5 分贏。這款改編打磚塊,練兩組按鍵同時控制、兩個分數變數和得分後重新發球。
今天要做出來的作品

老師上課會先打開
09_雙人乒乓.sb3按一次綠旗,大家一起看成品長什麼樣子。 📥 下載本堂講義 PDF
今天做什麼
| 做什麼 | 做完會有什麼 |
|---|---|
| 步驟 1:準備球桌和角色 | 兩個球拍、球、字卡 |
| 步驟 2:寫球拍程式 | 兩組按鍵同時控制 |
| 步驟 3:寫球的程式 | 反彈、出界加分 |
| 步驟 4:寫舞台和字卡 | 5 分顯示贏家 |
| 步驟 5:存檔繳交 | 作品交到 Classroom |
學習目標
- 兩組按鍵同時控制:用「重複無限次」+「如果〈○ 鍵被按下?〉」,兩個人同時按也不會互相卡住
- 兩個分數變數:左邊分數、右邊分數各記各的
- 得分後重新發球:球出界 → 廣播「出界」→ 記分 → 廣播「得分」→ 舞台判斷有沒有人到 5 分 → 沒有就廣播「發球」
- 碰到直立的球拍反彈:面朝(0 − 方向)
遊戲規則
- 按綠旗:兩邊分數歸零,球從中間發出,隨機往左或往右。
- 左球拍:按住 W 往上、S 往下;右球拍:按住 ↑ 往上、↓ 往下。兩個人可以同時按。
- 球碰到上下邊會反彈,碰到球拍會被打回去。
- 球從右邊出界 → 左邊得 1 分;從左邊出界 → 右邊得 1 分。每得 1 分,球回到中間重新發。
- 先得 5 分的人贏,跳出「左邊贏了!」或「右邊贏了!」,不再發球。
| 廣播 | 誰喊 | 誰收到、做什麼 |
|---|---|---|
| 發球 | 舞台(綠旗、還沒人贏) | 球回到中間發球 |
| 出界 | 球(跑出左右邊界) | 球自己看在哪一邊,幫對方加分,再喊「得分」 |
| 得分 | 球 | 舞台判斷有沒有人到 5 分 |
| 遊戲結束 | 舞台(有人到 5 分) | 字卡顯示誰贏 |
步驟 1:放球桌、球拍和球

- 開新專案,刪掉小貓。
- 球桌:用這頁最上面下載的「球桌.svg」——滑鼠移到右下角的「選個背景」→「上傳背景」。背景名字是「球桌」。
- 角色:滑鼠移到「選個角色」→「上傳角色」,把下載的四個檔案一個一個傳上來:左球拍、右球拍、球(已經帶著 Boing 音效)、字卡(兩個造型「左邊贏」「右邊贏」)。
- 變數類「建立一個變數」,建兩個:左邊分數、右邊分數,把右邊分數的顯示框拖到舞台右上角。
想自己畫也可以:球桌是綠色加一條白色虛線;球拍是直立的長方形(寬約 12、高約 80),畫好左球拍再按右鍵「複製」一支改名「右球拍」換個顏色;球是一顆小圓(要到「音效」分頁加 Boing);字卡兩個造型打「左邊贏了!」「右邊贏了!」。
💡 為什麼分數要兩個變數?兩個人各有各的分數。只用一個「分數」的話,左邊得分和右邊得分會加在一起,不知道誰贏。
✅ 檢查點:角色區有左球拍、右球拍、球、字卡,右邊分數框在右上角。
步驟 2:球拍——兩組按鍵同時控制


左球拍:當綠旗被點擊 → 定位到 x:-210、y:0 → 重複無限次〔如果〈w 鍵被按下?〉那麼 y 改變 8;如果〈s 鍵被按下?〉那麼 y 改變 -8〕。

把左球拍的程式拖到角色區的右球拍身上(拖到縮圖上放開)。
⚠️ 注意:點右球拍改三處:x 改成 210,w 改成向上、s 改成向下(方向鍵 ↑ ↓)。
💡 為什麼把程式拖給右球拍?兩支球拍的程式幾乎一樣,只差位置和按鍵。先做好左球拍再拖過去,只要改三個地方,不會漏寫。

💡 為什麼不用事件類的「當 ○ 鍵被按下」?那個積木靠的是鍵盤的「連發」:按住一個鍵,電腦會一直重複送出那個鍵。可是兩個人同時按住兩個鍵時,電腦只會連發最後按下的那一個,另一個人的球拍就不動了。
💡 為什麼「重複無限次+如果〈鍵被按下?〉」就可以?它不靠連發,而是每一格畫面都去問:「W 現在有沒有被按著?」「↑ 現在有沒有被按著?」兩個問題各問各的,兩個人同時按住都會回答「有」,兩支球拍一起動。
💡 為什麼 W 和 S 用兩個「如果」,不用「如果…否則」?「否則」的意思是「沒按 W 就往下」,那麼什麼都不按球拍也會一直往下掉。兩個獨立的「如果」:按 W 才往上、按 S 才往下,都不按就停著。
✅ 檢查點:兩個人同時按住 W 和 ↑,兩支球拍一起往上;放開就停住。
步驟 3:球——發球、反彈、出界


- 當綠旗被點擊 → 隱藏。
- 當收到訊息「發球」,依序拼:
- 定位到 x:0、y:0 → 面朝(隨機取數 60 到 120)度 → 如果〈(隨機取數 1 到 2)= 1〉那麼 右轉 180 度 → 顯示 → 等待 1 秒
- 重複直到〈x 座標 > 200〉或〈x 座標 < -200〉,裡面放:移動 7 點 → 碰到邊緣就反彈 → 如果〈碰到 左球拍?〉或〈碰到 右球拍?〉那麼 面朝(0 − 方向)度 → 移動 10 點 → 播放音效 Boing
- 迴圈下面:隱藏 → 廣播「出界」
- 當收到訊息「出界」→ 如果〈x 座標 > 0〉那麼 左邊分數 改變 1,否則 右邊分數 改變 1 → 廣播「得分」。
點「廣播訊息」或「當收到訊息」下拉選單 →「新的訊息」,建「發球」「出界」「得分」;步驟 4 再建「遊戲結束」。
💡 為什麼發球是「面朝 60 到 120 度,再一半機會右轉 180」?90 度是正右方,60 到 120 是往右、稍微偏上或偏下。再用「隨機 1 到 2」擲硬幣,一半機會轉 180 度變成往左。這樣每一球不知道往哪邊,兩個人都要準備。
💡 為什麼碰到球拍是「面朝 0 − 方向」?打磚塊的磚塊是橫的,要上下顛倒(180 − 方向)。乒乓的球拍是直的,要左右顛倒:往右上 60 度的球,0 − 60 = -60,變成往左上。上下不變、左右相反,就是撞到直牆的樣子。
💡 為什麼反彈後還要「移動 10 點」?球可能有一小截已經陷進球拍裡。反彈後如果還碰著球拍,下一格又會再反彈一次,球就卡在球拍上抖。先往外多走 10 點離開球拍,就不會重複反彈。
💡 為什麼出界的條件用 x 座標,而不是等「碰到邊緣」?上下邊也是邊緣,碰到上下只是反彈,不算失分。只有往左右跑過頭才是漏接,所以用 x 座標判斷。
💡 為什麼是 200,不是舞台最邊邊的 240?球拍站在 x = ±210。球一越過 200,就已經跑到球拍的後面、不可能再被正面打回去了。如果等到 240 才算出界,球可能卡在球拍後面和舞台邊緣之間,一直「碰到球拍反彈、碰到邊緣反彈」來回抖,永遠不會出界。
💡 為什麼出界後看「x 座標 > 0」?球停在右邊(x 是正的),表示右邊的人沒接到,得分的是左邊;停在左邊就是右邊得分。
✅ 檢查點:球的程式區有收到「發球」和「出界」兩段程式。
步驟 4:舞台當裁判、字卡宣布贏家

- 舞台:當綠旗被點擊 → 背景換成 球桌 → 左邊分數設為 0 → 右邊分數設為 0 → 廣播「發球」。
- 舞台:當收到訊息「得分」→ 如果〈左邊分數 = 5〉或〈右邊分數 = 5〉那麼 廣播「遊戲結束」,否則 廣播「發球」。

- 字卡:當綠旗被點擊 → 隱藏;當收到訊息「遊戲結束」→ 如果〈左邊分數 = 5〉那麼 造型換成 左邊贏,否則 造型換成 右邊贏 → 圖層移到 最上 層 → 顯示。
💡 為什麼得分後要先問舞台,不讓球直接重新發?球只知道「我出界了」,不知道比賽結束了沒。每得一分都交給舞台判斷:還沒人到 5 分才喊「發球」,有人到了就喊「遊戲結束」,球就不會在比賽結束後又發出來。
💡 為什麼用「或」?左邊到 5 分或右邊到 5 分,任何一個人贏了比賽就結束,所以兩個條件用「或」接起來。
✅ 檢查點:兩人對打,球碰球拍會打回去;漏接時對方分數加 1、球回中間 1 秒後重新發;有人到 5 分就跳出贏家,球不再出現。
步驟 5:存檔繳交

檔案 → 下載到你的電腦,再上傳到 Google Classroom。
💡 為什麼一定要下載?線上版 Scratch 沒登入不會幫你存,關掉分頁就沒了。
✅ 檢查點:作品已下載到電腦,並上傳到 Google Classroom。
收不到、不會動?先查這幾件事
| 狀況 | 多半是 |
|---|---|
| 兩個人同時按,只有一邊會動 | 用了事件類「當 ○ 鍵被按下」,要改成重複無限次+如果〈○ 鍵被按下?〉 |
| 不按鍵球拍也一直往下 | 用了「如果…否則」,要改成兩個獨立的「如果」 |
| 右球拍按 W 也會動 | 程式拖過去後忘了把按鍵改成向上、向下 |
| 球卡在球拍上一直抖 | 反彈後少了「移動 10 點」 |
| 球碰到上下邊就算失分 | 出界條件寫成「碰到邊緣」,要改成 x 座標 > 200 或 < -200 |
| 球卡在球拍後面抖個不停、一直不算分 | 出界的數字太大(例如 230),球跑到球拍後面出不去;改成 200 |
| 得分加錯邊 | 出界那段的「如果 x 座標 > 0」裡,加分的變數放反了 |
| 有人 5 分了還在發球 | 舞台收到「得分」時沒有判斷,直接廣播了「發球」 |
換成你自己的(必做)
- ☐ 換外觀:球桌、球拍、球換成你自己的主題(足球、冰球、太空…)
- ☐ 至少改一條規則:勝利分數、球速、球拍移動速度、球拍長度選一個改
- ☐ 找同學實際對打一局,確認兩個人同時按都能動
- ☐ 按一次綠旗能打到其中一邊贏
挑戰(做完的人選一題)
- ★ 球拍不能跑出舞台:y 超過 140 或小於 -140 就不再移動(提示:「如果」裡用「且」多加一個 y 座標的條件)。
- ★ 得分時舞台閃一下顏色或播放音效。
- ★★ 越打越快:每被球拍打回去一次,球的速度加快一點(提示:用變數「速度」取代「移動 7 點」的 7,每次發球設回 7)。
- ★★ 發球往剛剛失分的那一邊,而不是隨機(提示:出界時記下「誰失分」)。
- ★★★ 做「單人模式」:右球拍由電腦控制,自動跟著球的 y 移動,但速度比球慢一點才打得贏。
互看檢查表(兩人互相打勾)
- ☐ 兩個人同時按住按鍵,兩支球拍都會動嗎?
- ☐ 球碰到球拍會被打回去、不會卡住嗎?
- ☐ 漏接時,分數加在正確的那一邊嗎?
- ☐ 得分後球會回到中間、等一下再發嗎?
- ☐ 有人到 5 分時,會顯示誰贏、不再發球嗎?
- ☐ 說得出:為什麼「重複無限次+如果〈鍵被按下?〉」可以讓兩個人同時控制?「得分」是誰喊的、誰收到?
