維基少年:樹莓派/Scratch 遊戲 - 數學問答
這是一個 Scratch 遊戲,它向玩家提出了一系列乘法問題。
他們必須在掉落的球到達底部之前給出正確答案。
關鍵是,當他們玩遊戲時,球會掉得越來越快。
刪除“Scratch”角色精靈,從素材庫新增一個新精靈,並選擇要掉落的專案(例如,來自物品資料夾的“棒球”),從現在開始我將其稱為“球”精靈。
點選舞臺,選擇“背景”,並選擇合適的舞臺。
從變數類別中,建立以下 5 個變數
level- 這是遊戲關卡,將控制球下降的速度。score- 這是玩家的分數。playing- 這表示遊戲何時執行。first- 這是第一個要相乘的數字。second- 這是第二個要相乘的數字。
首先,我們將建立球下降序列
選擇球精靈,並確保已選中“指令碼”選項卡。

從控制類別中,選擇“當接收到…”塊。然後選擇下拉選單,輸入訊息“startDrop”。

移動球,使其非常靠近舞臺頂部,但不要接觸它。從運動類別中,拖動“移至 x: … y: …”並將它鎖定在上方事件之下(您的 x: 和 y: 可能與我的略有不同)。
| 在程式設計中,“永遠如果”迴圈稱為while迴圈。迴圈將執行,直到上面的條件不滿足。 |

我們要讓球向下移動到螢幕底部。我們將使用“永遠如果”迴圈來執行此操作。
從控制類別中,拖動“重複直到…”並將它鎖定在“移至…”塊之下。

從感測類別中,拖動“接觸到…”並將它放到“重複直到…”塊的條件區域中。從“接觸到…”條件的下拉列表中選擇“邊緣”。

從運動類別中,將“改變 y 按…”塊拖入迴圈內部。將值更改為“-10”(這是球每次迴圈移動的距離)。
從控制類別中,將“等待 1 秒”塊拖入迴圈內部,放在“改變 y 按 -10”塊之後。
要計算球的速度,我們將使用以下公式:0.2 + ( 0.01 × ( 20 - "level" ) )
這將使球隨著關卡的增加而掉得更快。
從運算子類別中
拖動“… + …”並用它替換“等待…秒”中的 (1)。
現在將“… * …”拖到“… + …”的第二部分。
最後,將“… - …”拖到“… * …”的第二部分。
現在填寫上面公式中的值。 (您可能想嘗試稍後更改這些值以使遊戲更簡單或更難。)這些都是實際數字,除了您需要從變數類別中獲取的“level”變數。
如果這個“重複直到…”迴圈結束,則表示球已到達底部,遊戲結束。從外觀類別中,選擇“說…持續 2 秒”塊,並將它鎖定在迴圈之後,將“2”更改為“5”。
然後,從運算子類別中,拖動“連線你好世界”並將其放到“說”塊內部。將“你好”替換為“遊戲結束,你得分為:”。將“世界”替換為變數類別中的“score”變數。
從變數類別中,拖動“設定…為…”並將它鎖定在“說…”塊下面。從下拉選單中選擇“playing”,並將值保留為“0”。這將表示遊戲已結束。
從控制類別中,將“當空格鍵按下”拖動到指令碼區域。
從變數類別中,選擇“設定…為…”並將它鎖定在“當空格鍵按下”下面。
從下拉選單中選擇“level”,並將值保留為 0(這代表起始關卡)。現在,從控制類別中,將“廣播 startDrop 並等待”拖動到“設定關卡為 0”塊下面。
現在,按下空格鍵將執行您的球下降序列。試一試,這是最慢的速度。您能在它到達底部之前回答一個數學問題嗎?
現在將“設定關卡為 0”塊的值更改為“20”(這代表最高關卡,球下降速度最快) - 您是否仍然認為您有足夠的時間?好吧,您稍後就會知道。
| 問題 1:您能看到如何更改程式碼以使球在最低關卡時開始下降得更慢嗎? |
| 問題 2:您能看到如何更改程式碼以使球在最高關卡時下降得更快嗎? |
透過將控制類別中的“當
按鈕點選”事件拖動到指令碼區域,開始一個新的指令碼。
我們需要先重置變數。從變數類別中,將三個“設定…為…”塊拖動到“當
點選”塊下面。從下拉選單中,將第一個更改為“score”,將第二個更改為“level”,並將這兩個都保留為零。將第三個的下拉選單設定為“playing”,並將其設定為“1”(這表示遊戲處於活動狀態)。
現在拖動一個“重複直到…”塊,並將它放在變數下面。這是每個問題的迴圈。
從運算子類別中拖動一個“… = …”塊。從變數類別中,將“playing”變數拖動到等於運算子的左側。將右側設定為“0”。請注意,我們剛剛將playing設定為“1”,並將讓我們的問答遊戲繼續執行,直到playing = “0”。
| 問題 3:我們在哪裡將 playing 設定為零?這樣做有什麼效果? |
現在我們想為我們的問答題選擇兩個數字。拖動兩個“設定…為…”積木並將它們放在“重複直到迴圈”內部。在第一個下拉選單中選擇“first”,在第二個下拉選單中選擇“second”。現在從運算子類別中拖動一個“隨機選擇…到…”,到每個積木的“到”值中。將每個“隨機選擇”的值設定為“2”和“10”(“1”太容易了)。
現在從控制類別中拖動一個“廣播…”,並在下拉選單中選擇“startDrop”。這將開始球的下降!現在從偵測類別中拖動一個“詢問…並等待”積木,並將其放在廣播訊息下方。從運算子類別中拖動一個“連線… ….”積木,並將其放在“詢問”積木中,然後在第一個連線的右側放置另一個“連線…”,並在那個連線的右側再放置一個“連線…”。現在我們可以將四件事連線在一起。將第一個“連線”單元設定為“什麼是”(在單詞“is”後加一個空格)。將變數“first”拖動到連線的下一個單元格中。然後在第三個單元格中放入“乘以”(前後有空格),最後將變數“second”拖動到最後一個單元格中。這個指令碼現在將等待玩家回答問題,但請記住,另一個指令碼仍在讓球落下!玩家的時間正在流逝。我們需要不斷地詢問玩家答案,直到他們答對,所以再拖動一個重複迴圈,並將其放在“詢問”積木下方,但在現有的“重複直到…”迴圈內部。我們必須停止這個迴圈有兩個原因:要麼玩家時間用完,要麼玩家得到了正確答案。從運算子類別中拖動一個“…或…”積木,並將其放在“重複直到”條件框中。現在將一個“… = …”積木拖動到“…或…”積木的兩側。
為了停止這個重複迴圈的第一個原因,我們想要檢查“playing”變數何時為“0”(零)。
為了停止這個重複迴圈的第二個原因,我們想要檢查答案是否正確。將偵測類別中的“答案”元素拖到左側,並將運算子類別中的“… * …”元素拖到右側。將“first”和“second”變數放在“… * …”元素中。
當玩家回答錯誤時,我們想告訴他們並再次詢問他們問題。右鍵單擊您已經建立的“詢問…”部分,然後選擇“複製”。將其放在一個清晰的區域。請注意,這也複製了“重複迴圈”,我們不想要它,所以將其分離並丟棄。更改第一個單元格中的文字,使其顯示為“再試一次,什麼是”,現在將其放在重複迴圈內。我們的程式現在將不斷詢問,直到時間用完或給出正確答案。現在我們需要檢查一下玩家是否答對了。從控制類別中拖動一個“如果…那麼”積木,並將其放在內部重複迴圈的下方,但在外部重複迴圈的內部。
從偵測類別中,將答案拖到“… = …”的左側。從運算子類別中,將“… * …”拖到右側。現在從變數中將“first”和“second”放在乘法積木的兩側。
如果答案正確,我們想增加分數。從資料類別中,將一個“改變…按照…”拖到“如果”積木內部,從下拉選單中選擇“score”,並將數量設定為“1”。
| 問題 4:你能看到如何讓玩家在達到更高等級時獲得更多積分嗎? |
我們還需要提高等級(這將使球的下降速度略微加快),但只能提高到最高等級。從控制類別中拖動一個“如果…那麼”積木,並將其放在“改變分數…”積木下方,但仍在現有的“如果”積木內部。
等級只能提高到最大值 20,所以從運算子類別中拖動一個“… < …”到“如果”條件中。從變數類別中,將“level”變數拖動到“… < …”的左側,並將右側設定為“20”。從變數類別中,將一個“改變…按照…”拖到“如果”積木內部。從下拉選單中選擇“level”,並將數量設定為“1”。
你現在可以測試你的遊戲了,你能得到多少分?你如何讓遊戲更容易或更難?
4. 更多活動
[edit | edit source]當玩家答錯或答對問題,以及當他們輸掉遊戲時新增聲音。
更改遊戲,使其詢問您不同的數學問題(例如將三個數字相加)。
檔案
[edit | edit source]ScratchGame-MathQuiz-Pi.pdf
[edit | edit source]本教程的原始 PDF可在維基共享資源上獲取。