趣學(xué)妙用Scratch編程09 趣學(xué)篇(五)目標(biāo)!幽靈古堡

“嗖尉桩!嗖嗖筒占!”
寒光閃過(guò),邪惡的吸血蝙蝠灰飛煙滅蜘犁,不過(guò)卡卡的雙臂也逐漸沉重起來(lái)翰苫,他咬牙堅(jiān)持著,直到消滅最一只蝙蝠。

卡卡擦了擦額頭的汗珠奏窑,收到AI助手的信息:你剛才消滅了368只蝙蝠导披,消耗235卡路里——大約相當(dāng)于一小罐可樂(lè)的熱量。

戰(zhàn)斗這么久才消耗一小罐可樂(lè)埃唯?卡卡吐了吐舌頭撩匕,跑出了這片黑暗的森林。

遠(yuǎn)遠(yuǎn)地看見(jiàn)一座古堡墨叛,有點(diǎn)像中世紀(jì)的建筑止毕,目標(biāo)一定就在那里!卡卡興奮地加快腳步要沖過(guò)去巍实,忽然感覺(jué)腳下一軟滓技,好像踩到了一團(tuán)爛泥。而且這團(tuán)“爛泥”似乎還會(huì)動(dòng)棚潦,死死地粘住卡卡的腳不放令漂。
這是什么怪東西?卡卡大吃一驚丸边,AI助手的提示——

“這是注意力吞噬者叠必,又稱注意力陷阱。它們的唯一目標(biāo)就是盡可能地抓住你的注意力妹窖,讓你把寶貴的時(shí)間浪費(fèi)在它們身上纬朝。比如無(wú)聊的文章、滿足好奇心的短視頻骄呼、讓人上癮的游戲等……你必須盡快掙脫它們共苛,否則無(wú)法及時(shí)到達(dá)前方的幽靈古堡”。

好吧蜓萄,真是一波未平一波又起隅茎,卡卡花了好大力氣才把自己從這個(gè)吞噬者身上掙脫。定睛一看嫉沽,通往古堡的道路上辟犀,大大小小的全是這種“注意力陷阱”。

看來(lái)這關(guān)不好過(guò)啊绸硕,卡卡心中暗暗叫苦堂竟。

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

  1. 掌握背景圖的修改方式;
  2. 使用鍵盤控制角色的方法玻佩;
  3. 顏色觸碰偵測(cè)指令出嘹;
  4. 自制積木的用法。

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

本節(jié)我們實(shí)現(xiàn)一個(gè)使用鍵盤控制小貓自由行走的程序咬崔,如果行走中碰到了陷阱疚漆,就退回原位。

第一步:設(shè)置背景與角色

新建 Scratch 項(xiàng)目,將背景修改為 Scratch 自帶的 Castle 2(城堡):

01 選擇背景

在這個(gè)場(chǎng)景中娶聘,小貓站在一條通往古堡的道路上。我們需要在背景上加入一些“陷阱”甚脉,所以在“舞臺(tái)”下方的背景縮略圖上點(diǎn)擊“背景2”丸升,你會(huì)發(fā)現(xiàn)項(xiàng)目編輯區(qū)的標(biāo)簽頁(yè)從“代碼”、“造型”牺氨、“聲音” 變成了“代碼”狡耻、“背景”、“聲音” 猴凹,點(diǎn)擊“背景”標(biāo)簽頁(yè)就可以進(jìn)入修改界面:

02 切換到背景繪制界面

這個(gè)背景標(biāo)簽頁(yè)和角色造型的界面很相似夷狰,左邊列出了你曾經(jīng)選擇過(guò)的背景,右側(cè)是當(dāng)前所選背景圖的編輯器(與角色的編輯器一樣)郊霎。你會(huì)看到編輯器中所能使用的工具和角色繪圖時(shí)不同沼头,這是因?yàn)檫@張背景圖是“位圖”,它的修改方式不是通過(guò)添加線條书劝、形狀來(lái)完成的进倍,而是就像我們平時(shí)繪畫一樣,使用畫筆购对、橡皮等工具進(jìn)行涂抹擦除猾昆。當(dāng)然,你也可以點(diǎn)擊畫布下方的“轉(zhuǎn)換為矢量圖”對(duì)它進(jìn)行轉(zhuǎn)換骡苞。不過(guò)對(duì)這張像照片的背景來(lái)說(shuō)垂蜗,用位圖的編輯方式還是更合適一些。

選中繪圖工具中的“圓形”繪制工具解幽,在通往古堡的道路上畫幾個(gè)深色的實(shí)心圓贴见,代表陷阱。如下圖所示亚铁,因?yàn)槲覀兪菫榱搜菔居叮皇钦娴囊L制一個(gè)很難通過(guò)的“迷宮”,所以不用太復(fù)雜徘溢。如果你完成了本節(jié)內(nèi)容吞琐,想提高難度,可以在這個(gè)圖上自由發(fā)揮然爆。

03 修改背景

第二步:編寫小貓指令

接下來(lái)為小貓編寫指令站粟。在編寫指令之前,務(wù)必注意先在角色列表中選中小貓角色曾雕,因?yàn)閯偛旁谛薷谋尘皶r(shí)奴烙,我們切換到了背景的代碼頁(yè),如果不切換到小貓角色,編寫的就是背景的代碼切诀。這是初學(xué)者易犯的錯(cuò)誤之一——怎么我寫的代碼找不到啦揩环?

要實(shí)現(xiàn)小貓接收鍵盤命令,有兩種方式幅虑,一種是上節(jié)內(nèi)容我們學(xué)習(xí)到事件類指令(當(dāng)按下...鍵)丰滑,這里的鍵位你可以從下拉的列表中選擇;另一種是把條件判斷指令與偵測(cè)指令結(jié)合起來(lái)使用倒庵,如果條件成立則執(zhí)行里面的代碼褒墨,同樣,判斷條件里面的鍵位也是可以選擇的擎宝。你可以根據(jù)具體場(chǎng)景來(lái)使用郁妈,本節(jié)內(nèi)容我們采用后面這種方式。

04 處理鍵盤事件的兩種指令

現(xiàn)在把小貓移動(dòng)到舞臺(tái)的左下角绍申,注意不要碰到你畫的陷阱噩咪,然后為它編寫下面的代碼:

05 小貓移動(dòng)指令

這里的指令都是你熟悉的,當(dāng)按下向上鍵的時(shí)候失晴,面向0度方向(也就是垂直向上)移動(dòng)十步剧腻,切換造型,使用外觀類指令將角色大小增加-5(也就是減少5涂屁,這樣可以讓小貓有近大遠(yuǎn)小的效果书在,向遠(yuǎn)處走的時(shí)候變小)——運(yùn)行一下拆又,怎么小貓一動(dòng)不動(dòng)呢儒旬?出什么問(wèn)題了?

這就是初學(xué)者容易出錯(cuò)的場(chǎng)景之一——偵測(cè)指令是單次運(yùn)行的帖族,也就是說(shuō)每運(yùn)行一次指令檢測(cè)一次≌辉矗現(xiàn)在我們只是在綠旗啟動(dòng)的時(shí)候檢測(cè),它只運(yùn)行一次就結(jié)束了竖般,你還沒(méi)來(lái)得及按鍵呢甚垦!必須是在程序運(yùn)行后不斷地檢測(cè)是不是按下這個(gè)鍵才可以,所以我們需要在條件判斷指令前面加上一個(gè)重復(fù)執(zhí)行:

06 小貓移動(dòng)指令修改

現(xiàn)在你按上箭頭的時(shí)候涣雕,小貓可以向上走動(dòng)了艰亮。掌握了這種方法,要實(shí)現(xiàn)向下挣郭、向左迄埃、向右就很容易了,在重復(fù)執(zhí)行指令內(nèi)部再加上相應(yīng)的判斷條件即可:

07 小貓向四個(gè)方向移動(dòng)

小貓如果在移動(dòng)中碰到了“陷阱”兑障,就要回到起始點(diǎn)侄非,也就是原來(lái)的坐標(biāo)蕉汪,所以我們?cè)谥貜?fù)執(zhí)行中再加一個(gè)條件判斷:

08 增加陷阱處理代碼

這里我們使用了一個(gè)新的偵測(cè)指令——碰到顏色,它和碰到角色的判斷是一樣的逞怨,只不過(guò)碰到的對(duì)象從某個(gè)角色變成了顏色而已者疤,這個(gè)顏色從哪里來(lái)呢?點(diǎn)擊這個(gè)顏色的時(shí)候骇钦,會(huì)出現(xiàn)一個(gè)設(shè)置顏色窗口宛渐,你可以把它設(shè)置成和你畫陷阱的時(shí)候選擇的顏色一樣。不過(guò)更簡(jiǎn)便的方法是眯搭,使用這個(gè)窗口下面的“吸管”按鈕,再把鼠標(biāo)移動(dòng)到舞臺(tái)區(qū)你已經(jīng)畫好的陷阱上业岁,這時(shí)鼠標(biāo)會(huì)變成一個(gè)放大鏡鳞仙,把鼠標(biāo)放到陷阱的位置點(diǎn)擊,就能取到陷阱的顏色笔时。

現(xiàn)在可以運(yùn)行檢驗(yàn)一下效果了棍好,你的小貓可以靈活地四處走動(dòng),碰到“陷阱”就回到起始位置允耿。

第三步:指令精簡(jiǎn)

到這里程序的功能是基本上實(shí)現(xiàn)了借笙,可是你有沒(méi)有覺(jué)得什么地方不對(duì)勁?小貓的代碼是不是有點(diǎn)太長(zhǎng)了较锡?長(zhǎng)也不算什么大問(wèn)題业稼,功能復(fù)雜的程序都會(huì)比較長(zhǎng)——可是你發(fā)現(xiàn)這一長(zhǎng)串代碼中,有不少是簡(jiǎn)單重復(fù)的呀蚂蕴,下面圖中處理四個(gè)方向的代碼低散,除了移動(dòng)的方向之外,是不是其它都一樣骡楼?

09 尋找代碼重復(fù)項(xiàng)

切記熔号,當(dāng)你發(fā)現(xiàn)自己的代碼中出現(xiàn)這種“有規(guī)律的重復(fù)”時(shí),表明你需要精簡(jiǎn)你的程序了鸟整。在 Scratch 中引镊,處理的方法,是把重復(fù)的代碼做成自制積木篮条。

什么是自制積木弟头?簡(jiǎn)單地說(shuō),其實(shí)就是把具有通用性的一段代碼放到一起兑燥,給它們起一個(gè)名字保存起來(lái)亮瓷。當(dāng)你在其它代碼中要用到這段通用代碼時(shí),可以直接把這個(gè)保存好的積木放過(guò)去降瞳,就能起到和寫一段代碼一樣的效果嘱支!比如在這段代碼中蚓胸,我們可以自制一個(gè)“走路”積木,把調(diào)整方向除师、移動(dòng)沛膳、下一個(gè)造型這三塊積木放到這個(gè)走路積木中,那么你只需把走路積木放到條件判斷指令內(nèi)部汛聚,就能實(shí)現(xiàn)現(xiàn)有程序的功能——這樣代碼量不僅減少了锹安,如果走路功能發(fā)生了變化,你只用修改這塊自制積木倚舀,所有用到這塊積木的地方不用做任何修改——是不是很方便叹哭?這就是編程的一個(gè)重要原則:重復(fù)的事件只做一次就好

你可能會(huì)問(wèn)痕貌,不對(duì)呀风罩,這四段代碼也不是完全一樣的,它們面向的方向不同舵稠!的確超升,完全重復(fù)的代碼不多,這里就存在一個(gè)方向變化的問(wèn)題哺徊。Scratch 考慮到了這種情況室琢,所以你可以在自制積木的時(shí)候,定義一個(gè)或多個(gè)“輸入項(xiàng)”——就像你在用移動(dòng)10步這個(gè)指令的時(shí)候落追,可以把步數(shù)設(shè)置為10盈滴,也可以設(shè)置為20一樣,這個(gè)步數(shù)就是輸入項(xiàng)——你可以給你的“走路”積木定義一個(gè)“方向”輸入項(xiàng)淋硝,在使用這塊積木的時(shí)候告訴它向哪個(gè)方向去雹熬,在積木內(nèi)部就可以用這個(gè)輸入項(xiàng)來(lái)決定小貓面向哪個(gè)方向。

這么說(shuō)很抽象谣膳,有點(diǎn)難以理解竿报,我們來(lái)實(shí)際操作一下——

在項(xiàng)目編輯區(qū)找到最后一個(gè)指令分類——“自制積木”,這類積木目前里面只有一個(gè)按鈕“制作新的積木”继谚。

10 自制積木

點(diǎn)擊“制作新的積木”按鈕烈菌,會(huì)彈出一個(gè)窗口,要求你輸入這個(gè)積木的名字花履,我們輸入“走路”:

11 輸入自制積木名稱

先不要急著點(diǎn)完成芽世,由于走路的方向不同,我們?cè)冱c(diǎn)擊“添加輸入項(xiàng)(數(shù)字或文本)”诡壁,在積木名稱后面就多出一個(gè)橢圓的空白區(qū)域济瓢,你可以在這里輸入“方向”(這是輸入項(xiàng)的名字)——

12 添加自制積木輸入項(xiàng)

點(diǎn)擊窗口右下方的“完成”按鈕,一個(gè)新的積木會(huì)同時(shí)出現(xiàn)在指令區(qū)和代碼區(qū):

13 建立的新積木

代碼區(qū)的“定義走路(方向)”和其它的積木有很明顯的不同妹卿,我們可以在它下面加入代碼旺矾,讓它實(shí)現(xiàn)“走路”的功能蔑鹦,你可以在已經(jīng)寫好的走路代碼上點(diǎn)擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“復(fù)制”箕宙,Scratch 就會(huì)復(fù)制一份代碼嚎朽,把它拖過(guò)來(lái)放到定義積木下面就可以:

14 復(fù)制代碼
15 復(fù)制后的代碼

注意!柬帕!關(guān)鍵的一步來(lái)了哟忍。這里的代碼是讓小貓面向0度方向的!我們?cè)趺床拍茏尠炎灾品e木定義好的輸入項(xiàng)“方向”放到第一條指令“面向...方向”的空白區(qū)域陷寝,讓它根據(jù)輸入項(xiàng)改變方向呢锅很?你可能會(huì)想,把現(xiàn)在的“0”修改成“方向”兩個(gè)字就可以了吧凤跑?這是錯(cuò)誤的粗蔚。這和我們?cè)谇懊鎯?nèi)容中講的變量一樣,輸入項(xiàng)傳遞過(guò)來(lái)的實(shí)際上是一個(gè)變量饶火,而不是“方向”這兩個(gè)漢字!“方向”這兩個(gè)字是輸入項(xiàng)的名稱致扯,而我們需要的是保存在這個(gè)輸入項(xiàng)當(dāng)中的值——可能是0肤寝,也可能是90等。怎么辦抖僵?很簡(jiǎn)單鲤看,用鼠標(biāo)拖動(dòng)最上面“定義積木”中的“方向”這個(gè)稍微淺一點(diǎn)的區(qū)域,你會(huì)發(fā)現(xiàn)一件神奇的事情——它居然可以被“克隆”出來(lái)一份耍群,隨著你的鼠標(biāo)移動(dòng)——把它放到第一行指令的方向值里面即可:

16 修改方向

這樣义桂,我們就完成了自制積木的功能,下面就可以把原來(lái)?xiàng)l件判斷中的指令全部替換成“走路”指令了(從指令區(qū)拖過(guò)去蹈垢,并且修改輸入的方向)慷吊,代碼就變成了下面這樣:

17 重構(gòu)后的代碼

怎么樣?代碼是不是簡(jiǎn)潔了很多曹抬?這里走路這個(gè)積木的代碼不多溉瓶,所以還顯不出它的優(yōu)越性,但你可以想象如果代碼很多谤民,擇取重復(fù)代碼的操作就顯得區(qū)別很大了——關(guān)鍵是你精簡(jiǎn)了代碼堰酿,并沒(méi)有影響程序的功能!好的程序員张足,一定是用最少的代碼做最多的事情触创。象這樣“在不改變代碼功能的情況下對(duì)代碼進(jìn)行調(diào)整優(yōu)化”的過(guò)程,在軟件行業(yè)有一個(gè)專門的術(shù)語(yǔ)为牍,叫做——重構(gòu)哼绑。

指令小貼示

  • 將大小設(shè)為【數(shù)值】:角色大小默認(rèn)為100岩馍,相當(dāng)于100%,原始大小凌那,通過(guò)設(shè)置大小值兼雄,能改觀角色外觀;
  • 將大小增加【數(shù)值】:如果想角色變大帽蝶,就增加正數(shù)赦肋,想讓角色變大可以增加一個(gè)負(fù)值,如-5励稳;
  • 按下【按鍵】鍵佃乘?:偵測(cè)是否按下鍵盤上的某個(gè)鍵,一般與如果...那么配合監(jiān)視程序的鍵盤輸入驹尼,注意搭配重復(fù)執(zhí)行趣避,否則只會(huì)執(zhí)行一次;
  • 碰到顏色【顏色】?:偵測(cè)角色是否碰到某個(gè)顏色新翎,它比以前用過(guò)的“碰到角色”更靈活程帕,即使是背景中的顏色也會(huì)生效,但要注意地啰,偵測(cè)的目標(biāo)區(qū)域最好是純色愁拭,如果是漸變色可能會(huì)失靈;
  • 自制積木:將重復(fù)性的代碼放到自制積木里亏吝,就能像使用內(nèi)置指令一樣使用它岭埠。

課后思考

本節(jié)進(jìn)一步復(fù)習(xí)了繪圖編輯器的用法,Scratch 中的背景也是可以自定義的蔚鸥。除此之外惜论,陌生的指令較少,但要重點(diǎn)掌握的是“重構(gòu)”止喷。使用自制積木的方式馆类,將程序中重復(fù)出現(xiàn)的代碼提取到“自制積木”中,能大大精簡(jiǎn)程序启盛,讓程序的結(jié)構(gòu)更加清晰蹦掐。

實(shí)際上,掌握重構(gòu)僵闯,是一個(gè)程序員水平高低的標(biāo)志之一哦卧抗!恭喜你今天已經(jīng)接觸到這一“秘技”!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鳖粟,一起剝皮案震驚了整個(gè)濱河市社裆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌向图,老刑警劉巖泳秀,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件标沪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡嗜傅,警方通過(guò)查閱死者的電腦和手機(jī)金句,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吕嘀,“玉大人违寞,你說(shuō)我怎么就攤上這事∨挤浚” “怎么了趁曼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)棕洋。 經(jīng)常有香客問(wèn)我挡闰,道長(zhǎng),這世上最難降的妖魔是什么掰盘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任摄悯,我火速辦了婚禮,結(jié)果婚禮上愧捕,老公的妹妹穿的比我還像新娘射众。我一直安慰自己,他們只是感情好晃财,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著典蜕,像睡著了一般断盛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上愉舔,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天钢猛,我揣著相機(jī)與錄音,去河邊找鬼轩缤。 笑死命迈,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的火的。 我是一名探鬼主播壶愤,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼馏鹤!你這毒婦竟也來(lái)了征椒?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤湃累,失蹤者是張志新(化名)和其女友劉穎勃救,沒(méi)想到半個(gè)月后碍讨,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了讯泣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渠欺。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖孕惜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤锻梳,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站净捅,受9級(jí)特大地震影響疑枯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛔六,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一荆永、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧国章,春花似錦具钥、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至四啰,卻和暖如春宁玫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背柑晒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工欧瘪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人匙赞。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓佛掖,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親涌庭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子芥被,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容