- 少兒計(jì)算思維養(yǎng)成記:六個(gè)孩子的編程學(xué)習(xí)筆記
- 包若寧等編著
- 1153字
- 2022-04-24 09:43:41
二、動(dòng)手練:閱兵方陣列隊(duì)行進(jìn)
(一)實(shí)驗(yàn)?zāi)康?/h4>
讓小貓排成一個(gè)閱兵方陣,并且列隊(duì)行進(jìn)。
(二)基本思路
我們首先創(chuàng)建一個(gè)小貓角色,名字叫Sprite1,然后讓這個(gè)小貓生成多個(gè)克隆體。比如方陣有3行2列,我們就生成6個(gè)克隆體,加上原始角色Sprite1,我們會(huì)看到一共有7只小貓。
在用克隆技術(shù)時(shí),我們要注意下面幾點(diǎn):
1)創(chuàng)建克隆體時(shí)使用的是“克隆自己”積木塊(在“控制”類里)。
2)當(dāng)克隆體剛剛生成時(shí),跟原角色是一模一樣的,當(dāng)然了,后面克隆體可以改變自己的狀態(tài)。這里,我們讓角色每走到一個(gè)位置就克隆一次,這樣克隆的初始位置就有了。
3)克隆體執(zhí)行哪段腳本呢?我們把克隆體要執(zhí)行的腳本前面加上“當(dāng)作為克隆體啟動(dòng)時(shí)”積木(在“控制”類中),就是圖5-2中顯示的這個(gè)。

圖5-2 “當(dāng)作為克隆體啟動(dòng)時(shí)”積木
提醒一下:原始角色Sprite1的腳本前面是“當(dāng)被點(diǎn)擊”(在“事件”類),可不要弄混了啊!
(三)編程步驟
(1)角色設(shè)計(jì)
只有一個(gè)角色小貓,名字叫Sprite1。
(2)變量設(shè)計(jì)
跟上一講一樣,我們?cè)O(shè)置兩個(gè)變量“幾行”和“幾列”,表示閱兵方陣的行數(shù)和列數(shù);此外,我們還要新增加兩個(gè)變量“我的x坐標(biāo)”“我的y坐標(biāo)”。不過(guò)建立這兩個(gè)變量時(shí)一定要選擇“僅適用于當(dāng)前角色”,否則所有克隆體的“我的x
坐標(biāo)”變量都是同樣的值,“我的y
坐標(biāo)”變量也都是同樣的值。
(3)過(guò)程描述與代碼展示
我們讓小貓從第一行的第一列開(kāi)始,逐個(gè)去站位,每隔50步站一只;站滿了一隊(duì)就換下一隊(duì),再?gòu)念^開(kāi)始。不過(guò)站位時(shí)是“克隆”一個(gè)自己(見(jiàn)圖5-3中左側(cè)部分)。

圖5-3 用克隆技術(shù)實(shí)現(xiàn)的閱兵方陣腳本(左)及實(shí)驗(yàn)結(jié)果(右)
(四)實(shí)驗(yàn)結(jié)果
現(xiàn)在點(diǎn)擊綠旗,輸入行數(shù)和列數(shù),你就會(huì)看到小貓排好方陣,然后每秒走一次了(見(jiàn)圖5-2中右側(cè)部分)。
注意,這六個(gè)克隆體的腳本相同,但是起始位置是各不相同的;每個(gè)克隆體的起始位置是創(chuàng)建克隆體時(shí)角色的位置。
(五)遇到的bug及改正過(guò)程
bug:今天我遇到一件奇怪的事情,一開(kāi)始程序運(yùn)行得好好的,突然再運(yùn)行時(shí)小貓都不出現(xiàn)了。程序沒(méi)做任何改動(dòng)啊,真奇怪!
改正:我查了半天,才發(fā)現(xiàn)一個(gè)低級(jí)錯(cuò)誤——我不小心按到了角色區(qū)的顯示開(kāi)關(guān)上,關(guān)閉了小貓的顯示。怪不得呢!重新打開(kāi)顯示開(kāi)關(guān)就好了。
(六)思考與延伸
我覺(jué)得克隆最大的好處就是避免了對(duì)每個(gè)角色重復(fù)編寫相同的腳本。
克隆很有用,但是也不能無(wú)限制地生成克隆體。當(dāng)克隆體達(dá)到一定數(shù)量的時(shí)候,Scratch就會(huì)停止克隆。
我們可以自己測(cè)試一下,比如新建一個(gè)變量,將變量的初始值設(shè)置為0,每克隆一個(gè)就增加1,最后就可以看到最終的克隆體個(gè)數(shù)了。我試了一下,克隆到300個(gè)左右就無(wú)法繼續(xù)下去了。這是因?yàn)榭寺◇w越多,需要的內(nèi)存也越多,短時(shí)間內(nèi)大量增加克隆體會(huì)導(dǎo)致計(jì)算機(jī)內(nèi)存消耗極大,容易卡死。
那么,在使用克隆功能的過(guò)程中要如何解決這個(gè)問(wèn)題呢?Scratch提供了一個(gè)“刪除此克隆體”的積木(在“控制”類中),在用完克隆體后要及時(shí)刪除。