趣學(xué)妙用Scratch編程10 趣學(xué)篇(六)聽(tīng)題!格里芬的挑戰(zhàn)

卡卡逐漸摸出了規(guī)律——只要保持專(zhuān)注,還是能掙脫這些“注意力陷阱”的。他回憶起自己平時(shí)的情形——本來(lái)是打算用手機(jī)搜一道作業(yè)題,不知道怎么的就點(diǎn)開(kāi)了一段視頻,然后又下載了一個(gè)小游戲……等回過(guò)神來(lái)的時(shí)候都忘了自己最初要干什么了……

卡卡一邊想一邊來(lái)到了古堡的大門(mén)口,一只獅身鷹首獸(Griffin)守在那里,對(duì)卡卡說(shuō)——

“能夠安全到達(dá)這里,說(shuō)明你挺厲害哦!這樣吧,我就不跟你戰(zhàn)斗了。只要你回答出我的問(wèn)題,就可以通過(guò)這道門(mén),我還會(huì)送你一把打開(kāi)通關(guān)密道的鑰匙,如果答不對(duì),嘿嘿……”。

卡卡眼前一亮,通關(guān)密道的鑰匙!拿到它就很容易過(guò)關(guān)啦!

“您出題吧!”

“聽(tīng)好了,小明身高172cm,體重82kg,請(qǐng)問(wèn)他的身材屬于 1、偏廋,2、正常,3、超重,4、肥胖。請(qǐng)?jiān)?分鐘內(nèi)回答——倒計(jì)時(shí)開(kāi)始,60,59,58……”
這不是求BMI(身體質(zhì)量指數(shù))的數(shù)學(xué)題嗎?還好前兩天剛看過(guò)計(jì)算公式,卡卡心里飛快地計(jì)算起來(lái)。

學(xué)習(xí)目標(biāo)

  1. 熟悉常見(jiàn)的數(shù)學(xué)運(yùn)算指令,掌握使用 Scratch 進(jìn)行數(shù)學(xué)運(yùn)算的方法;
  2. 理解“廣播消息”和“接收消息”的概念;
  3. 學(xué)會(huì)使用流程圖梳理比較復(fù)雜的程序結(jié)構(gòu);
  4. 使用詢(xún)問(wèn)方式獲得用戶輸入。

編程實(shí)戰(zhàn)

本節(jié)我們編程實(shí)現(xiàn)BMI指數(shù)的計(jì)算。

BMI 是指身高體重指數(shù),通過(guò)將人的身高及體重?fù)Q算成BMI值,可以看出一個(gè)人是否超重。計(jì)算公式很簡(jiǎn)單,就是用體重的千克數(shù)除以身高平方(米為單位)。舉例來(lái)說(shuō),一個(gè)人的身高為1.75米,體重為68千克,他的BMI=68/(1.75)2 = 22.2,然后再根據(jù)下面的列表找到對(duì)應(yīng)的范圍可以看出這個(gè)人的體重是正常的(最理想的體重指數(shù)是22):

  • 偏瘦:BMI<18.5
  • 正常:18.5<=BMI<24
  • 超重:24<=BMI<28
  • 肥胖:28<=BMI

** 注意哦,BMI只是一個(gè)參考值,和性別、年齡等因素都有很大關(guān)系! 不能用這個(gè)數(shù)值直接判斷一個(gè)人是不是真的超重哦!**

有了這個(gè)公式,我們就可以編寫(xiě)代碼了。

第一步:Griffin(格里芬)角色編程

新建 Scratch 項(xiàng)目,將背景設(shè)置為背景庫(kù)中的“Castle 1”,這是一個(gè)城堡的大門(mén)。然后添加一個(gè)內(nèi)置的 “Griffin” 角色進(jìn)來(lái)。這個(gè)角色有四個(gè)造型,我們進(jìn)入造型標(biāo)簽頁(yè),把后面兩個(gè)造型刪除掉,接著把它的方向設(shè)置為-90度,左右翻轉(zhuǎn)模式,和小貓面對(duì)面:

01 布置場(chǎng)景

為了讓 Griffin 在原地扇動(dòng)翅膀,我們給它添加下面的簡(jiǎn)單代碼——是不是和前面課程用到的蝙蝠代碼一樣?

02 Griffin的代碼.png

第二步:計(jì)算格里芬的題目

完成場(chǎng)景之后,讓我們實(shí)現(xiàn)讓小貓計(jì)算BMI的功能。Scratch 提供了豐富的運(yùn)行類(lèi)指令供我們使用(綠色),你可以看到里面除了我們用過(guò)的隨機(jī)數(shù)、邏輯判斷之外,還有加減乘除四則運(yùn)算,以及取余、四舍五入和字符操作的指令,以后我們將會(huì)用到:

03 運(yùn)算類(lèi)指令.png

現(xiàn)在要計(jì)算格里芬的題目,也就是82/(1.72)2,這個(gè)對(duì)你來(lái)說(shuō)應(yīng)該很簡(jiǎn)單,不過(guò)由于這里面不只一步運(yùn)算,所以我們可以從優(yōu)先級(jí)最高的計(jì)算開(kāi)始,先計(jì)算(1.72)2,也就是1.72乘以1.72,在運(yùn)算類(lèi)指令中找到乘法指令,拖動(dòng)到代碼區(qū):

04 乘法運(yùn)算

接下來(lái)要用82除以上一步的計(jì)算結(jié)果,我們?cè)偻蟿?dòng)一個(gè)除法指令過(guò)來(lái),然后把剛剛寫(xiě)好的指令拖過(guò)去就可以了:

05 除法運(yùn)算

現(xiàn)在這條指令的結(jié)果其實(shí)就是BMI的值。下面的代碼我們還需要根據(jù)計(jì)算的BMI值來(lái)進(jìn)行判斷,所以我們可以把結(jié)果保存到一個(gè)變量中。

04 保存結(jié)果到變量

接下來(lái)我們就可以根據(jù)變量值進(jìn)行判斷了。我們可以從最小的值開(kāi)始判斷,如果BMI的值小于18.5,小貓就直接說(shuō)“偏瘦”,否則說(shuō)明BMI大于18.5,這時(shí)進(jìn)行第二層判斷它是否小于24,如果小于24成立,則說(shuō)“正?!?;否則說(shuō)明BMI大于24,這時(shí)進(jìn)行第三層判斷它是否小于28,如果小于28成立則說(shuō)“超重”,否則說(shuō)明BMI大于28,小貓說(shuō)“肥胖”——你是否感覺(jué)到這樣表達(dá)啰嗦得不得了?是的,用自然語(yǔ)言表述這類(lèi)邏輯判斷層級(jí)多的場(chǎng)景時(shí)總有些力不從心,最好用圖形來(lái)幫助我們整理邏輯——還記得我們第一章學(xué)習(xí)的流程圖吧?現(xiàn)在它要派上用場(chǎng)了。

根據(jù)上面的邏輯描述,我們可以畫(huà)出下面的流程圖:

07 判斷BMI流程圖

是不是很清晰?真的是“一圖勝千言”呢。

根據(jù)這個(gè)流程圖,你就很容易寫(xiě)出下面的代碼了:

08 判斷BMI值

判斷完成之后呢?小貓雖然“說(shuō)”出了答案,可是對(duì)面的Griffin并沒(méi)有什么反應(yīng),因?yàn)槲覀儾](méi)有編寫(xiě)代碼通知它。怎么才能通知它小貓說(shuō)出了答案呢?這牽涉到角色之間的通信問(wèn)題,Scratch 為我們提供了“消息”機(jī)制。

09 消息相關(guān)指令

首先,發(fā)送消息時(shí),你并不能指定發(fā)給誰(shuí),而是本程序中所有的角色都可以接收到(但他們可以不處理,充耳不聞),如果用廣播指令,則發(fā)完消息接著執(zhí)行發(fā)消息下面的指令;如果用“廣播并等待”,則發(fā)完消息后一直等待所有處理這條消息的代碼執(zhí)行完才繼續(xù)執(zhí)行后續(xù)代碼,這兩者的區(qū)別可以在日后的學(xué)習(xí)中體會(huì)。那么怎么接收消息呢?如果角色想接收另一個(gè)角色發(fā)來(lái)的消息,只要在“當(dāng)接收到XX消息”指令后添加處理代碼就可以。

這樣,你就知道怎么辦了吧?我們需要先給小貓代碼最后加上一條“廣播”指令,并在指令中點(diǎn)擊那個(gè)向下箭頭,選擇“新消息”,會(huì)出現(xiàn)下面的窗口,讓你輸入消息名稱(chēng):

10 新建消息

我們輸入“回答完畢”作為消息的名稱(chēng),點(diǎn)擊確定,小貓發(fā)消息的代碼就完成了:

11 小貓發(fā)送消息

第三步:格里芬接收消息

小貓已經(jīng)發(fā)送了消息,現(xiàn)在輪到Griffin接收消息了。

12 格里芬接收消息代碼

當(dāng)接收到“回答完畢”消息時(shí),Griffin先使用“停止該角色的其它腳本”指令,結(jié)束了不斷扇動(dòng)翅膀的代碼,然后告訴小貓“你答對(duì)了,進(jìn)去吧!",把自己隱藏起來(lái)。為了讓程序啟動(dòng)時(shí)Griffin恢復(fù)可見(jiàn),我們?cè)谠芯G旗指令后加了一條顯示指令。

第四步:顯示鑰匙

Griffin還要送給小貓一把鑰匙讓它直接進(jìn)入最終BOSS關(guān)卡。這里我們?cè)偬砑右粋€(gè) Scratch 內(nèi)置的“Key”角色進(jìn)來(lái),放到Griffin所處的位置,并給它編寫(xiě)下面的代碼:

13 添加鑰匙角色與代碼.png

和Griffin正好相反,程序啟動(dòng)時(shí)鑰匙隱藏,收到小貓回答完畢的消息后,它等待3秒鐘(讓Griffin有時(shí)間說(shuō)完話隱藏起來(lái)),再顯示出來(lái),告訴小貓“鑰匙就在這里”。

第五步:進(jìn)一步提升

其實(shí)本節(jié)課程要求的功能已經(jīng)實(shí)現(xiàn)了,但我們不妨來(lái)設(shè)想一下,如果每次小貓?jiān)谟?jì)算之前,能讓你輸入身高和體重,然后它根據(jù)你輸入的身高體重來(lái)計(jì)算BMI值,這個(gè)程序是不是就有一定的實(shí)用性了呢?其實(shí)這也不難,只需要用到下面這條“詢(xún)問(wèn)并等待”指令。執(zhí)行這條指令的時(shí)候,舞臺(tái)上會(huì)出現(xiàn)一個(gè)輸入框,并顯示提示信息,要求你輸入內(nèi)容。你輸入的內(nèi)容會(huì)保存到“回答”這個(gè)內(nèi)置變量中(它就在“詢(xún)問(wèn)并等待”指令下面):

14 詢(xún)問(wèn)指令

由于我們要讓小貓?jiān)儐?wèn)兩次,分別是身高和體重,而每次詢(xún)問(wèn)的結(jié)果都會(huì)覆蓋上一次的回答,所以我們需要用不同的變量保存回答的值再用來(lái)計(jì)算。新建兩個(gè)變量,分別命名為“身高”和“體重”,然后對(duì)小貓的代碼做一下修改:

15 計(jì)算不同的BMI

我們?cè)谟?jì)算BMI的代碼前面增加了要求輸入體重和身高的代碼,并把原來(lái)BMI計(jì)算公式中固定的值換成了變量(從指令區(qū)拖動(dòng)過(guò)來(lái)即可),這樣小貓每次就會(huì)詢(xún)問(wèn)你體重和身高,再做相應(yīng)的計(jì)算。你可以拿它來(lái)測(cè)試一下你身邊的人是不是超重了——僅供娛樂(lè)哦!

指令小貼示

  • 詢(xún)問(wèn)【提示】并等待:彈出一個(gè)氣泡框讓使用者輸入內(nèi)容,這個(gè)內(nèi)容會(huì)保存在“回答”變量中,記得馬上用;因?yàn)槿绻筮呥€有詢(xún)問(wèn),回答的內(nèi)容就被覆蓋了;
  • 【值】運(yùn)算符號(hào) 【值】:一系列的數(shù)學(xué)計(jì)算指令,能進(jìn)行簡(jiǎn)單的四則運(yùn)算;
  • 廣播【消息名稱(chēng)】:向所有角色發(fā)送一條消息;
  • 當(dāng)接收到【消息名稱(chēng)】:控制類(lèi)指令,當(dāng)收到指定消息時(shí)觸發(fā)后面的代碼執(zhí)行;
  • 顯示:讓角色在舞臺(tái)上顯示出來(lái);
  • 隱藏:讓角色不在舞臺(tái)上顯示。

課后思考

本節(jié)內(nèi)容牽涉到消息發(fā)送和接收、多分支的邏輯運(yùn)算以及程序輸入等知識(shí)點(diǎn),其中消息收發(fā)最為關(guān)鍵,需要你多練習(xí)幾次。

最后請(qǐng)你思考一個(gè)問(wèn)題:在輸入身高或體重的時(shí)候,我如果不輸入數(shù)字,輸入一個(gè)“貓”或“Griffin”等其它不是數(shù)字的信息,程序會(huì)出現(xiàn)什么結(jié)果?這種結(jié)果符合你的預(yù)期嗎?你應(yīng)該怎樣避免這種情況發(fā)生?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容