陳新龍
大家都聽說過曹沖稱象的故事,孫權(quán)送給曹操一頭大象,曹操心想這頭大象有多重呢?想了半天也沒有方法計(jì)算出大象的重量,這時(shí)候聰明的曹沖就把大象牽到船上,沿水面在船身上畫了標(biāo)記,把大象牽回岸上,再往船里裝石頭,直到水位線與標(biāo)記重合,把船里的石頭稱一下,就計(jì)算出大象的重量了。
小小的曹沖就顯現(xiàn)出了過人的聰明智慧,今天我們就用Scratch來復(fù)現(xiàn)曹沖稱象的小故事。曹沖稱象屬于數(shù)學(xué)的“等量替換”方法,用許多石頭代替大象,利用在船舷上刻記號(hào),產(chǎn)生等量的效果,在游戲中我們用鼠標(biāo)左鍵點(diǎn)擊石頭,石頭會(huì)移動(dòng)到船上,船體根據(jù)石頭的重量會(huì)下沉,石頭分為大石頭和小石頭,大石頭一個(gè)500公斤,小石頭100公斤,當(dāng)船體下沉到刻畫的記號(hào)的時(shí)候,就可以稱出大象的重量,如果一直添加石頭,超出了刻度線,船就會(huì)下沉哦。作品中需要的圖片素材,可以關(guān)注“壹零社”公眾號(hào)下載。
背景分成兩個(gè)造型,分別是空白背景和曹沖稱象的背景,當(dāng)點(diǎn)擊綠色旗幟開始后,切換成曹沖稱象圖片背景,當(dāng)語音播放完曹沖稱象等待一秒后利用廣播功能廣播“稱象”對其他角色發(fā)布指令,自身切換成空白背景。新增三個(gè)變量:總重量、大石頭個(gè)數(shù)、小石頭個(gè)數(shù),并賦予初始值0。
水的動(dòng)作非常簡單,當(dāng)點(diǎn)擊綠旗開始后,移動(dòng)到固定的位置(0,0)隱藏起來,當(dāng)接收到“稱象”通知廣播后,從隱藏到顯示,并且增加一個(gè)虛像50的特效表現(xiàn)水是半透明的(虛像特效范圍為0~100,數(shù)值越大,虛像的值越高,效果越明顯,直至消失)。
我們預(yù)先設(shè)定大石頭的重量是500公斤,小石頭的重量是100公斤。以大石頭為例,當(dāng)點(diǎn)擊綠旗運(yùn)行后將“大石塊個(gè)數(shù)”設(shè)置為初始值0,當(dāng)角色被點(diǎn)擊時(shí)克隆“自己”,克隆體啟動(dòng)時(shí),“大石塊個(gè)數(shù)”的變量也隨之增加1,虛像特效設(shè)為50,在1秒內(nèi)滑行到船的坐標(biāo)位置。大小石頭因重量不同需要廣播不同的廣播信號(hào),大石頭廣播消息“下沉5”,小石頭廣播消息“下沉1”。隨著石頭個(gè)數(shù)的增加,重量增加后所有石頭要和船一起下沉,循環(huán)執(zhí)行“移動(dòng)到船”。
船部分代碼是最復(fù)雜的,需要實(shí)現(xiàn)三部分功能:稱重、下沉、沉船。點(diǎn)擊綠旗開始后,將船移動(dòng)到初始的位置,隱藏起來,當(dāng)收到“稱象”的通知廣播后,顯示角色。我們根據(jù)船的Y坐標(biāo)和水的Y坐標(biāo)對比來判斷船的位置。重復(fù)測量船體和水位線的高度,船的Y坐標(biāo)減去水的Y坐標(biāo)的結(jié)果如果小于-5時(shí)判斷船已經(jīng)因過載沉沒:廣播“沉船”消息。當(dāng)結(jié)果小于0時(shí),說明水面已經(jīng)超過紅線標(biāo)記,提示“不能再加石頭了,船會(huì)沉沒!”。收到沉船的通知廣播后,船角色的Y坐標(biāo)會(huì)一直減去2直到沉入水底結(jié)束。
當(dāng)船收到大石頭和小石頭的廣播信號(hào)之后,可以知道添加了不同大小的石頭。當(dāng)添加大石頭時(shí),船的Y坐標(biāo)減少5,用船的Y坐標(biāo)減去水的Y坐標(biāo)的結(jié)果大于5可以一直添加大石頭,當(dāng)結(jié)果小于5大于0時(shí),警告提示:“接近標(biāo)記,更換小石頭”。當(dāng)結(jié)果剛好等于標(biāo)記高度時(shí),開始稱重,計(jì)算石頭的重量。當(dāng)添加小石頭時(shí),船的Y坐標(biāo)減少1,并且計(jì)算距離水面的距離,直到船體標(biāo)記和水位線相同,計(jì)算出最終的重量。計(jì)算重量的公式:大石頭個(gè)數(shù)×500+小石頭個(gè)數(shù)×100,便可以計(jì)算出總重量。
根據(jù)成語典故我們完成了曹沖稱象的小作品,曹沖用了“等量替換”的方法計(jì)算出大象的重量,課后大家也可以自己制作出其他成語故事的小作品。