陳新龍

大家都聽說過曹沖稱象的故事,孫權(quán)送給曹操一頭大象,曹操心想這頭大象有多重呢?想了半天也沒有方法計算出大象的重量,這時候聰明的曹沖就把大象牽到船上,沿水面在船身上畫了標記,把大象牽回岸上,再往船里裝石頭,直到水位線與標記重合,把船里的石頭稱一下,就計算出大象的重量了。
小小的曹沖就顯現(xiàn)出了過人的聰明智慧,今天我們就用Scratch來復現(xiàn)曹沖稱象的小故事。曹沖稱象屬于數(shù)學的“等量替換”方法,用許多石頭代替大象,利用在船舷上刻記號,產(chǎn)生等量的效果,在游戲中我們用鼠標左鍵點擊石頭,石頭會移動到船上,船體根據(jù)石頭的重量會下沉,石頭分為大石頭和小石頭,大石頭一個500公斤,小石頭100公斤,當船體下沉到刻畫的記號的時候,就可以稱出大象的重量,如果一直添加石頭,超出了刻度線,船就會下沉哦。作品中需要的圖片素材,可以關(guān)注“壹零社”公眾號下載。

背景分成兩個造型,分別是空白背景和曹沖稱象的背景,當點擊綠色旗幟開始后,切換成曹沖稱象圖片背景,當語音播放完曹沖稱象等待一秒后利用廣播功能廣播“稱象”對其他角色發(fā)布指令,自身切換成空白背景。新增三個變量:總重量、大石頭個數(shù)、小石頭個數(shù),并賦予初始值0。

水的動作非常簡單,當點擊綠旗開始后,移動到固定的位置(0,0)隱藏起來,當接收到“稱象”通知廣播后,從隱藏到顯示,并且增加一個虛像50的特效表現(xiàn)水是半透明的(虛像特效范圍為0~100,數(shù)值越大,虛像的值越高,效果越明顯,直至消失)。


我們預先設(shè)定大石頭的重量是500公斤,小石頭的重量是100公斤。以大石頭為例,當點擊綠旗運行后將“大石塊個數(shù)”設(shè)置為初始值0,當角色被點擊時克隆“自己”,克隆體啟動時,“大石塊個數(shù)”的變量也隨之增加1,虛像特效設(shè)為50,在1秒內(nèi)滑行到船的坐標位置。大小石頭因重量不同需要廣播不同的廣播信號,大石頭廣播消息“下沉5”,小石頭廣播消息“下沉1”。隨著石頭個數(shù)的增加,重量增加后所有石頭要和船一起下沉,循環(huán)執(zhí)行“移動到船”。

船部分代碼是最復雜的,需要實現(xiàn)三部分功能:稱重、下沉、沉船。點擊綠旗開始后,將船移動到初始的位置,隱藏起來,當收到“稱象”的通知廣播后,顯示角色。我們根據(jù)船的Y坐標和水的Y坐標對比來判斷船的位置。重復測量船體和水位線的高度,船的Y坐標減去水的Y坐標的結(jié)果如果小于-5時判斷船已經(jīng)因過載沉沒:廣播“沉船”消息。當結(jié)果小于0時,說明水面已經(jīng)超過紅線標記,提示“不能再加石頭了,船會沉沒!”。收到沉船的通知廣播后,船角色的Y坐標會一直減去2直到沉入水底結(jié)束。


當船收到大石頭和小石頭的廣播信號之后,可以知道添加了不同大小的石頭。當添加大石頭時,船的Y坐標減少5,用船的Y坐標減去水的Y坐標的結(jié)果大于5可以一直添加大石頭,當結(jié)果小于5大于0時,警告提示:“接近標記,更換小石頭”。當結(jié)果剛好等于標記高度時,開始稱重,計算石頭的重量。當添加小石頭時,船的Y坐標減少1,并且計算距離水面的距離,直到船體標記和水位線相同,計算出最終的重量。計算重量的公式:大石頭個數(shù)×500+小石頭個數(shù)×100,便可以計算出總重量。
根據(jù)成語典故我們完成了曹沖稱象的小作品,曹沖用了“等量替換”的方法計算出大象的重量,課后大家也可以自己制作出其他成語故事的小作品。