# 來猜個數字吧

有了隨機數和簡易的流程控制能力，寫個猜數字遊戲就是很理所當然的事了！

## 題目說明

我們希望讓舞台上的角色在被點擊之後就立刻之產生一個隨機數，接著詢問使用者要猜的數字是多少，在使用者輸入數字之後，把使用者輸入的數字拿來和隨機數比較，一樣的話就是猜中了，要有回饋的畫面。如果不一樣的話，就要告訴使用者數字太大還是太小，並繼續讓使用者猜測，直到數字正確為止。

## 解決此問題的演算法

變數：answer-->要被猜測的隨機數

變數：guess-->使用者猜的數字

程式流程如下：

1. 開始執行程式
2. 產生一個1\~99之間的隨機數，放在變數answer中
3. 詢問使用者要猜測的數字，放在guess中
4. 如果guess等於answer，則顯示「你猜對了」，並結束程式
5. 否則如果guess大於answer，則顯示「你猜的數字太大囉」，前往第3步
6. 否則，顯示「你猜的數字太小了」，前往第3步

{% hint style="info" %}
上述的演算法如果使用英文並寫得精簡一點（有一套自已的文字式的語法），即稱為虛擬碼（pseudo code）

表達程式演算的流程也可以使用圖形的方式，標準的圖形流程表示法稱為流程圖Flow chart
{% endhint %}

## 開始製作程式

先建立兩個變數，分別是answer以及guess，如下所示：

![](/files/-L_B0YuY7QcxBBGmMGAr)

接著從「當角色被點擊」事件開始，先產生一個隨機數放在變數answer中，並請使用者猜一個數字，放在變數guess中，如下所示：

![](/files/-L_B1avK_QdgdjPZ3oB9)

有了answer和guess之後，接下來就是要比較這兩個數的大小，給予使用者適當的回應。加上這個邏輯的程式積木如下所示：

![](/files/-L_C6x_VrKzcRdLPJUp7)

仔細看一下上述的程式積木，如果可以的話請同學們執行一遍看看，你會發現，其實就只有讓使用者猜一次而已，不管有沒有猜中，在給了使用者回饋訊息之後，然後，就沒有然後了。

在我們的演算法中有指出，如果數字太大或太小，其實是要讓程式的流程再回到前面，也就是回到「詢問並等待」那個積木再往下執行才對，但是，在Scratch中並沒有「goto」這種直接前往某一處程式積木的功能。

{% hint style="info" %}
在早期的一些程式語言如BASIC、FOTRAN、Pascal等等都有提供goto這種指令，可以讓程式碼直接跳到程式中的任一處再往下執行。這樣的設計方式提供了程式設計師的彈性，但間接地卻造成了程式執行流程的複雜度，使得程式變得不易理解，因此後來的先進的程式語言大多不再提供goto這種指令了。
{% endhint %}

仔細檢視我們的程式流程，從「詢問並等待積木」開始，一直到最後的「如果」積木，它們是一個如果沒待到數字就不會停止的重複片段，因此，我們可以使用一個重複積木把它包含起來，如下所示：

![](/files/-L_C9FWeNBbG1YlT1ROt)

這個「重複直到」積木會等待一個結束條件，在該條件還沒發生之前會一直重複執行它所含括的所有積木。

基於上述的邏輯，在此使用一個叫做gameover的變數，一開始把它設定為0，如果要結束程式的話，就把它設定為1，如此，在等待條件的地方就可以設定為gameover=1即可，修改後的程式積木如下（別忘了要先建立一個叫做gameover的變數喔）：

![](/files/-L_CBc0eQVjZc2Klippr)

比較一下和前一個程式的差別，在進入重複迴圈之前，先把gameover設定0，如此就可以順利地進入迴圈中。

原本在答對時使用「停止全部」來結束程式的執行，這次只要把gameover設為1，很神奇地程式也就結束執行了耶！


---

# Agent Instructions: 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/kao-kao-ni-de-li.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.
