翻翻卡、卡牌記憶
這篇文章會介紹,如何在 Scratch 裡使用變數、清單、多個角色、重複、廣播訊息和造型...等積木,實作一個翻翻卡的卡牌記憶小遊戲。
改良版新範例參考:翻翻卡、卡牌記憶 ( 2024 改良版 ),新範例改用分身的做法,讓程式更清楚好懂。
角色設定
在角色編輯區,刪除貓咪角色,使用繪畫,繪製新角色 ( 參考:造型與繪圖 )。
將新角色的第一個造型,繪製一個黃色的方形 ( 顏色可自行定義 ),作為卡牌的封面 ( cover ),接著新增三個造型,作為翻牌配對的圖案。
小技巧:如果擔心圖形位置不準確,可以先複製第一個造型,再複製新增的圖案,貼上到複製的造型上即可。
雖然有六張卡牌,但因為卡牌的程式都相同,所以先放置一張卡牌,所有程式都完成後,再複製出其他五張卡牌。
積木程式原理 ( 舞台 )
點擊「舞台」,將一開始的程式寫在「舞台」裡。
新增三個變數 ( 幾張卡、n 和 ok ) 和一個清單 ( 卡牌順序 )。
設定點擊綠旗的程式:
- 因為有六張卡,所以將變數「幾張卡」設定為 6 ( 方便未來增加卡片數量時可以調整 )。
- 因為卡片圖案從角色的「第二個」造型開始,所以將變數 n 設定為 2。
- 刪除清單「卡牌順序」的所有項目。
- 使用「重複幾次」積木,重複「幾張卡」的次數。
- 每次重複將「無條件捨去的 n」數值添加到「卡牌順序」。
- 每次重複將 n 增加 0.5。
因為卡牌的圖案兩兩相同,所以每次將 n 添加 0.5,再使用無條件捨去,就能做到兩兩相同的效果,例如 [2, 2.5, 3, 3.5, 4, 4.5] 就會變成 [2, 2, 3, 3, 4, 4]。
接著設計「打亂卡排順序」以及「開始遊戲」的程式:
- 使用「重複幾次」積木,重複「幾張卡 x 4」次。
- 每次重複將「卡牌順序」的「第一個項目」,插入到後方任何一項裡 ( 2~卡牌數量+1 )。
- 每次重複移除「卡牌順序」的「第一個項目」( 這個做法可以打亂卡排順序 )。
- 打亂卡排順序後,設定變數 ok 為 0 ( ok 變數為判斷圖案是否相同的變數 )。
- 廣播訊息「開始」。
這裡使用打亂順序的方式,是將第一個項目取出,例如 [2, 2, 3, 3, 4, 4] 就會變成 [2, 3, 3, 4, 4],再將第一個項目插入到後方隨機的位置,就可能會變成 [2, 3, 3, 2, 4, 4],當重複的次數夠多,清單順序就會完全被打亂。
積木程式原理 ( 卡牌 )
點擊卡牌角色,編輯「翻牌比對」的程式,首先當點擊綠旗時,顯示卡牌 ( 因為遊戲結束會隱藏卡牌,所以開始時要重新顯示 ),並將卡牌造型設定為封面 cover。
接著建立一個「僅適用當前角色」的變數,命名為「個別內容」。
「僅適用當前角色」的變數在改變數值時,不會影響到別的角色。
設定收到「開始」訊息時,將「個別內容」變數設定為「卡牌順序」的第一個項目,接著移除卡排順序的第一個項目 ( 如此就能保證不會和別張卡牌重複 )。
設定「當角色被點擊」的程式:
- 如果「造型編號」等於 1,表示卡牌還沒有翻開,可以執行翻牌程式。
- 將造型編號換成「個別內容」的數值。
- 判斷如果變數 ok 等於 0,表示舞台放沒有卡牌被翻開。
- 將變數 ok 設定為「個別內容」的數值。
- 如果變數 ok 不等於 0,表示舞台已經有卡牌被翻開。
- 判斷如果變數 ok 等於「個別內容」,表示圖案相同,發送「相同」的訊息。
- 判斷如果變數 ok 不等於「個別內容」,表示圖案不相同,就將 ok 設定為 0,發送「不同」的訊息。
設定收到「相同」訊息時的程式:
- 判斷變數 ok 是否等於「個別內容」。
- 如果等於「個別內容」,等待一秒後,隱藏卡牌。
- 接著將變數 ok 設定為 0。
為什麼要再次判斷變數 ok 是否等於「個別內容」?因為發送「相同」訊息時,舞台上所有的卡牌都會收到同樣的訊息,所以必須要再次進行判斷,確認相同後,再將變數 ok 設定為 0。
接著設定收到「不同」訊息時,等待一秒後將卡牌造型變成封面 cover。
最後,複製卡牌角色,並將複製出的卡牌,在舞台上排列整齊。
完成效果
完成後,點擊綠旗,就可以開始進行翻翻卡 ( 卡牌記憶 ) 的遊戲。
範例解答
範例解答:翻翻卡 ( 卡牌記憶 )
延伸練習
如果已經熟悉了翻翻卡 ( 卡牌記憶 )的原理,還可以嘗試更多好玩的作法:
- 沿用範例程式,將卡片變成 10 張。( 解答 )
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~