變數、清單
重點摘要:
『變數』類別積木中包含『變數』及『清單』,可將程式中的資料值記錄下來,而『變數』型態又分為『全域變數』及『角色變數』。
『清單』即為一般程式語言之『陣列』,是一群性質相同變數的集合,屬於循序性資料結構,清單中資料是一個接著一個的存放,稱其『元素』(如同變數般),每一元素是依序存放,故只要有該元素在清單中的位置編號,即可方便存取該元素值應用。
一、變數型態
全域變數:適用於所有角色,即所有角色都能存取該變數。
角色變數(即區域變數):僅適用當前角色,即只有建立該變數的角色可以存取。
二、新增變數
在指令區中,如下左圖,選取『變數』類別積木(Scratch 2.0 版為『資料』類別)→選取『建立一個變數』→輸入『變數名稱』→再選取『變數型態』(即【適用所有角色】或【僅適用當前角色】)→按下『確定』,如下右圖,即可新增一個變數;且指令區會自動產生變數可應用的積木。
Scratch 3.0 版:
Scratch 2.0 版:
三、設定變數的值
在「程式」面板中,可設定 count 變數的初始值為0(即【將變數count的值設為0】)。若勾選變數前方選項,即可在舞臺上顯示這個變數值,可拖曳改變其顯示位置。
在程式碼中,可將 count 變數值遞增累加 1(即【將變數count的值改變1】)或 遞減(即-1)。
四、變數顯示方式
在舞台上顯示變數值的模式如下圖,在舞台區的變數顯示框上按滑鼠右鍵,顯示【快顯功能表】即可選擇。
一般顯示:
大型顯示
滑桿:
→用滑動鈕設定最小與最大值。
分別輸入最小及最大值→按【確定】
一般顯示(normal readout):為系統預設的顯示模式,以變數名稱為標題,其右方顯示出變數值。
大型顯示(large readout)
滑桿(slider)
變更滑桿數值範圍:可改變滑桿之最小值及最大值。
滑桿範例應用:輸入兩點 (x1,y1)~(x2,y2) 即可運用畫筆繪製直線。如下圖: 分享→延伸閱讀:相同題目:改以『函式積木→做一個區塊』自訂積木指令來設計。
五、範例應用(變數)
範例1:接雞蛋遊戲。【重點:學會全域變數及變數累加(或累減)】。執行畫面如下圖。(檔名:var-1.sb3) 分享)
1.【場景設計】
(1)新增專案:先【檔案→新建專案】,再於『角色區』的『貓咪』角色身上【按下右滑鼠鍵→選取『刪除』】,即刪除貓咪的角色。
(2)舞台佈置:在舞台腳本區→背景→繪圖編輯器→在『填滿→選擇顏色及填色樣式』後→再選【填滿】(油漆桶)工具→背景上色。
(3)角色設定:
繪畫『雞蛋』:在角色區按下【 繪畫】→ 進入【繪圖工具】 編輯→以【圓形】繪製雞蛋,並命名為「egg」,如下圖 。
選個【音效】:使用系統內建音效,接住雞蛋→Pop.wav,沒接住音效→Laser2.wav。
『海綿寶寶』角色:【 開啟角色檔案】Scratch\Media\Costumes\Fantasy\fantasy14.png,命名為「海綿寶寶」, 只允許左、右翻轉,並縮小角色。
(4)變數設定:
設定1個全域變數【分數】:選取「變數」類別的積木→按下『建立一個變數』(即『產生一個變數』)→輸入『變數名稱:分數』→再選變數型態為『適用所有的角色』→按下『確定』。
2.【程式設計】
(1)「海綿寶寶」程式:選取「海綿寶寶」角色→再選取「程式」,編輯程式碼:Scratch 3.0 版程式碼→參閱連結。
Scratch 2.0 版:
Scratch 1.4 版:
(2)「egg」程式:選取「egg」角色→再選取「程式」,編輯程式碼,如下圖。
Scratch 2.0 版:
Scratch 1.4 版:
(3)接著在「egg」角色身上按下滑鼠右鍵,叫出快取功能表,選取「複製」,亦含該角色之程式碼,複製後角色為egg2,並修改雞蛋顏色。
複製角色:含該角色之程式碼。
修改雞蛋egg2 的顏色
3.【測試程式】:按下螢幕上方綠旗 按鈕開始執行程式,左右水平移動滑鼠即可移動「海綿寶寶」角色,當接住落下的雞蛋,則分數亦同步累加計分。
延伸思考1:呈上題,egg以角色分身積木設計。【重點:學會全域變數及角色分身積木之設計與應用】。執行畫面如下圖。(檔名:var-1_clone.sb3) 分享
【程式設計】
(1) 『海綿寶寶』 角色程式碼同上題。
(2)『雞蛋』角色身上編輯程式碼:
「egg」程式:選取「egg」角色→再選取「程式」,編輯程式碼,如下圖。
「egg」程式
eeg2:
延伸思考2:
(1) 如果雞蛋落地,即累減1分,可加快雞蛋落下之速度;此外,如果得分100,則停止程式執行,並計算需花費多少時間。【提示:『偵測』類別中計數器的應用】。執行結果畫面如下左圖。(檔名:var-1-2.sb3)
(2)承上題,以倒數計時的方式設計,請問30秒內可獲得幾分?此外,當時間到時(即30秒),舞台上會顯示出『時間到!』畫面,且遊戲結束。執行結果畫面如下右圖。(檔名:var-1-3.sb3) 分享
(1)檔名:var-1-2.sb3 執行結果畫面。
(2)檔名:var-1-3.sb3 『時間到』的畫面。
範例2:打地鼠遊戲。【重點:學會全域變數之應用】。執行畫面如下圖。(檔名:var-2.sb3) 分享
題目說明:
(1) 地板上有五個地洞,地鼠會隨機的冒出地洞,你可以利用鎚子敲打地鼠,並計算擊中地鼠的次數。
(2) 槌子會隨著滑鼠移動,當槌子擊中地鼠,擊中次數會累加1次,地鼠會發出音效,並說擊中第幾次。
*註:背景圖例:
地洞,角色: 灰鼠, 綠鼠。
1.【設計大綱圖】
2.【場景設計】
(1)新增專案:先【檔案→新建專案】,再於『角色區』的『貓咪』角色身上【按下右滑鼠鍵→選取『刪除』】,即刪除貓咪的角色。
(2)舞台佈置:背景→編輯→開啟【繪圖工具】→【橢圓】工具繪製實心的橢圓,再用【 印章工具】複製成5個橢圓,作為地鼠出現的洞口。如下圖示。
Scratch 3.0 版
Scratch 2.0 版
(3)新增角色:
『槌子』角色:選取【 繪畫()繪製新角色→繪圖編輯器→線段及橢圓工具】繪製出槌子圖案,並命名『槌子』。
『地鼠』角色:完成1隻地鼠後,其餘4隻地鼠以複製的方式產出,並將其中兩隻填色為灰色。
造型:選取()先開啟角色檔案地鼠 Scratch\Media\Costumes\Animals\mouse1.png 再以繪圖工具將地鼠的身體擦掉,只留頭部。
音效:於「音效」面板匯入音效 Scratch\Media\Sounds\Effects→WaterDrop.mp3
(4)變數設定:選取【變數→建立一個變數→新增變數count,為全域變數(適用所有的角色)】,代表累加被擊中的次數。
3.【程式設計】
(1)在『舞台』身上編輯程式碼:在【腳本區】→選取【程式】,程式碼如下圖,將變數count 初值設為0。
Scratch 3.0 版
Scratch 2.0 版
(2)在『槌子』角色身上編輯程式碼:因槌子會隨著滑鼠移動,故在『腳本區』編輯程式碼,請選取【程式】再拖曳積木即可,如下圖,可增加『外觀→移至最上層』積木。
Scratch 3.0 版
Scratch 2.0 版
(3)在地鼠身上編輯程式碼:
地鼠不斷重複在地洞口隨機顯示與隱藏,當地鼠被擊中,即發出音效(WaterDrop.mp3)。
將寫好的地鼠程式碼拖曳『複製』給其他4隻地鼠(即地鼠1→背包→其他地鼠),讓每隻地鼠都具備程式碼,並分別修正其出現在不同座標的洞口。
程式碼,簡述如下圖。
Scratch 3.0 版:
mouse-1:
Scratch 2.0 版:
mouse-1:
mouse-4:
4.【測試程式】:按下螢幕上方綠旗 按鈕開始執行程式。
(1)『舞台』及『槌子』角色程式碼同上題。
(2)在地鼠身上編輯程式碼:
綠地鼠程式碼,如下圖。
Scratch 3.0 版:
Scratch 2.0 版:
灰地鼠程式碼,如下圖,即可按下【綠旗】→測試程式。
Scratch 3.0 版:
Scratch 2.0 版:
*註:呈上圖,若將【隱藏】積木更換為【刪除這個分身】積木,則該灰地鼠分身僅會出現一次。
延伸思考2:若角色以不同造型分別代表「地洞」、「灰鼠」、「綠鼠」,請設計打地鼠遊戲。【重點:學會全域變數及角色分身積木之設計與應用】。執行畫面如下圖。(檔名:var-2-2_clone.sb3) 分享
題目說明:
(1) 地板上有六個『地洞』,地鼠會隨機的冒出地洞,遊戲者可以利用滑鼠點擊地鼠,在30秒內得分狀況。
(2) 遊戲開始:
播放背景音效『 sound.mp3』,直到遊戲結束。畫面左上角顯示『剩餘時間』由30秒不斷遞減1秒,30秒結束即停止遊戲。
(3) 得分方式:
畫面右上角顯示得分,若擊中『灰鼠』則得2分,並發出『pop.』音效。
若擊中『綠鼠』則扣3分,並發出『WaterDrop.』音效。
*註:『遊戲背景音效』摘自 http://www.2gei.com/music/
*註:角色圖例:造型1:命名「地洞」 地洞(-92,60)、x軸:x+200、y軸:y-92,造型2:命名「灰鼠」 灰鼠,造型3:命名「綠鼠」 綠鼠。
範例3:測量BMI值。【重點:學會雙向選擇結構、『偵測』類別中 [詢問]&[答案]及全域變數之應用】。執行畫面如下圖。(檔名:var-3.sb3) 分享
詢問畫面:
執行畫面1:BMI太輕
執行畫面2:BMI標準
執行畫面3:BMI太重
題目說明:
(1) 分別輸入身高(公分)、體重(公斤)。
(2) BMI=體重(公斤) / (身高(公尺)×身高(公尺)) *註:1公尺=100公分
(3) BMI 值判斷:
1.【場景設計】
(1)新增專案:先【檔案→新建專案】,再於『角色區』的『貓咪』角色身上【按下右滑鼠鍵→選取『刪除』】,即刪除貓咪的角色。
(2)新增【ask】角色:請於系統內建圖檔中選個角色 ,造型名稱『詢問』,再分別選擇造型圖,如下圖示:
新增【ask】角色:
造型名稱:
→ 太輕
→ 標準
→ 太重
(3)新增3個變數:選取「變數」類別的積木→按下『建立一個變數』→輸入『變數名稱』→再選取『適用所有的角色』(即全域變數)→按下『確定』即可,變數名稱分別為 BMI、身高、體重。
Scratch 3.0 版:
Scratch 2.0 版:
*例如:將BMI設定為全域變數。
2.【程式設計】
(1)在舞台身上編輯程式碼:先點選【舞台】→再選取【程式】頁籤,程式碼如下圖,將3個變數初值設為0。
Scratch 3.0 版:
Scratch 2.0 版:
(2)在【ask】角色身上寫程式碼:選取「ask」角色→再選取【程式】頁籤,編輯程式碼如下:Scratch 3.0 版程式碼→參閱連結。
Scratch 2.0 版:
應用說明:
本範例應用『運算』類別中字串運算:
運用『偵測』類別中【詢問】&【詢問的答案】
運用巢狀雙向選擇結構
3.【測試程式】:按下螢幕上方綠旗 按鈕開始執行程式。
(1)輸入身高:170 後按下
(2)輸入體重:60 後按下
(3)說 BMI 值
→為合併[字串]與[數值]
(4)執行結果
鍵。
鍵。
六、清單
『清單』(List)就是一般程式語言中的『陣列』(array)),為同類型的資料,『清單』如同每戶住家之信箱,信箱以門牌號碼為編號,該編號即為清單的編號,屬於循序性資料結構,郵差只要依號碼投遞郵件,住戶即可在自己的信箱取得郵件。一般程式語言中陣列編號從0開始,而『清單』之起始值為1 。
七、範例應用(清單)
範例4:考考記憶。【重點:學會『資料』類別中『做一個清單』】。執行畫面如下圖。(檔名:List-1.sb3) 分享
【圖1】開始執行畫面:
【圖2】最後取得金鎖後,角色會依序說出所有寶物之名稱。
題目說明:
綠色路徑軌道
(2) 捷運路徑依序經過4個站台『淡水→紅樹林→竹圍→關渡』,如果『starfish』角色經過各站台,站台名稱會消失。
(3) 到達最後一站後,『starfish』角色會依序說出所有經過之站台名稱。
1.【設計大綱圖】
2.【場景設計】
(1)新增專案:先【檔案→新建專案】,再於『角色區』的『貓咪』角色身上【按下右滑鼠鍵→選取『刪除』】,即刪除貓咪的角色。
(2)舞台繪製:背景→編輯→進入【繪圖工具】 編輯→以【線段、橢圓等工具】畫出『綠色路徑軌道』及『站台圓形方位圖』。
(3)新增角色:
『starfish』角色:請於系統內建圖檔中選個角色,命名『starfish』有2個造型 starfish1-a、starfish1-b。
選取【 繪畫】繪製新角色:編輯→進入【繪圖工具】 編輯→以【橢圓、文字輸入等工具】繪製出站台名稱,並命名為『淡水』,其餘各角色可利用【複製】完成,並分別修改名稱為『紅樹林』、『竹圍』、『關渡』等站名,畫面如下圖 。
Scratch 3.0 版:
Scratch 2.0 版:
(4)新增變數【count】設定:代表經過的站台個數累計,選取「變數」類別的積木→按下『建立一個變數』→輸入『變數名稱:count』→再選取『適用所有的角色』(即全域變數)→按下『確定』。
Scratch 3.0 版:
Scratch 2.0 版:
(5)新增全域清單【站名清單】設定:代表經過的站台名稱清單,選取「變數」類別的積木→按下『建立一個清單』→輸入『列表名稱:站名清單』→按下『確定』,只要勾選積木指令區【站名清單】,如下圖,舞台上立即顯示『站名清單』之空白內容。
Scratch 3.0 版:
Scratch 2.0 版:
*註:將『站名清單』設定為同質性的全域變數之群駔。
Scratch 1.4 版:
勾選【站名清單】→會顯示列表之空白內容。
※ 註:一個變數,只能儲存一份資料;而『清單』如同一個大櫃子,可儲存許多同質性的變數,變數值可循序的放入櫃子內,以利依序號取出內容資料使用。
3.【程式設計】Scratch 3.0 版程式碼→參閱連結。
(1)安排『舞台』的程式:先選取「舞台」→再選取「程式」頁籤,編寫程式碼,如下圖;只需從『指令區』拖曳積木指令到腳本區的程式面板。
Scratch 3.0 版:
Scratch 2.0 版:
※ 註:將變數及清單之值歸零。
(2)安排『站台』角色的程式:選取『淡水』角色→再選取「程式」,編寫程式碼,其餘各角色可利用拖曳程式碼【複製】積木,並修改各站台定位座標,如下圖。
Scratch 2.0 版:『淡水』角色程式碼
Scratch 1.4 版:
『竹圍』角色程式碼:
(3)安排『starfish』角色的程式:選取「程式」,編寫程式碼,如下圖:
Scratch 2.0 版:程式碼。
Scratch 1.4 版:程式碼。
*註:count 代表經過的站台個數累計,【站名清單】代表經過的站台名稱列表。下面圖示,兩者執行結果皆相同。
【圖1】以重複結構依序顯示【站名清單】列表內容。
【圖2】循序顯示【站名清單】列表內容。
4.【測試程式】:按下螢幕上方綠旗 按鈕開始執行程式。
範例5:樂透遊戲。【重點:學會『變數』類別中『建立一個清單』及『建立一個變數』的設計與應用】。執行畫面如下圖。(檔名:List-2.sb3) 分享
題目說明:
(1)從1~49數值中以亂數抽出6個不重複之號碼為一組中獎號碼,亦稱「獎號」。
(2)開獎時由 Pico 說出「獎號」。
1.【場景設計】
(1)新增專案:先【檔案→新建專案】,再於『角色區』的『貓咪』角色身上【按下右滑鼠鍵→選取『刪除』】,即刪除貓咪的角色。
(2)舞台佈置:新背景:選擇背景→在背景範例庫中→佈景主題:節日→party→確定。
(3)角色設定:如下圖。
建立【數字】全域變數:選取「變數」類別的積木→按下『建立一個變數』→輸入『變數名稱:數字』→再選變數型態為『適用所有的角色』→按下『確定』,為暫存的元素,即清單的編號。
建立【獎號】全域變數:選取「變數」類別的積木→按下『建立一個變數』→輸入『變數名稱:獎號』→再選變數型態為『適用所有的角色』→按下『確定』,為儲存抽中的號碼,請勾選積木指令區【獎號】,並將獎號拖曳移至舞台的右下方。
(4)新增全域清單【所有號碼】設定:如下圖「變數」類別的積木→按下『建立一個清單』→輸入『清單名稱:所有號碼』→再選清單型態為『適用所有的角色』→按下『確定』,為儲存1到49之數值。
2.【程式設計】Scratch 3.0 版程式碼→參閱連結。
(1)「Pico」程式:選取「Pico」角色→再選取「程式」,編輯程式碼,如下圖。
作業2:射擊蝙蝠遊戲 (Ⅲ),承上題,若每隻蝙蝠各安排一個 life 變數(區域變數),記錄其生命點數,如果蝙蝠被擊中三次,才會消失,否則漸變透明,執行畫面如下圖。【 重點:學會區域變數的累加,及選擇與重複結構之綜合應用】。(檔名:var-6_bat.sb3)
作業3:迷宮尋寶遊戲。【重點:學會『變數』類別中『建立一個清單』之應用】。執行畫面如下圖。(檔名:List-3.sb3) 分享
【圖1】開始執行畫面:
【圖2】最後取得金鎖後,貓咪會依序說出所有寶物之名稱。
題目說明:
(1) 按下綠旗開始執行,使用鍵盤方向鍵控制貓咪在迷宮中,貓咪只能在黑色路徑內上、下、左、右移動。
(2) 迷宮中有3個寶物『球、香蕉、金鎖』,取得寶物後寶物會消失。
球:Scratch\Media\Costumes\Things\beachball1.png
香蕉:Scratch\Media\Costumes\Things\bananas1.png
金鎖:Scratch\Media\Costumes\Things\key1.png
(3) 最後取得金鎖後,貓咪會說出所有寶物之名稱。
作業4:遊戲者和電腦玩猜拳遊戲: 剪刀、石頭、布,如下圖,獲勝者得1分。【重點:學會變數累加,並結合『廣播→當接收到』等綜合應用】。(檔名:var-7_猜拳.sb3) 分享
遊戲開始畫面:
雙方猜拳後,顯示畫面:
題目說明:【參閱:設計大綱圖】。
(1)遊戲開始Pico 說:『按上方圖案出拳!』
(2)遊戲者點選上方剪刀、石頭、布,該圖示會變大,即代表遊戲者出拳。
(3)若遊戲者與電腦出拳相同,Pico會說:『平手!』
(4)若遊戲者獲勝,Pico會說『我贏了!我得1分!』,並顯示遊戲者得分。
(5)若電腦獲勝,Pico會說『我輸了!電腦得1分!』,並顯示電腦得分。
作業5:夾娃娃遊戲。【重點:學會全域變數、角色分身積木之設計與應用】。執行畫面如下圖。(檔名:var-8_夾娃娃.sb3) 分享
題目說明: 夾子、箱子。【參閱:設計大綱圖】。
(1)當滑鼠按下『 $ 』投幣圖示,即遊戲開始,夾子會左右移動,並隱藏『 $ 』投幣圖示。
(2)每次夾完,顯示『 $ 』投幣圖示,等待再投幣。
(3)每按一次『 $ 』投幣,夾一次『飾品』。
(4)當夾子瞄準好『飾品』,按下滑鼠,夾子會往下將飾品夾起,並丟進箱子裡。
(5)當飾品被夾完,則自動由箱子倒出『飾品』,並隱藏夾子。
遊戲開始畫面:
夾子夾起飾品:
並丟進箱子: