音階記憶遊戲
這篇文章會介紹,使用 Scratch 3 裡的音樂擴充功能,搭配變數、清單、函式、邏輯判斷、廣播訊息、重複、尺寸、字串組合...等積木,實作一個有趣的 Do、Re、Mi、Fa、So 音階記憶遊戲。
角色設定
在角色編輯區,使用繪畫,加入五個不同顏色「圓形」的新角色,五個圓形分別表示 Do、Re、Mi、Fa、So ( 參考:造型與繪圖 )。
將角色在舞台上排列成下圖的樣子。
積木程式原理 ( 貓咪 )
點擊「貓咪」角色,建立四個變數和三個清單:
- 音階數:每一題要出現的音階數量。
- 答對:紀錄答對題數 ( 勾選顯示在畫面上 )。
- go:判斷下方圓形是否能點擊。
- n:取得清單的項目。
- 答案:記錄答案的清單。
- 題目:題目的清單。
- list:Do、Re、Mi、Fa、So 音階的清單。
點擊綠旗時,將音階數和 go 的變數都設為 0,並讓貓咪說出「點我,開始遊戲吧!」。
點擊角色時,判斷如果音階數等於 0,就廣播「開始」的訊息。
為什麼要使用邏輯判斷和廣播訊息?因為如果直接將程式放在點擊角色裡,會在重複點擊角色時,發生預期外的狀況,所以使用廣播訊息來避免例外狀況發生。
將 list 清單勾選顯示在舞台上,點選清單的「+」號,增加 60、62、64、65、67 五個項目,分別代表對應的音階,完成後再將清單取消勾選,在舞台上隱藏。
注意,這個步驟很容易被忽略。
建立一個「建立題目」的函式,建立音階題目:
- 刪除題目和答案清單的所有項目 ( 清空清單內容 )
- 使用「重複...次數」積木,重複「無條件捨去的音階數」。
- 每次重複隨機讀取 list 清單的某個項目,將其放入題目清單裡。
- 讓貓咪說出「幾個音」的文字。
為什麼要使用「無條件捨去」,因為待會在作答之後,會將音階數增加 0.5,讓音階數量是 3、3、4、4、5、5...的規律,所以使用無條件捨去,如果希望是 3、4、5、6 的規律,就不需要使用無條件捨去。
再建立一個「聽聲音」的函式,播放題目的音階,並加入音樂的擴充功能:
- 設定變數 n 為 0,目的在於取出題目清單的項目。
- 使用「重複...次數」積木,重複「無條件捨去的音階數」,每次重複執行:
- 將 n 增加 1。
- 廣播訊息「題目清單中對應的項目」。
- 演奏題目清單中對應的項目。
- 重複結束後,讓貓咪說出「有幾個音,請作答」的文字。
- 將變數 go 設為 1,表示使用者可以開始回答。
編輯收到「開始」訊息時的程式:
- 設定「答對」為 0。
- 設定「音階數」為 3。
- 讓貓咪每隔一秒講出 3、2、1。
- 貓咪講完話之後,依序執行「建立題目」和「聽聲音」的函式。
編輯收到「next」訊息時的程式 ( next 訊息會在「判斷答對」之後發出 ):
- 將「答對」改變 1。
- 將「音階數」改變 0.5。
- 讓貓咪講出「答對囉!下一題」,持續兩秒。
- 兩秒後,依序執行「建立題目」和「聽聲音」的函式。
編輯收到「gameover」訊息時的程式 ( gameover 訊息會在「判斷答錯」之後發出 )
- 將「音階數」設為 0
- 讓貓咪說出「答錯囉!遊戲結束!」,持續兩秒。
- 兩秒後,讓貓咪說出答對的題數,並提示使用者再次點擊可以繼續玩。
積木程式原理 ( 圓點 )
點擊「Do」的圓點角色,設定點擊綠旗時,尺寸設定為 100% ( 因為播放音階時會放大 )
設定當收到訊息「60」時,將尺寸變成 120%,等待 0.5 秒後再變回 100%。
收到訊息可以點擊下拉選單中「新的訊息」,增加 60 的新訊息,又因為 Do 的音階為 60,所以使用該數值作為判斷依據。
接著設定當角色被點擊的程式:
- 判斷如果 go 等於 1,表示可以進行作答的行為。
- 將尺寸變成 120%。
- 將 60 添加到答案清單中 ( 因為 Do 的音階是 60 )。
- 判斷如果答案的長度等於題目,表示作答完成 ( 注意一定要擺在這個位置 ),完成時執行:
- 將 go 設為 0。
- 判斷如果答案等於題目,表示答對,廣播 next 訊息。
- 判斷如果答案不等於題目,表示答錯,廣播 gameover 訊息。
- 演奏音階 60。
- 將尺寸變成 100%。
最後將圓形 Do 的程式,複製到 Re、Mi、Fa 和 So 的角色裡。
- 複製方法 1:可以使用鍵盤的 Ctrl + c 複製,再進入其他角色貼上。
- 複製方法 2:直接用滑鼠拖拉的方式,將程式積木拖拉到其他角色上放開,就會自動複製過去。
以下圖的 Re 為例,總共有三個位置要改成 62,依此類推修改 Mi、Fa 和 So。
完成效果
完成後,點擊綠旗,就可以開始進行音階記憶的遊戲。
範例解答
範例解答:音階記憶遊戲
延伸練習
如果已經熟悉了音階記憶遊戲的原理,還可以嘗試更多好玩的作法:
- 加入「雲端變數」,紀錄遊戲的最高分 ( 解答 )
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~