搖骰子 ( 可選擇 1~3 個 )
在「搖骰子」的文章中已經可以操作單一個骰子,這篇教學會運用 Scratch 做出多個骰子的實例,並讓使用者自己選擇 1~3 顆骰子,最後在畫面中顯示骰子的總點數。
繪製角色
使用「繪畫」方式新增一個名為「dice」的骰子角色,運用向量繪圖工具繪製六個造型,分別是骰子 1~6 點六個面的正方形,正方形的中心點對齊畫布中心點,六個面的造型名稱分別設定為「1~6」。
小技巧:先畫「一點」的造型,再使用複製造型後修改點數,就能讓每個造型都固定位置和大小。
使用「繪畫」方式新增一個名為「btn」的按鈕角色,負責讓使用者切換 1~3 個骰子,運用向量繪圖工具繪製三個圓形按鈕,上面分別寫上 1~3,正方形的中心點對齊畫布中心點。
使用「繪畫」方式新增一個名為「btn_start」的按鈕角色,負責讓使用者點擊之後會開始搖骰子,運用向量繪圖工具繪製一個長方形,上面放入文字「搖骰子」,中心點對齊畫布中心點。
使用「繪畫」方式新增一個名為「result」的文字角色,負責顯示最後骰子的總點數,運用向量繪圖工具新增 19 個造型,分別是「點數:1」一直到「點數:18」,最後一個造型是「點數:---」,造型名稱使用「1~18」,最後一個造型名稱設定為「0」。
小技巧:因為文字預設都是「置中對齊」,為了方便「靠左對齊」,可以將「位置:」和「數字」拆成兩個文字物件,如此一來會比較容易調整位置。
積木程式原理 ( btn_start 按鈕 )
點擊「btn_start」角色,設定點擊綠旗時,定位並發送 run 廣播訊號,表示開始骰子骰子。
積木程式原理 ( btn 按鈕 )
點擊「btn」角色,設定點擊綠旗時,位置固定在舞台左上方,並設定造型為 1、亮度 70。
新增一個名為「產生選擇按鈕」的函式,勾選「執行完畢再更新畫面」,這個步驟可以快速執行內容的積木。
使用「隱藏本尊」搭配「建立分身」的方式,透過切換造型的方法,依序往右建立三個分別是 1、2、3 的分身按鈕。
從左側積木選單裡,建立 btn 和 btn_local 兩個變數。
注意!由於 btn_local 需使用「區域變數」,所以要勾選「僅適用當前角色」( 參考「全域變數、區域變數」 )。
運用區域變數 btn_local 搭配分身,就能讓不同的分身的 btn_local 具有不同數值 ( 參考「控制指定分身」 ),接著就能根據數字,要求 btn_local 為 1 的分身恢復正常亮度,執行後,舞台中的按鈕就只有第一顆會恢復成原本的亮度。
使用「重複無限次」搭配「邏輯判斷」,製作點擊分身的程式,當分身被點擊時,將 btn 的數值更換為分身區域變數的 btn_local 數值,同時發送 click 廣播訊息以及分身的名稱 ( 1~3 ),表示現在畫面上要出現幾個骰子。
接著設定收到 click 廣播訊息時 ( 每個分身都會收到 ),讓分身判斷自己的 btn_local 變數是否等於 btn 變數數值,如果相等 ( 表示點擊 ),就恢復正常亮度,如果不相等 ( 表示沒有點擊 ),就提高亮度。
執行後,點擊不同的按鈕,該按鈕就會呈現不同的顏色。
積木程式原理 ( dice 骰子 )
點擊「dice」角色,設定點擊綠旗時,位置固定在舞台中心,接著隱藏本尊 ( 待會會用分身呈現 ),將造型設定為 1,並發送 1 的廣播訊息,表示舞台上現在只有一顆骰子,新增 num 變數預設為 1,表示現在畫面上是 1 點 ( 注意,這邊兩個 1 是不同的意義,廣播訊息表示有幾個骰子,num 是指現在點數幾點 )。
設定收到廣播訊息 1 時,設定 x 座標並產身分身,收到廣播訊息 2 時,設定兩個座標並產生兩個分身,收到廣播訊息 3 時,設定三個座標並產生三個分身,收到廣播訊息 click 時,表示要更換畫面中骰子數量,只要刪除分身就能清空 ( 在另外一個按鈕,會等待 click 完成後再發送 1、2、3 的廣播訊息 )。
設定收到廣播訊息 run 時開始骰骰子,正在骰的時候設定 num 點數為 0,並尋找一個適合骰子的音效播放。接著設定產生分身時顯示分身,使用重複無限次積木搭配等待,當 num 為 0 時更換 10 次隨機造型,接著將 num 增加最後一個造型的點數,完成後發送 result 廣播訊息。
完成後點擊切換骰子數量按鈕,骰子數量就會跟著改變。
積木程式原理 ( result 結果顯示 )
點擊「result」角色,設定點擊綠旗時,造型換成 1 點,接著按照下圖,設定收到不同的廣播訊息時,更換成對應的點數造型。
完成結果
全部完成後,點擊綠旗,就可以開始進行骰骰子的遊戲,並可以切換 1~3 顆骰子。
延伸練習
如果已經熟悉了搖骰子的原理,還可以嘗試更多好玩的作法:
- 使用「文子轉語音」的功能,唸出目前的點數。
- 讓骰子隨機的速度從快到慢。
- 讓三個骰子停止的時間不相同。
意見回饋
如果有任何建議或問題,可傳送「意見表單」給我,謝謝~