# 流程控制的練習

在前面的例子中我們使用到的「重複無限次」積木，讓我們想要一直不斷地執行的作業無限期地重覆，直到按下「停止執行按鈕」才會停止這些作業。

在問題的解決步驟中會有許多種不同的變化，在基本上以步驟的流程來看，大概不會脫離以下三種流程執行的結構：

* 循序執行結構
* 選擇結構
* 重複結構

## 循序執行

循序執行非常直覺，就是當一個事件發生的時候，例如角色被點擊的時候，或是某一個按鍵被按下去的時候，依附於該事件積木下的程式積木依序一個一個地執行下去，這就是循序執行的方式。

{% hint style="danger" %}
而在Scratch中比較特別的是，由於它可以平行地處理所有的事件，因此雖然大家都是循序地在執行每一個積木，但是依附在不同事件中的積木，它們的執行先後次序卻無法判斷，這是在設計程式時要特別留意的地方。
{% endhint %}

以下是循序執行的例子：

![](/files/-LZg9rHWN8BBB3bZG-Pc)

在這個例子中，Scratch舞台上的角色在按下開始執行按鈕之後，會以10點為一步，總共前進了4步。

## 重複結構&#x20;

從上面的例子中，同學們應該可以看到有許多的步驟其實是一直不斷地重複出現，每一步都是前進10點、換下一個造型、等待一秒，總共重複了4次，因此在畫面上看起來是前進了4步。如果以此種寫法的話，要前進10步就要使用30個積木，相信應該沒有人會這麼做。對於這些重複的事情，很明顯地就需要使用合適的積木來指定某些積木要重複的次數，以上面這個例子，可以修改為如下：

![](/files/-LZgB52PDO-HOKsx9DZo)

使用重複程式積木，可以自由地指定要重複的積木內容以及次數，很有效率地解決了前面所提到的問題，而且，因為只要在次數的地方指定一-個想要重複的數字，此時就可以讓舞台上的角色一次走更多步。

## 選擇結構

當角色在畫面上走了許多步之後，就會遇到一些可能發生的情況，例如角色走著走著就碰到了舞台的邊界。在前面單元中的例子，我們使用了「碰到邊緣就反彈」的程式積木來解決這個問題，如下所示：

![](/files/-LZgCTyvo83qeX4A9Rsx)

而碰到邊緣就反彈這個積木，假設我們只考慮在舞台中進行左右移動的話，其實隱含了以下的邏輯判斷：

> 碰到邊緣時，如果現在的角度是 90 度，就把面向的角度改為-90度，否則就把面向的角度改為90度。

由於它會牽涉到目前的角度，因此在程式中需要使用到「方向」這個數值，修改角度的積木如下：

![](/files/-LZgmLR9U5O69WMAnLAH)

再加上偵測碰到邊緣的積木，如下所示：

![](/files/-LZgneN7gU0ixv_TUmtz)

也就是上面這一段程式積木，「基本上」在水平方向上約略等於「碰到邊緣就反彈」這個程式積木。我們把它整合到原有的程式，就變成如下所示的樣子：

![](/files/-LZgodnzkIVV4E_WwkjG)

{% hint style="danger" %}
碰到邊緣就反彈這個積木可以處理任何的角度，而上面取代的程式碼只考慮到水平反轉而已，請同學們留意。
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://nkust.gitbook.io/scratch-3/liu-cheng-kong-zhi-de.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
