Scratch‎ > ‎

資料:變數、清單

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

 學習目標:

  • 瞭解全域變數與區域變數的意義與運用。
  • 學會『資料』類別中『做一個變數』及『做一個清單』之設計與應用。
  • 學會『資料』類別中【變數】與【清單】的差異性及其程式的設計與應用。
  • 學會『偵測』類別中【提問】&【答案】及全域變數之應用

 重點摘要:

  • 『資料』類別積木中包含『變數』及『清單』,可將程式中的資料值記錄下來,而『變數』型態又分為『全域變數』及『角色變數』。
  • 『清單』即為一般程式語言之『陣列』,是一群性質相同變數的集合,屬於循序性資料結構,清單中資料是一個接著一個的存放,稱其『元素』(如同變數般),每一元素是依序存放,故只要有該元素在清單中的位置編號,即可方便存取該元素值應用。

一、變數型態 Scratch官網 http://scratch.mit.edu

  1. 全域變數:適用於所有角色,即所有角色都能存取該變數。
  2. 角色變數(即區域變數):只適用於某角色,即只有建立變數的角色可以存取。

二、新增變數

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

Scratch 1.4 版:
var-name


三、設定變數的值

  • 在「程式」面板中,可設定 count 變數的初始值為0(即【將變數count的值設為0】)。若勾選變數前方選項,即可在舞臺上顯示這個變數值,可拖曳改變其顯示位置。
  • 在程式碼中,可將 count 變數值遞增累加 1(即【將變數count的值改變1】)或 遞減(即-1)。
var
if-ex3-ans 

四、變數顯示方式

  • 在舞台上顯示變數值的模式如下圖,在舞台區的變數顯示框上按滑鼠右鍵,顯示【快顯功能表】即可選擇。
一般顯示:
 大型顯示:
 
 滑桿:
 →用滑動鈕設定最小與最大值。
 分別輸入最小及最大值
按【確定】

    • 一般顯示(normal readout):為系統預設的顯示模式,以變數名稱為標題,其右方顯示出變數值。
    • 大型顯示(large readout)
    • 滑桿(slider)
    • 隱藏(hide)

五、範例應用(變數)

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

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

(2) 雞蛋由上往下掉落,如果雞蛋落地會發出音效,並消失(即隱藏)。
 
注意:滑鼠僅能在螢幕上左右水平移動,非按下或拖曳滑鼠。
 

1.【場景設計】

(1)開新檔案:先【檔案→開新檔案】,再於『角色區』的『貓咪』角色身上【按下右滑鼠鍵→選取『刪除』】,即刪除貓咪的角色。

(2)舞台佈置:在舞台腳本區→背景→編輯→繪圖編輯器→填色工具→選擇顏色→確定。

(3)角色設定:
  • 『雞蛋』角色:在角色區按下【() 繪製新角色】按鈕, 編輯→ 進入【繪圖工具】 編輯→以【橢圓工具】畫出雞蛋,並命名為「egg」,畫面如下圖 。
進入【聲音】匯入音效,接住雞蛋Scratch\Media\Sounds\Effects\Pop.wav,沒接住音效Scratch\Media\Sounds\Electronic\Laser2.wav。
pain-egg
egg-role
egg-sounds
  • 『海綿寶寶』角色:  開啟角色檔案】Scratch\Media\Costumes\Fantasy\fantasy14.png,命名為「海綿寶寶」, 只允許左、右翻轉,並縮小角色。
(4)變數設定:
  • 設定1個全域變數【分數】:選取「資料」類別的積木→按下『做一個變數』(即『產生一個變數』)→輸入『變數名稱:分數』→再選變數型態為『適用所有的角色』→按下『確定』。
分數變數


2.【程式設計

(1)海綿寶寶」程式:選取「海綿寶寶」角色→再選取「程式」,編輯程式碼:

(2)egg」程式:選取「egg」角色→再選取「程式」,編輯程式碼,如下圖

Scratch 2.0 版:
  Scratch 1.4 版:
egg-program

(3)接著在egg」角色身上按下滑鼠右鍵,叫出快取功能表,選取「複製」,亦含該角色之程式碼,複製後角色為egg2,並修改雞蛋顏色。

複製角色:含該角色之程式碼。
 修改雞蛋egg2 的顏色


3.【測試程式】:按下螢幕上方綠旗 按鈕開始執行程式,左右水平移動滑鼠即可移動海綿寶寶」角色,當接住落下的雞蛋,則分數亦同步累加計分。


延伸思考1:呈上題,地鼠以角色分身積木設計,打地鼠遊戲。【重點:學會全域變數及角色分身積木之設計與應用】。執行畫面如下圖。(檔名:var-1_clone.sb2 分享

  • 【程式設計
(1)
『海綿寶寶』
角色程式碼同上題。

(2)
『雞蛋』角色身上編輯程式碼:
  • egg」程式:選取「egg」角色→再選取「程式」,編輯程式碼,如下圖
「egg」程式
 eeg2:


延伸思考2:

(1) 如果雞蛋落地,即累減1分,可加快雞蛋落下之速度;此外,如果得分100,則停止程式執行,並計算需花費多少時間。【提示:『偵測』類別中計數器的應用】。執行結果畫面如下左圖。(檔名:var-1-2.sb2)  分享

(2)承上題,以倒數計時的方式設計,請問30秒內可獲得幾分?此外,當時間到時(即30秒),舞台上會顯示出『時間到!』畫面,且遊戲結束。執行結果畫面如下右圖。(檔名:var-1-3.sb2)  分享

 (1)檔名:var-1_timer-1.sb2 執行結果畫面。   (2)檔名:var-1_timer-2.sb2 『時間到』的畫面。



 範例2:打地鼠遊戲。【重點:學會全域變數之應用】。執行畫面如下圖。(檔名:var-2.sb2)  分享

 題目說明:
    (1) 地板上有五個地洞,地鼠會隨機的冒出地洞,你可以利用鎚子敲打地鼠,並計算擊中地鼠的次數。
    (2) 槌子會隨著滑鼠移動,當槌子擊中地鼠,擊中次數會累加1次,地鼠會發出音效,並說擊中第幾次。 

1.設計大綱圖
https://sites.google.com/site/jingprogram/sb2_var-2_%E6%89%93%E5%9C%B0%E9%BC%A0%E5%A4%A7%E7%B6%B1.png


2.【場景設計】

(1)開新檔案:先【檔案→開新檔案】,再於『角色區』的『貓咪』角色身上【按下右滑鼠鍵→選取『刪除』】,即刪除貓咪的角色。

(2)舞台佈置:背景→編輯→開啟【繪圖工具】→【橢圓】工具繪製實心的橢圓,再用【 印章工具】複製成5個橢圓,作為地鼠出現的洞口。如下圖示。

打地鼠遊戲-舞台

(3)新增角色:


  • 『槌子』角色:選取【()繪製新角色→繪圖編輯器→線段及橢圓工具】繪製出槌子圖案,並命名『槌子』。
  • 『地鼠』角色:完成1隻地鼠後,其餘4隻地鼠以複製的方式產出,並將其中兩隻填色為灰色。
    • 造型:選取()先開啟角色檔案地鼠 Scratch\Media\Costumes\Animals\mouse1.png 再以繪圖工具將地鼠的身體擦掉,只留頭部。
    • 音效:於「音效」面板匯入音效 Scratch\Media\Sounds\Effects→WaterDrop.mp3


(4)變數設定選取【資料→做一個變數新增變數count,為全域變數(適用所有的角色)】,代表累加被擊中的次數。


3.【程式設計


(1)在『舞台』身上編輯程式碼:在【腳本區】→選取【程式】,程式碼如下圖,將變數count 初值設為0。


(2)在『槌子』角色身上編輯程式碼:因槌子會隨著滑鼠移動,故在『腳本區』編輯程式碼,請選取【程式】再拖曳積木即可,如下圖,可增加『外觀→移至最上層』積木。


(3)在地鼠身上編輯程式碼:
    • 地鼠不斷重複在地洞口隨機顯示與隱藏,當地鼠被擊中,即發出音效(WaterDrop.mp3)。
    • 將寫好的地鼠程式碼拖曳『複製』到其他4隻地鼠身上,讓每隻地鼠都具備程式碼,並分別修正其出現在不同座標的洞口。
    • 程式碼,簡述如下圖。
mouse-1:
mouse-4:

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


延伸思考1:呈上題,地鼠以角色分身積木設計,打地鼠遊戲。【重點:學會全域變數及角色分身積木之設計與應用】。執行畫面如下圖。(檔名:var-2-1_clone.sb2)  分享
    • 【程式設計

(1)『舞台』及『槌子』角色程式碼同上題。

(2)在地鼠身上編輯程式碼:
    • 綠地鼠程式碼,如下圖。
    • 灰地鼠程式碼,如下圖,即可按下【綠旗】→測試程式。

*註:呈上圖,若將【隱藏】積木更換為【刪除這個分身】積木,則該灰地鼠分身僅會出現一次。


延伸思考2:若角色以不同造型分別代表「地洞」、「灰鼠」「綠鼠」,請設計打地鼠遊戲。【重點:學會全域變數及角色分身積木之設計與應用】。執行畫面如下圖。(檔名:var-2-2_clone.sb2)  分享

 題目說明:
(1) 地板上有六個地洞』,地鼠會隨機的冒出地洞,遊戲者可以利用滑鼠點擊地鼠,在30秒內得分狀況。
(2) 遊戲開始:
  • 播放背景音效『dload sound.mp3』,直到遊戲結束。
  • 畫面左上角顯示『剩餘時間』由30秒不斷遞減1秒,30秒結束即停止遊戲。
(3) 得分方式:
    • 畫面右上角顯示得分,擊中『灰鼠』則得2分,並發出『pop.』音效。
    • 擊中『綠鼠』則扣3分,並發出『WaterDrop.』音效。
 *註:『遊戲背景音效』摘自 http://www.2gei.com/music/ 

角色圖例:造型1:命名「地洞」dload 地洞(-92,60)、x軸:x+200、y軸:y-92造型2:命名「灰鼠」dload 灰鼠造型3:命名「綠鼠」dload 綠鼠




 範例:測量BMI值。【重點:學會雙向選擇結構、『偵測』類別中 [提問]&[答案]及全域變數之應用】。執行畫面如下圖。(檔名:var-3.sb2)  分享

詢問畫面:
 執行畫面1:BMI太輕
 執行畫面2:BMI標準
 執行畫面3:BMI太重
  • 題目說明:
(1) 分別輸入身高(公分)、體重(公斤)。
(2) BMI=體重(公斤) / (身高(公尺)×身高(公尺))      *註:1公尺=100公分
(3) BMI 值判斷:

 身體質量指數  是否符合理想體重,顯示訊號
 BMI<18.5  你太瘦了,要多吃些,加油!
 18.5≦BMI<24  太棒了!標準體重喔!
 24≦BMI  你太重了,該減肥囉!

1.【場景設計】

(1)開新檔案:先【檔案→開新檔案】,再於『角色區』的『貓咪』角色身上【按下右滑鼠鍵→選取『刪除』】,即刪除貓咪的角色。
(2)新增【ask】角色:匯入圖片,
選取 ()開啟角色檔案】Scratch\Media\Costumes\People\royalperson.png ,造型名稱『詢問』,再分別匯入造型圖:

 新增【ask】角色:


造型名稱:
  • 太輕:匯入 Scratch\Media\Costumes\People\boycurly.png

  • 標準:匯入 Scratch\Media\Costumes\People\boyshorts.png

  • 太重:匯入 Scratch\Media\Costumes\People\roundman.png
 
(3)新增3個變數:選取「資料」類別的積木→按下『做一個變數』→輸入『變數名稱』→再選取『適用所有的角色』(即全域變數)→按下『確定』即可,變數名稱分別為 BMI、身高、體重。

Scratch 2.0 版:
 
 

*例如:將BMI設定為全域變數。
 Scratch 1.4 版:


2.【程式設計

(1)在舞台身上編輯程式碼:在【腳本區】→選取【程式】,程式碼如下圖,將3個變數初值設為0。


(2)在【ask】角色身上寫程式碼:選取「ask」角色→再選取「程式」,編輯程式碼如下:

 應用說明:
  •  本範例應用『運算』類別中字串運算:
 


  • 運用『偵測』類別中【提問】&【答案】


  • 運用巢狀雙向選擇結構

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

 
  (1)輸入身高:170 後按下  鍵。  (2)輸入體重:60 後按下  鍵。   (3)說 BMI 值
 →為合併[字串]與[數值] 
 (4)執行結果 


六、清單

『清單』(List)就是一般程式語言中的『陣列』(array)),為同類型的資料,『清單』如同每戶住家之信箱,信箱以門牌號碼為編號,該編號即為清單的編號,屬於循序性資料結構,郵差只要依號碼投遞郵件,住戶即可在自己的信箱取得郵件。一般程式語言中陣列編號從0開始,而清單之起始值為1 (Scratch 線上版)。

七、範例應用(清單)

 範例4:考考記憶。【重點:學會『資料』類別中『做一個清單』】。執行畫面如下圖。(檔名:List-1.sb2)  分享

【圖1】開始執行畫面:   【圖2】最後取得金鎖後,貓咪會依序說出所有寶物之名稱。 
 題目說明:

(1) 遊戲方式:使用【鍵盤之方向鍵】控制『starfish』角色只能在綠色路徑內向右移動(如果按上、下鍵、左鍵,則維持原地綠色路徑軌道內)。 綠色路徑軌道
(2) 捷運路徑依序經過4個站台『淡水→紅樹林→竹圍→關渡』,如果『starfish』角色經過各站台,站台名稱會消失。
(3) 到達最後一站後,『starfish』角色會依序說出所有經過之站台名稱。

1.設計大綱圖
https://sites.google.com/site/jingprogram/sb2_List-1_%E8%80%83%E8%80%83%E8%A8%98%E6%86%B6%E5%A4%A7%E7%B6%B1.png


2.
【場景設計】

(1)開新檔案:先【檔案→開新檔案】,再於『角色區』的『貓咪』角色身上【按下右滑鼠鍵→選取『刪除』】,即刪除貓咪的角色。

(2)舞台繪製:背景→編輯→進入【繪圖工具】 編輯→以【線段、橢圓等工具】畫出『綠色路徑軌道』及『站台圓形方位圖』。


                        
(3)新增角色:
『starfish』角色:選取 ()開啟角色檔案】命名『starfish』有2個造型 Scratch\Media\Costumes\Animals\starfish1-a.png、starfish1-b.png。
在角色區按下【()繪製新角色】按鈕, 編輯→進入【繪圖工具】 編輯→以【橢圓、文字輸入等工具】繪製出站台名稱,並命名為『淡水』,其餘各角色可利用【複製】完成,並分別修改名稱為『紅樹林』、『竹圍』、『關渡』,畫面如下圖 。



(4)新增變數【count】設定:代表經過的站台個數累計,選取「資料」類別的積木→按下『做一個變數』→輸入『變數名稱:count』→再選取『適用所有的角色』(即全域變數)→按下『確定』。

Scratch 2.0 版:
 Scratch 1.4 版:


(5)新增全域清單【站名清單】設定代表經過的站台名稱清單,選取「資料」類別的積木→按下『做一個清單』→輸入『列表名稱:站名清單』→按下『確定』,只要勾選積木指令區【站名清單】,如下圖,舞台上立即顯示『站名清單』之空白內容。

Scratch 2.0 版:

 
 *註:將『站名清單』設定為同質性的全域變數之群駔。
 Scratch 1.4 版:
 勾選【站名清單】→會顯示列表之空白內容。

※ 註:一個變數,只能儲存一份資料;而『清單』如同一個大櫃子,可儲存許多物品,物品可循序的放入櫃子內,以利依序號取出內容資料使用。


3.【程式設計】

(1)安排『舞台』的程式:先選取「舞台」→再選取「程式」,編寫程式碼,如下圖;只需從『指令區』拖曳積木指令到腳本區的程式面板。

 ※ 註:將變數及清單之值歸零。


(2)安排『站台』角色的程式:選取『淡水』角色→再選取「程式」,編寫程式碼,其餘各角色可利用拖曳程式碼【複製】積木,並修改各站台定位座標,如下圖。

Scratch 2.0 版:『淡水』角色程式碼
 Scratch 1.4 版:


『竹圍』角色程式碼:
 



(3)安排『starfish』角色的程式:選取「程式」,編寫程式碼,如下圖:
Scratch 2.0 版:程式碼。

Scratch 1.4 版:程式碼。

*註:count 代表經過的站台個數累計,【站名清單】代表經過的站台名稱列表。下面圖示,兩者執行結果皆相同。

【圖1】以重複結構依序顯示【站名清單】列表內容。
【圖2】循序顯示【站名清單】列表內容。

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

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



 範例5:樂透遊戲。【重點:學會『資料』類別中『做一個清單』及『做一個變數』的設計與應用】。執行畫面如下圖。(檔名:List-2.sb2)  分享

  • 題目說明:
(1)從1~49數值中以亂數抽出6個不重複之號碼為一組中獎號碼,亦稱「獎號」。
(2)開獎時由 Pico 說出「獎號」。

1.【場景設計】

(1)開新檔案:先【檔案→開新檔案】,再於『角色區』的『貓咪』角色身上【按下右滑鼠鍵→選取『刪除』】,即刪除貓咪的角色。

(2)舞台佈置:新背景:選擇背景→在背景範例庫中→佈景主題:節日→party確定。

(3)角色設定:如下圖。
  • 建立【數字】全域變數:選取「資料」類別的積木→按下『做一個變數』→輸入『變數名稱:數字』→再選變數型態為『適用所有的角色』→按下『確定』,為暫存的元素,即清單的編號。
  • 建立【獎號】全域變數:選取「資料」類別的積木→按下『做一個變數』→輸入『變數名稱:獎號』→再選變數型態為『適用所有的角色』→按下『確定』,為儲存抽中的號碼,請勾選積木指令區【獎號】,並將獎號拖曳移至舞台的右下方。
(4)新增全域清單【所有號碼】設定如下圖「資料」類別的積木→按下『做一個清單』→輸入『列表名稱:所有號碼』→再選清單型態為『適用所有的角色』→按下『確定』,為儲存1到49之數值。



2.【程式設計

(1)Pico」程式:選取「Pico」角色→再選取「程式」,編輯程式碼,如下圖


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

                    

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

var-ex4-2過關
  • 題目說明: 
(1) 按下綠旗開始執行,瞄準跟隨著滑鼠移動,當按下滑鼠,則顯示『發射』,否則顯示『準心』圖案。

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

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



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

var-ex4-2過關
  • 題目說明: 
(1) 按下綠旗開始執行,瞄準跟隨著滑鼠移動,當按下滑鼠,則顯示『發射』,否則顯示『準心』圖案。

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

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

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

homework 作業3:迷宮尋寶遊戲。【重點:學會『資料』類別中『做一個清單』之應用】。執行畫面如下圖。(檔名:List-3.sb2)  分享
 
【圖1】開始執行畫面:
 【圖2】最後取得金鎖後,貓咪會依序說出所有寶物之名稱。

題目說明:

(1) 按下綠旗開始執行,使用鍵盤方向鍵控制貓咪在迷宮中,貓咪只能在黑色路徑內上、下、左、右移動。
(2) 迷宮中有3個寶物『球、香蕉、金鎖』,取得寶物後寶物會消失。
球:Scratch\Media\Costumes\Things\beachball1.png
香蕉:Scratch\Media\Costumes\Things\bananas1.png
金鎖:Scratch\Media\Costumes\Things\key1.png
(3) 最後取得金鎖後,貓咪會說出所有寶物之名稱。

homework 作業4:遊戲者和電腦玩猜拳遊戲: 剪刀石頭,如下圖,獲勝者得1分。【重點:學會變數累加,並結合『廣播→當接收到』等綜合應用】。(檔名:var-7_猜拳.sb2)  分享展示遊戲

遊戲開始畫面:
雙方猜拳後,顯示畫面:
題目說明:【參閱:設計大綱圖】。

(1)遊戲開始Pico 說:『按上方圖案出拳!
(2)
遊戲者點選上方剪刀、石頭、布,該圖示會變大,即代表遊戲者出拳。
(3)若遊戲者與電腦出拳相同,
Pico會:『平手!
(4)遊戲者獲勝,Pico我贏了!我得1分!,並顯示遊戲者得分。
(5)電腦獲勝,Pico『我輸了!電腦得1分,並顯示電腦得分。


homework 作業5:夾娃娃遊戲。【重點:學會全域變數、角色分身積木之設計與應用】。執行畫面如下圖。(檔名:var-8_夾娃娃.sb2)  分享展示遊戲

題目說明: 夾子箱子【參閱:設計大綱圖】。

(1)當滑鼠按下『 $ 』投幣圖示,即遊戲開始,夾子會左右移動,並隱藏『 $ 』投幣圖示
(2)每次夾完,顯示『 $ 』投幣圖示,等待再投幣。
(3)每按一次『 $ 』投幣,夾一次『飾品』。
(4)當夾子瞄準好『飾品』,按下滑鼠,夾子會往下將飾品夾起,並丟進箱子裡。
(5)當飾品被夾完,則自動由箱子倒出『飾品』,並隱藏夾子。

遊戲開始畫面:
 夾子夾起飾品:
 並丟進箱子: