# Scratch 07: 土耳其冰淇淋 ###### tags: `捲耳貓兒童程式創作學苑`, `Scratch` 📅 Update date: 2024-03-02 ## Step 1. 選擇背景 可以在 Scratch 內建的圖庫中選擇 **Outdoors(戶外)** 標籤 選一張喜歡的圖片,例如 Boardwalk(木板路)   ![image](https://hackmd.io/_uploads/HJw6LsgTp.png)   ![背景](https://hackmd.io/_uploads/SyZlDolaa.png) ## Step 2. 設定遊戲素材 ### 2-1. 下載素材 請先點擊 [**【雲端資料夾: 土耳其冰淇淋】**](https://drive.google.com/drive/folders/1snniXkvgO683Vs6p093M644avIBLU_rQ?usp=sharing) 下載整個資料夾後,解壓縮到本機的 **下載項目**   ### 2-2. 土耳其老闆   上傳: **土耳其老闆** ![image](https://hackmd.io/_uploads/ryvwy2xpa.png)   擺放 **土耳其老闆**,並把他的 Size 設為 60(見下圖)   ![image](https://hackmd.io/_uploads/rk3-b3xpT.png)   請點選【土耳其老闆】 ➡️ 初始化【土耳其老闆】的程式 當遊戲開始(綠色旗子被按下)時 (1) 把土耳其老闆放到目前畫面中的位置  (直接在 Motions 拉一個 `go to x: __, y: __`   這個 x, y 數值 Scratch 會幫你自動填入)   (2) 把土耳其老闆放到目前畫面中的位置  `go to back layer`  意思是:移到【下方圖層】  因為老闆會站在餐車後面,所以需要做圖層的設定   ![image](https://hackmd.io/_uploads/HyKWN8Wap.png) ### 2-3. 冰淇淋攤販車 上傳: **冰淇淋攤販車** 之後,擺放: **冰淇淋攤販車**,並把它的 Size 設為 80(見下圖) ![image](https://hackmd.io/_uploads/SyC5zhxT6.png)   ➡️ **冰淇淋攤販車** 的【初始化】程式如下 ![image](https://hackmd.io/_uploads/ByC4U8-6T.png) ### 2-4. 夾子 上傳: **夾子** 之後,擺放: **夾子**  – Size: 100  – Direction: 170(也可以按一下數字 90,用滑鼠調整合適的角度)     ![image](https://hackmd.io/_uploads/SkyT4nep6.png)   ➡️ **夾子** 的【初始化】程式如下 ![image](https://hackmd.io/_uploads/ByFyDIZTa.png) ### 2-5. 冰淇淋 上傳: **冰淇淋** 之後,擺放: **冰淇淋** ➡️ 大約放在夾子末端、圓弧狀的位置就好(見下圖)  – Size: 30  – Direction: 90   ![image](https://hackmd.io/_uploads/SkxYD3lTp.png) ➡️ **冰淇淋** 的【初始化】程式如下   ![image](https://hackmd.io/_uploads/HyKFwI-T6.png)  需要用到 `go to front layer`,意思是:移到【上方圖層】  因為我們想讓 **冰淇淋** 顯示在 **夾子** 前面 ## Step 3. 撰寫遊戲程式 ### 3-1. 旋轉冰淇淋 請先點擊【冰淇淋】 PS: 我們先規劃一個最簡單的功能:「讓 **冰淇淋** 能夠 **旋轉**」   接著,按一下遊戲視窗下方 Direction: 90 的數字【90】 可以用滑鼠試試看調整不同角度   ⭕: 冰淇淋在某些角度可以黏在夾子上,這是 OK 的 ![AA](https://hackmd.io/_uploads/BJ0Q03g6p.png)   ❌: 冰淇淋在某些角度會脫離夾子,我們不希望看到這畫面 ![AB](https://hackmd.io/_uploads/HJlERhxpp.png)   **冰淇淋的合理角度** ➡️ 沒有標準答案 可能根據擺放的位置不同,而會略有差異 需要自己【測試】一下   ➡️ 當 角度(Direction)介於 45 ~ 135 之間,冰淇淋都能黏在夾子上   因此,我們可以設計一段程式,做到以下功能: 「`讓【冰淇淋的角度 (Direction) 】從 45 慢慢增加到 135,再從 135 慢慢減少到 45`」   首先,到 Variables 建立變數 `冰淇淋旋轉角度`   ![image](https://hackmd.io/_uploads/SJlcxpl6a.png)   接著,在【冰淇淋】的程式新增 **下圖藍色框框** 的積木 ![AAA](https://hackmd.io/_uploads/B1NLHalTp.png)   之後,繼續在【冰淇淋】的程式新增 **下圖黑色箭頭 & 黑色框框** 的積木 ![upload_e4abc4441fd3d81a96ae6d82ea270b84](https://hackmd.io/_uploads/BkqpO8bap.png) ### 3-2. 拋接冰淇淋 請先點擊【冰淇淋】 想像你在土耳其冰淇淋店 手伸過去,接近冰淇淋的時候,老闆才會表演特技(tricks)   因此,如果我們想讓玩家用【滑鼠】當成【手】 當【滑鼠 **接近冰淇淋** 時】 表演某些特技,讓玩家不會輕易拿到冰淇淋   稍微調整一下【冰淇淋】的程式 ![未命名](https://hackmd.io/_uploads/ryyN68W66.png) ### 3-3. 模組化: 使用 Blocks 請先點擊【冰淇淋】 當積木(程式)功能越加越多、更佳複雜 看起來就會頭昏眼花 「模組化」是程式設計的重要概念 把「一件事」放到同一個模組(module)或區塊(block) 程式碼就會乾淨、簡潔許多! 此外,模組也可以【重複使用】 ➡️ 延伸閱讀: [模組化設計](https://zh.wikipedia.org/zh-tw/%E6%A8%A1%E7%B5%84%E5%8C%96%E8%A8%AD%E8%A8%88) 請同學依序點擊 **My Blocks**、**Make a Block** 新增一個【旋轉冰淇淋】的 block: ![image](https://hackmd.io/_uploads/HkdibPWaT.png) 之後,請仿照上面的方式 新增一個【拋接冰淇淋】的 block 最後,把黑框內的程式,搬移到對應的 block 【模組化】就完成囉(可參考下方兩張圖) ![模組化](https://hackmd.io/_uploads/SydOmP-Tp.png) ![image](https://hackmd.io/_uploads/ryZxEDWap.png) ### 3-4. 使用隨機數: 增加遊戲隨機性 請先點擊【冰淇淋】 目前為止,雖然已經可以讓 **冰淇淋** 表演【旋轉、拋接】的 tricks 但也只能算是「固定的動畫」(旋轉→拋接→旋轉→拋接→ ...) 看久了就略顯無聊 請再回想: 土耳其老闆如何和客人互動 🤔 或許是➡️ 你不知道 **哪一秒** 會「瞬間移動」 所以覺得有趣~ 對吧 因此,我們可以加上 「等待隨機秒數」和「隨機表演特技(旋轉 or 拋接)」的功能 目的是增加遊戲的【隨機性、不可預測性】 應該會更有趣一些 請先拉出這些會用到的積木 ![image](https://hackmd.io/_uploads/Sy49uw-p6.png) 之後,組裝成下列程式 意思是: 先等待隨機秒數(0.1 ~ 0.3) 再抽 1 ~ 2 號  若抽到 1,先旋轉;若抽到 2,先拋接 ![image](https://hackmd.io/_uploads/rkdPUuZa6.png) ### 3-5. 提高遊戲難度: 讓冰淇淋跟著夾子走 請先點擊【夾子】 ![image](https://hackmd.io/_uploads/B1unmubpa.png) 新增兩個 Variables (變數): `夾子X` 和 `夾子Y` 選擇 For all sprites ➡️ 為了讓冰淇淋知道夾子的位置 ![image](https://hackmd.io/_uploads/HJ0TMdWpp.png) 再來請到 Events (事件) 點擊新增一個 broadcast 積木,取名為【移動】 ![image](https://hackmd.io/_uploads/SkEOQ_-pa.png) 接著,請點擊【夾子】 可參考下圖,完成夾子的程式 ![夾子](https://hackmd.io/_uploads/SJ6oHdWpa.png) 相對的,需要讓冰淇淋接收到【移動】訊息後跟著移動 請點擊【冰淇淋】,並參考下圖,修改它的程式 ![image](https://hackmd.io/_uploads/ryGX9_ZpT.png) ## 功能展示 ![功能展示](https://hackmd.io/_uploads/B1lya_-66.gif)