歡迎來到圖像化(積木式)編程的世界!
你有沒有在玩電子遊戲、使用手機應用程式,或者看動畫電影時,好奇它們究竟是如何製作出來的?背後的關鍵正是編程(Programming / Coding)——也就是向電腦發出明確指令,讓它按要求運作的藝術。
在這一章,我們會探索圖像化積木式編程(例如使用 Scratch 平台)。傳統編程需要輸入一行行文字代碼,只要打錯一個字就可能令整個程式無法運作;相反,圖像化編程讓你像拼圖一樣,把不同顏色的程式積木拼接在一起。透過這種方式,你可以輕鬆創作遊戲、解決運算難題,並在日後學習 Python 等純文字編程語言之前,打好堅實的概念基礎。
剛開始接觸時覺得有點難?完全不用擔心!只要掌握幾個核心的基本概念,你就能發揮無限想像力,創作出屬於你的作品。
---1. 圖像化編程環境
在開始下達指令之前,讓我們先認識積木式編程介面的基本元素:
• 角色(Sprites): 專案中的人物或物件(例如小貓、太空船或彈跳球),它們能夠執行動作、移動並對周圍環境作出反應。
• 舞台(The Stage): 專案的背景區域或螢幕,角色會在這裡活動,它也是展示程式視覺運作成果的地方。
• 事件(Events): 特別的觸發積木,負責告訴電腦何時開始執行一組程式碼。例如:「當綠旗被點擊」或「當按下 [空白鍵]」。
• 偵測積木(Sensing Blocks): 讓程式偵測使用者輸入或角色之間互動的積木,例如「碰到 [角色1]?」或「按下 [空白鍵]?」。
重點提示: 事件負責啟動程式,偵測負責感知角色周圍發生的事情,而角色則會在舞台上執行各項指令。
---2. 三大核心編程結構(Core Programming Constructs)
世界上每一個電腦程式——從小小的 Scratch 迷宮遊戲,到控制太空火箭發射的複雜軟件——都是由三種基本控制結構建立而成的:順序(Sequence)、選擇(Selection)和迭代/循環(Iteration)。
A. 順序(Sequence)
順序是指電腦嚴格按照由上至下的次序,一步一步執行指令。
• 生活例子: 想像一下焗蛋糕或依照食譜烹飪。你必須先將材料混合好,然後才放進焗爐。如果把步驟次序弄亂,蛋糕便無法成功做出來!
• 在圖像化編程中,順序是透過垂直拼接積木來實現的。電腦會先讀取並執行最頂端的積木,然後依次向下逐一執行。
B. 選擇(Selection)
選擇是指程式根據一個條件(一個結果只有「真 True」或「假 False」的問題)作出判斷,並決定接下來走哪一條路徑。
• 「如果 (IF)」積木: 只有在條件為真時,才會執行裡面的動作。
例子: 如果 \( \text{score} = 10 \),便播放歡呼聲效。
• 「如果……否則 (IF-THEN-ELSE)」積木: 提供兩條不同的路徑。如果條件為真,執行一組動作;否則(條件為假),便執行另一組完全不同的動作。
例子: 如果 \( \text{lives} > 0 \),繼續遊戲,否則顯示「Game Over」。
• 生活例子: 如果下雨,就帶雨傘,否則戴太陽眼鏡。
C. 迭代/循環(Iteration / Looping)
迭代是指重複執行一組指令多次,而無需重複拼接相同的積木。
你必須認識以下兩種主要的迭代方式:
1. 計數控制迭代(Count-Controlled Iteration): 將程式碼重複執行固定、預設的次數(例如:「重複 10 次」)。
比喻: 在體育課上做剛好 \(10\) 次開合跳。
2. 條件控制迭代(Condition-Controlled Iteration): 重複執行程式碼,直到某個特定事件發生或條件成立為止(例如:「重複執行直到 <碰到邊緣>」)。
比喻: 圍繞操場一直跑步,直到聽到老師吹哨子才停下來。
重點提示: 順序決定步驟次序;選擇負責作出判斷(IF / ELSE);迭代負責重複執行指令(循環)。
---3. 數據、變數與清單
變數與賦值(Variables and Assignment)
變數是電腦記憶體中一個已命名的儲存空間,用來存放程式運行過程中可能會改變的數據。
• 比喻: 想像一個貼了標籤的儲物盒。如果你給盒子貼上 score(分數)的標籤,你可以在裡面放入一個數字,打開看看目前的數值,或者在得分時換上一個新數字。
• 賦值(Assignment): 這是指把一個數值存入變數的動作(例如:「將 [score] 設為 \(0\)」或「將 [score] 改變 \(1\)」)。
數據類型(Data Types)
雖然圖像化積木語言處理數據十分簡單,但你仍然需要了解主要的數據類型:
• 整數(Integer): 正整數或負整數(例如:\(5\)、\(-3\)、\(100\))。常用於記錄分數、生命值或圈數計數器。
• 字串(String): 文字、字母或字符的組合(例如:"Game Over"、"Player 1")。
• 布林值(Boolean): 一種只有兩個可能數值的數據類型——真(True)或假(False)。
清單/陣列(Lists / Arrays)
清單是一組按順序排列的數據項集合,全部儲存在同一個變數名稱之下。
• 與其分開建立 item1、item2 和 item3 等多個變數,不如建立一個名為 inventory(道具欄)的清單,把所有物品集中儲存(例如:"Key"、"Shield"、"Potion")。
重點提示: 變數儲存單一項可變的數據,而清單則以同一個名稱儲存一整組數據。
---4. 運算符與邏輯
運算符讓你的程式能夠進行數學計算、比較數值,以及作出智能決策。
算術運算符(Arithmetic Operators)
電腦使用算術積木來進行數學運算:
• 加法: \( + \)
• 減法: \( - \)
• 乘法: \( * \)
• 除法: \( / \)
• 求餘數/取模(Modulo / mod): 計算除法運算後的餘數。例如,\( 7 \text{ mod } 2 = 1 \),因為 \(7\) 除以 \(2\) 等於 \(3\) 餘 \(1\)。這個運算在檢查一個數字是奇數(單數)還是偶數(雙數)時非常實用!
比較運算符(Comparison Operators)
用來比較兩個數值,運算結果只會是「真(True)」或「假(False)」:
• 等於: \( = \)
• 大於: \( > \)
• 小於: \( < \)
• 大於或等於/小於或等於: \( \ge \) 和 \( \le \)
邏輯(布林)運算符(Logical / Boolean Operators)
這些積木讓你可以組合或反轉條件:
• 且(AND): 兩個條件都必須同時成立(真),結果才為真(例如:\( \text{keys} = 3 \text{ AND } \text{at door} = \text{True} \))。
• 或(OR): 只要其中一個條件成立(真),結果就為真(例如:\( \text{health} = 0 \text{ OR } \text{timer} = 0 \))。
• 非/不成立(NOT): 反轉條件的真假結果(例如:\( \text{NOT } (\text{touching edge}) \))。
重點提示: 算術運算符計算數值,比較運算符測試數值關係,而邏輯運算符用來組合多個條件。
---5. 模組化編程與程序(Procedures)
隨著專案規模擴大,如果把所有積木拼成一條長長的積木柱,程式碼會變得混亂且難以閱讀。為了保持代碼整潔且井井有條,程序員會使用模組化編程(Modular Programming)。
分解(Decomposition)
分解是一項重要的運算思維技能,指把一個龐大而複雜的問題,拆解成多個較小、更容易處理的子問題。
程序/自訂積木(Procedures / "My Blocks")
在 Scratch 等圖像化編程語言中,我們可以利用「自訂積木」(My Blocks)來建立程序。
• 程序是一段可重複使用的獨立代碼模組,專門負責執行某個特定任務。
• 你只需「定義」一次該積木(例如:「定義 跳躍」,裡面放入各個移動積木),之後每當需要角色跳躍時,直接呼叫「跳躍」積木即可。
• 為什麼要使用程序? 它能減少重複的代碼、讓你的程式更容易閱讀,而且一旦發現錯誤,只需在同一個地方修改即可(除錯更方便)!
重點提示: 分解負責將大任務拆細,而程序(自訂積木)則將這些任務轉化為整潔、可重複使用的代碼模組。
---6. 常見陷阱與概念誤區(Pitfalls to Avoid)
即使是編程高手也難免會犯錯!以下是初學者常見的陷阱,記得多加留意:
• 單次「如果」與「重複無限次如果」的陷阱: 單獨的「如果」積木只會在電腦執行到該位置的一瞬間檢查條件一次,它並不會停下來等待條件發生。如果你希望遊戲在整個過程中持續偵測角色是否碰到障礙物,必須把「如果」積木放進一個持續循環(例如「重複無限次」)之內!
• 在「否則」後面添加條件: 「如果……否則」積木中的「否則(ELSE)」部分,是一個用來接住「所有條件不成立(False)的情況」的兜底分流。你不需要、也不能直接在「否則」後面附加額外條件。
• 混淆「且 (AND)」與「或 (OR)」: 如果你想檢查分數是否介乎 \(10\) 至 \(20\) 之間,必須寫成:
\( \text{score} > 10 \text{ AND } \text{score} < 20 \)。
如果錯誤使用了 OR,世界上任何一個數字都會令該條件成立!
• 變數作用域(Variable Scope)混淆: 在 Scratch 中,建立變數時要特別留意是選擇了「適用於所有角色」(全域變數 Global)還是「僅適用於當前角色」(區域變數 Local)。一個角色是無法直接修改另一個角色的區域變數的。
• 循環差一錯誤(Off-by-One Errors): 設定計數器循環時要特別小心。計數器從 \(0\) 開始還是從 \(1\) 開始,會直接影響循環需要執行多少次才能達到目標數值!
---快速複習總結
• 順序(Sequence): 積木由上至下、一步接一步執行。
• 選擇(Selection): 使用「如果」和「如果……否則」作出條件判斷。
• 迭代(Iteration): 使用計數控制(固定次數)或條件控制(重複直到)循環來重複執行代碼。
• 變數(Variables): 已命名的記憶體盒子,用來儲存數據(整數、字串、布林值)。
• 清單(Lists): 已命名的集合,用來儲存多個數據項。
• 模組化代碼(Modular Code): 使用自訂積木(程序)讓代碼可以重複使用,並使除錯更加容易。