變數、清單

2012/08/01 謝碧景(c)編製更新

學習目標:

  • 瞭解全域變數與區域變數的意義與運用。

  • 學會『變數』類別中『建立一個變數』及『建立一個清單』之設計與應用。

  • 學會『變數』類別中【變數】與【清單】的差異性及其程式的設計與應用。

  • 學會『偵測』類別中【詢問】&【答案】及全域變數之應用。

重點摘要:

  • 『變數』類別積木中包含『變數』及『清單』,可將程式中的資料值記錄下來,而『變數』型態又分為『全域變數』及『角色變數』。

  • 『清單』即為一般程式語言之『陣列』,是一群性質相同變數的集合,屬於循序性資料結構,清單中資料是一個接著一個的存放,稱其『元素』(如同變數般),每一元素是依序存放,故只要有該元素在清單中的位置編號,即可方便存取該元素值應用。

一、變數型態

  1. 全域變數:適用於所有角色,即所有角色都能存取該變數。

  2. 角色變數(即區域變數):僅適用當前角色,即只有建立該變數的角色可以存取。

二、新增變數

  • 在指令區中,如下左圖,選取『變數』類別積木(Scratch 2.0 版為『資料』類別)→選取『建立一個變數』→輸入『變數名稱』→再選取『變數型態』(即【適用所有角色】或【僅適用當前角色】)→按下『確定』,如下右圖,即可新增一個變數;且指令區會自動產生變數可應用的積木。

Scratch 3.0 版:

Scratch 2.0 版:

三、設定變數的值

  • 在「程式」面板中,可設定 count 變數的初始值為0(即【將變數count的值設為0】)。若勾選變數前方選項,即可在舞臺上顯示這個變數值,可拖曳改變其顯示位置。

  • 在程式碼中,可將 count 變數值遞增累加 1(即【將變數count的值改變1】)或 遞減(即-1)。

四、變數顯示方式

    • 在舞台上顯示變數值的模式如下圖,在舞台區的變數顯示框上按滑鼠右鍵,顯示【快顯功能表】即可選擇。

一般顯示:

大型顯示

滑桿:

→用滑動鈕設定最小與最大值。

分別輸入最小及最大值→按【確定】

      • 一般顯示(normal readout):為系統預設的顯示模式,以變數名稱為標題,其右方顯示出變數值。

      • 大型顯示(large readout)

      • 滑桿(slider)

      • 變更滑桿數值範圍:可改變滑桿之最小值及最大值。

五、範例應用(變數)

範例1:接雞蛋遊戲。【重點:學會全域變數及變數累加(或累減)】。執行畫面如下圖。(檔名:var-1.sb3) 分享)

  • 題目說明:

(1) 按下綠旗開始執行,「海綿寶寶」面向雞蛋,跟著滑鼠左右水平移動,如果接到雞蛋則發出音效,雞蛋自動消失,分數亦自動累加1。

(2) 雞蛋由上往下掉落,如果雞蛋落地會發出音效,並消失(即隱藏)。

注意:滑鼠僅能在螢幕上左右水平移動,非按下或拖曳滑鼠。

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:呈上題,地鼠以角色分身積木設計,打地鼠遊戲。【重點:學會全域變數及角色分身積木之設計與應用】。執行畫面如下圖。(檔名:var-2-1_clone.sb3) 分享

    • 【程式設計】

(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】最後取得金鎖後,角色會依序說出所有寶物之名稱。

題目說明:

(1) 遊戲方式:使用【鍵盤之方向鍵】控制『starfish』角色只能在綠色路徑內向右移動(如果按上鍵、下鍵、左鍵,則維持原地綠色路徑軌道內)。

綠色路徑軌道

(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.【測試程式】:按下螢幕上方綠旗 按鈕開始執行程式。

延伸思考:請依據 臺北捷運路線圖為交錯型且更多站台名稱的記憶。 (檔名:List-1_memory.sb3)

範例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」角色→再選取「程式」,編輯程式碼,如下圖。

3.【測試程式】:按下螢幕上方綠旗 按鈕開始執行程式。

作業1:射擊蝙蝠遊戲 (Ⅱ),延續【選擇結構→作業】,執行畫面如下圖。【重點:學會全域變數的累加,及選擇與重複結構之綜合應用】。(檔名:var-5_bat.sb3) 分享

    • 題目說明:

(1) 按下綠旗開始執行,瞄準跟隨著滑鼠移動,當按下滑鼠,則顯示『發射』,否則顯示『準心』圖案。

(2) 當蝙蝠被擊中,計分個數累加1,並顯示出擊中個數,遊戲期間天色亮度會漸變暗。

(3) 如果擊中5隻蝙蝠則舞台顯示『過關』,否則繼續射擊蝙蝠,並判斷遊戲是否過關。

作業2:射擊蝙蝠遊戲 (Ⅲ),承上題,若每隻蝙蝠各安排一個 life 變數(區域變數),記錄其生命點數,如果蝙蝠被擊中三次,才會消失,否則漸變透明,執行畫面如下圖。【 重點:學會區域變數的累加,及選擇與重複結構之綜合應用】。(檔名:var-6_bat.sb3)

    • 題目說明:

(1) 按下綠旗開始執行,瞄準跟隨著滑鼠移動,當按下滑鼠,則顯示『發射』,否則顯示『準心』圖案。

(2) 若每隻蝙蝠各安排一個 life 變數(區域變數),記錄其生命點數,如果蝙蝠被擊中一次,計分個數累加1,被擊中三次,蝙蝠會消失,否則漸變透明,遊戲期間天色亮度會漸變暗。

(3) 如果擊中5隻蝙蝠則舞台顯示“過關”,否則繼續射擊蝙蝠,並判斷遊戲是否過關。

(4) 分別顯示出擊中蝙蝠個數,及每隻蝙蝠之生命點數。

作業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)當飾品被夾完,則自動由箱子倒出『飾品』,並隱藏夾子。

遊戲開始畫面:

夾子夾起飾品:

並丟進箱子: