
卡卡在工作人員的引導(dǎo)下穿上游戲特制的裝備。
“游戲中,您注意一下畫外音,AI助手會給您提供一些提示信息“。
“好的,謝謝啦!”
卡卡進(jìn)入虛擬世界,眼前飄過一連串游戲名稱?!兜诹烁瘛?、《王者歸來》,《出征三體世界》……卡卡有點(diǎn)眼花繚亂。這時,一個標(biāo)題進(jìn)入了他的視野——《拯救!屏奴的逆襲》。
“屏奴?”卡卡有點(diǎn)好奇地問了一句。
AI助手的聲音傳來——“屏奴,就是每天面對各類屏幕(手機(jī)、電腦、Pad)無法自拔,已經(jīng)影響健康的人……”
“就玩這個”卡卡說。
話音剛落,場景切換到了一個大草原,湛藍(lán)的天空飄著朵朵白云。
AI助手提醒卡卡,這是游戲的熱身環(huán)節(jié),要先走完2000步才能開始游戲。
“2000步?小意思”,卡卡開始小跑起來。不一會就滿頭大汗……

學(xué)習(xí)目標(biāo)
- 進(jìn)一步熟悉 Scratch 編程環(huán)境;
- 學(xué)習(xí)讓角色在舞臺上移動并產(chǎn)生“動畫”效果;
- 掌握重復(fù)執(zhí)行、邏輯判斷類控制指令;
- 初步了解變量的概念。
編程實(shí)戰(zhàn)
本節(jié)我們使用Scratch編程控制小貓在舞臺上來回走動,走到2000步時自動停止。
第一步:舞臺設(shè)置
新建一個 Scratch 作品,利用上一節(jié)課所學(xué)的知識,設(shè)置舞臺背景為“Blue Sky”(藍(lán)色天空),將默認(rèn)小貓角色的大小修改為60,并放到背景中的地面上。

第二步:編寫跑步代碼
試著從指令區(qū)拖動一個“移動10步”指令到代碼區(qū),點(diǎn)擊這條指令執(zhí)行,你會發(fā)現(xiàn)小貓果然向前移動了一點(diǎn)點(diǎn)。那么要移動更多的步數(shù)怎么辦呢?把步數(shù)直接修改成2000?運(yùn)行一下,發(fā)現(xiàn)小貓瞬間就移動到舞臺邊緣不動了。原來,Scratch 規(guī)定角色是不能走出舞臺范圍之外的,那我們就需要解決兩個問題:
- 不能讓小貓一下走完2000步,電腦的運(yùn)算太快了,這樣你根本看不到走路的過程;
- 當(dāng)小貓走到舞臺邊緣的時候,要能掉頭向回走。
你可以寫出這樣的指令:

這三條指令都是運(yùn)動類的指令,它將小貓的翻轉(zhuǎn)方式設(shè)置為左右翻轉(zhuǎn)(如果沒有這條指令,小貓碰到邊緣反彈回來的時候就變成頭向下了,你可以試驗(yàn)一下),再移動10步,如果碰到舞臺邊緣,小貓會回過頭來。這樣,你只要不斷點(diǎn)擊這段代碼,重復(fù)每次走10步的過程,就可以讓小貓不斷地走路。
有沒有什么辦法讓小貓自己不斷地重復(fù)執(zhí)行這段代碼呢?有的,找到“控制”類指令中的“重復(fù)執(zhí)行”指令。這是一個奇怪的指令,有點(diǎn)像一邊開口的抽屜,里面可以裝東西。當(dāng)你把它拖動到代碼區(qū)域時,可以試著用它去“套”住你想重復(fù)執(zhí)行的指令,這些執(zhí)行就會一直反復(fù)執(zhí)行下去!

你會看到圖中我把設(shè)置旋轉(zhuǎn)方式的指令放在了重復(fù)執(zhí)行之前,這是因?yàn)樵O(shè)置旋轉(zhuǎn)方式只需要設(shè)置一下就能一直生效,不需要反復(fù)修改?,F(xiàn)在點(diǎn)擊這段代碼,你會發(fā)現(xiàn)小貓已經(jīng)學(xué)會了在舞臺上來回移動——注意,是“移動”不是“走路”,因?yàn)樾∝埖耐人坪醪]有動!能不能實(shí)現(xiàn)像現(xiàn)實(shí)中的人走路一樣讓小貓邁開腿呢?這就需要用到制作動畫的原理了。
電影上的人物是怎么動起來的呢?是因?yàn)閿z像機(jī)為運(yùn)動中的角色拍攝了大量的照片,一般是每秒鐘至少24張,當(dāng)把這些照片連續(xù)展示在你眼前時,由于你的眼睛存在“視覺暫留”現(xiàn)象,你會覺得這些角色真的動起來了。
我們要實(shí)現(xiàn)小貓走路,也得用到這個原理。不過我們不能為小貓每秒鐘拍攝很多照片,只能讓小貓輪流顯示兩條腿在不同位置的照片,重復(fù)執(zhí)行的時候,你就會覺得小貓的腿在動。這就要使用 Scratch 提供的“造型”功能。Scratch 角色庫中的大部分角色都帶有不同的造型,當(dāng)你在角色庫查找角色時可能會注意到,把鼠標(biāo)放到角色上,角色就會動起來,這就是通過不斷切換角色的不同造型來實(shí)現(xiàn)的。
我們的小貓角色有沒有別的造型呢?注意一下項目編輯區(qū)上方有三個標(biāo)簽頁,分別是“代碼”、“造型”和“聲音”,點(diǎn)擊切換到“造型”標(biāo)簽,可以看到下面的界面:

左側(cè)的列表區(qū)域顯示出小貓有兩個造型,你可以點(diǎn)擊這些造型切換一下,看看造型之間有什么不同。Scratch 提供了豐富的造型創(chuàng)作功能,你可以通過下方的小貓頭按鈕,選擇新的造型到當(dāng)前角色,也可以自己繪制一個新的造型——右側(cè)顯示的繪圖編輯器就是用來做這個的,它的功能很強(qiáng)大,等用到的時候我們再說——甚至你可以使用電腦自帶的攝像頭拍攝一個圖片作為新造型!不過今天我們暫時不用修改小貓的造型,返回代碼標(biāo)簽頁,把代碼修改為下面這樣:

其實(shí),只是增加了一條“外觀”類型的指令(紫色)到重復(fù)執(zhí)行的代碼中,為了方便運(yùn)行程序我在最前面添加了一個綠旗啟動按鈕。這時點(diǎn)擊綠旗,你發(fā)現(xiàn)小貓真的跑起來了?。ㄐ∝埮軇拥臅r候,你有沒有注意到在角色列表區(qū)域上方,小貓的X屬性在不斷發(fā)生變化?這是我們下一次要學(xué)習(xí)的內(nèi)容,這里先提醒關(guān)注一下)。
第三步:為小貓實(shí)現(xiàn)計步
根據(jù)故事情節(jié),小貓要跑2000步。怎么在天空中顯示出小貓已經(jīng)跑了多少步?這要用到變量。
什么是變量?變量是計算機(jī)編程中不可或缺的概念,你可以理解為變量就是一個存取數(shù)據(jù)的盒子,給這個盒子取一個名字(代號)之后,你就可以利用這個名字去獲取盒子的內(nèi)容,或者修改盒子的內(nèi)容。舉個例子,你買了一個存錢罐把自己的零錢存起來,就可以把你的“零錢余額”視為一個“變量”,當(dāng)你向盒子里投幣時,變量的值就增加了;從盒子里取錢用的時候,變量的值就減少了,任何時候你查看“零錢余額”的數(shù)值時,都會獲得最新的余額數(shù)字。當(dāng)然,Scratch 中的“變量”不僅可以保存數(shù)字,還能保存字符等數(shù)據(jù),我們用到的時候再說。
就眼下的場景而言,你一定會想到,我們可以設(shè)置一個變量去保存小貓的步數(shù),然后讓它在跑步的時候,每重復(fù)執(zhí)行一次移動指令,就在變量上加10步不就可以了嗎?正是如此??墒窃趺床拍茉O(shè)置一個變量呢?
在項目編輯區(qū),你可以點(diǎn)擊切換到“變量”類(桔紅色)指令,最上面就是一個按鈕——“建立一個變量”。點(diǎn)擊它,會出現(xiàn)新建變量的界面,你可以給變量取名為“小貓步數(shù)”,確定即可,先不用管它適用于所有角色還是當(dāng)前角色。

變量建立完成后,注意一下舞臺左上角,出現(xiàn)了一個灰色的條狀區(qū)域,里面顯示了變量的名稱和變量當(dāng)前保存的數(shù)值?,F(xiàn)在對代碼做如下修改:

桔紅色的兩條指令是新加的,第一條是在綠旗開始時把“小貓步數(shù)”設(shè)置為“0”,這樣會重新開始計數(shù);第二條是在重復(fù)執(zhí)行的代碼內(nèi)部,小貓移動10步后,把小貓步數(shù)這個變量也增加10。需要注意的是,初學(xué)者最容易犯的錯誤就是變量混用,因?yàn)橐粋€程序中可能有多個變量,保存不同的值,而對變量的操作都是通過一個下拉菜單選擇你要操作的變量的,點(diǎn)擊指令中變量名稱旁邊向下的小三角符號就可以看到這個菜單 :

所以在拖動變量相關(guān)的指令時,務(wù)必檢查一下你操作的是不是正確的變量。
點(diǎn)擊綠旗運(yùn)行,小貓跑步的時候,舞臺左上角的步數(shù)顯示果然隨著增加了。再次點(diǎn)擊綠旗,又重新開始從0計算。
第四步:跑完休息
小貓熱身的要求是跑2000步,怎樣讓它在跑到2000步之后就停下呢?這要用到邏輯判斷。
什么是邏輯判斷?簡單來說就是“是”和“非”、“真”和“假”相關(guān)的問題。比如:如果外面下雨了,我出門就帶上傘。這里的“下雨”就是一個邏輯判斷,它決定了后面是否帶傘這個動作。在講到流程圖時,我們講到了“條件執(zhí)行”,就是指這種情況?!笆欠裣掠辍本褪菞l件,當(dāng)條件成立,我們做拿雨傘的動作;如果不成立也就是沒有下雨,當(dāng)然就不用帶傘了。
具體到本例來說,就是我們要判斷一個條件,小貓是否已經(jīng)跑了2000步以上?換句話說,“小貓步數(shù)”這個變量的值是不是已經(jīng)大于2000了?如果大于2000,我們就讓它停下來。怎么做呢?
在“控制”類指令中找到“如果...那么”,就是這個——

如果后面有一個深色的六邊形區(qū)域,這里就是放我們要判斷的條件。如果條件成立,就執(zhí)行這條指令所“包含”的代碼,否則不執(zhí)行。那么條件從哪里來?
切換到“運(yùn)算”類(綠色)指令,找到下面這組指令:

發(fā)現(xiàn)了嗎?這六個指令正好是六邊形的,它們就是與“如果...那么”配合使用實(shí)現(xiàn)邏輯判斷的指令,這里生成的指令可以嵌套到“如果...那么”的條件區(qū)域中去。而第一種判斷“XX(空白,這里是放變量的,可以把變量拖過來)大于50”正是我們需要的判斷,把它和“小貓步數(shù)”變量以及“如果...那么”指令組合起來,變成這樣:

注意一下,綠色的條件中“小貓變量”是從指令區(qū)拖動過來的。初學(xué)者可能會犯的錯誤是直接在這個圓形中輸入變量名字,那是無法從變量中取值的,而是拿變量的“名字”或代號與后面的數(shù)字比較,也就是用“小貓步數(shù)”這四個漢字去和2000比較大小,這是沒有意義的,一定要注意避免!
現(xiàn)在條件已經(jīng)組合完成,只要條件成立的時候,停止程序就可以。從控制類指令中拖動一個“停止全部腳本”到“如果...那么”指令當(dāng)中,當(dāng)小貓步數(shù)大于2000的時候,程序就會被停止。(這條指令還有其它選項,我們用到時再說)。

最后,我們再把這段組合好的代碼拖動到小貓跑步的重復(fù)執(zhí)行程序中,讓程序在小貓每次跑完10步的時候就去判斷一下是不是已經(jīng)大于2000,大于2000就停止程序:

點(diǎn)擊綠旗,觀察小貓跑步的執(zhí)行情況,到2000步的時候,它停止了嗎?
第五步:保存程序
最后,使用“文件菜單”下的“保存到電腦”,將作品保存為“熱身中的卡卡.sb3”,本節(jié)的任務(wù)就完成了。
指令小貼示
- 移動【數(shù)值】步:讓角色朝著目前的方向前進(jìn)設(shè)定的步數(shù);
- 碰到邊緣就反彈:角色移動到邊緣會改變方向,改變方式與角色的旋轉(zhuǎn)方式有關(guān),如果要讓角色掉頭往回走,就需要用“將旋轉(zhuǎn)方式設(shè)為左右翻轉(zhuǎn)”指令,或在角色屬性中設(shè)置這個旋轉(zhuǎn)方式;
- 將【變量名稱】設(shè)為【值】:直接給你建立的變量指定一個值,一般用于程序啟動時為變量建立初始值;
- 將【變量名稱】增加【值】:在變量現(xiàn)有數(shù)值的基礎(chǔ)上加上指定的數(shù)字。比如變量原值為10,增加10后,變量值為20;
- 停止【全部腳本】:這個指令有三個選項,分別是停止全部腳本(把所有角色的所有代碼都停止執(zhí)行)、停止當(dāng)前腳本(只影響這個指令所在的代碼)、停止該角色的其它腳本(除了本段指令,當(dāng)前角色的其它代碼都不再執(zhí)行),具體可以在后續(xù)課程中逐步體會它們的不同之處;
- 下一個造型:將角色在舞臺上的樣子切換成它的造型列表中下一個造型,如果已經(jīng)是最后一個,再跳到第一個,這樣切換造型會產(chǎn)生動畫效果;
- 重復(fù)執(zhí)行:這是一個控制類指令,被它包含的指令會一直啟動下去,除非有其它指令停止它的運(yùn)行;
- 如果【判斷條件】那么...:控制類代碼執(zhí)行的指令,如果后面的運(yùn)行條件成立,就執(zhí)行包含的代碼。這個指令會和綠色的邏輯運(yùn)算指令結(jié)合起來使用,讓程序根據(jù)條件的不同來執(zhí)行不同的代碼。
課后思考
本節(jié)我們第一次接觸到變量,并學(xué)習(xí)了重復(fù)執(zhí)行和條件執(zhí)行,這些都是下一步學(xué)習(xí)的重要基礎(chǔ),務(wù)必認(rèn)真領(lǐng)會。
一般來說,程序的結(jié)構(gòu)類型可以分為順序結(jié)構(gòu)、分支(條件執(zhí)行)和循環(huán)(也就是重復(fù)執(zhí)行)。本節(jié)我們把這三種類型的結(jié)構(gòu)都用到了。
要理清復(fù)雜程序的結(jié)構(gòu),最好的方法是流程圖,你能運(yùn)用之前所學(xué)的知識,為本節(jié)學(xué)習(xí)的程序畫一幅流程圖嗎?