陈新龙
大家都听说过曹冲称象的故事,孙权送给曹操一头大象,曹操心想这头大象有多重呢?想了半天也没有方法计算出大象的重量,这时候聪明的曹冲就把大象牵到船上,沿水面在船身上画了标记,把大象牵回岸上,再往船里装石头,直到水位线与标记重合,把船里的石头称一下,就计算出大象的重量了。
小小的曹冲就显现出了过人的聪明智慧,今天我们就用Scratch来复现曹冲称象的小故事。曹冲称象属于数学的“等量替换”方法,用许多石头代替大象,利用在船舷上刻记号,产生等量的效果,在游戏中我们用鼠标左键点击石头,石头会移动到船上,船体根据石头的重量会下沉,石头分为大石头和小石头,大石头一个500公斤,小石头100公斤,当船体下沉到刻画的记号的时候,就可以称出大象的重量,如果一直添加石头,超出了刻度线,船就会下沉哦。作品中需要的图片素材,可以关注“壹零社”公众号下载。
背景分成两个造型,分别是空白背景和曹冲称象的背景,当点击绿色旗帜开始后,切换成曹冲称象图片背景,当语音播放完曹冲称象等待一秒后利用广播功能广播“称象”对其他角色发布指令,自身切换成空白背景。新增三个变量:总重量、大石头个数、小石头个数,并赋予初始值0。
水的动作非常简单,当点击绿旗开始后,移动到固定的位置(0,0)隐藏起来,当接收到“称象”通知广播后,从隐藏到显示,并且增加一个虚像50的特效表现水是半透明的(虚像特效范围为0~100,数值越大,虚像的值越高,效果越明显,直至消失)。
我们预先设定大石头的重量是500公斤,小石头的重量是100公斤。以大石头为例,当点击绿旗运行后将“大石块个数”设置为初始值0,当角色被点击时克隆“自己”,克隆体启动时,“大石块个数”的变量也随之增加1,虚像特效设为50,在1秒内滑行到船的坐标位置。大小石头因重量不同需要广播不同的广播信号,大石头广播消息“下沉5”,小石头广播消息“下沉1”。随着石头个数的增加,重量增加后所有石头要和船一起下沉,循环执行“移动到船”。
船部分代码是最复杂的,需要实现三部分功能:称重、下沉、沉船。点击绿旗开始后,将船移动到初始的位置,隐藏起来,当收到“称象”的通知广播后,显示角色。我们根据船的Y坐标和水的Y坐标对比来判断船的位置。重复测量船体和水位线的高度,船的Y坐标减去水的Y坐标的结果如果小于-5时判断船已经因过载沉没:广播“沉船”消息。当结果小于0时,说明水面已经超过红线标记,提示“不能再加石头了,船会沉没!”。收到沉船的通知广播后,船角色的Y坐标会一直减去2直到沉入水底结束。
当船收到大石头和小石头的广播信号之后,可以知道添加了不同大小的石头。当添加大石头时,船的Y坐标减少5,用船的Y坐标减去水的Y坐标的结果大于5可以一直添加大石头,当结果小于5大于0时,警告提示:“接近标记,更换小石头”。当结果刚好等于标记高度时,开始称重,计算石头的重量。当添加小石头时,船的Y坐标减少1,并且计算距离水面的距离,直到船体标记和水位线相同,计算出最终的重量。计算重量的公式:大石头个数×500+小石头个数×100,便可以计算出总重量。
根据成语典故我们完成了曹冲称象的小作品,曹冲用了“等量替换”的方法计算出大象的重量,课后大家也可以自己制作出其他成语故事的小作品。