高级篇——单位换算

【疑惑篇】

点击绿旗按钮开始游戏。

点击按钮选择练习模式,“熟悉进率”或“单位换算”。点击小猫查看答案,自动进入下一题。

视频演示open in new window

亲自操作open in new window

【线索篇】

案例分析

它们发生的场景是什么?

每个场景中有哪些角色?

每个场景中的每个角色在做什么?

  1. 点击绿旗按钮,循环播放背景音乐,显示游戏类型按钮。
  2. 点击游戏类型按钮,开始相应游戏,显示游戏时长和回答题目数量。
  3. 小猫移动至随机位置,进行提问。
  • 熟悉进率:随机挑选一组进率单位,提问从高级单位换算为低级单位的进率是多少?
  • 单位换算:随机挑选一组进率单位,提问从高级或低级单位的随机值,换算为另一种单位的值是多少?
  1. 点击小猫,说出答案,自动进入下一问题,回答题目数量加1。

积木提示

当绿旗被点击

移到x:(0) y:(0)

说(你好!)(2)秒

说(你好!)

换成([造型1])造型

下一个造型

换成([背景1])背景

显示

隐藏

播放声音([喵])等待播完

播放声音([喵])

当角色被点击

当接收到[消息1]

广播[消息1]

等待(1)秒

重复执行

如果<>那么

如果<>那么否则

当作为克隆体启动时

克隆[自己]

删除此克隆体

计时器

计时器归零

在(1)和(10)之间取随机数

等于

连接(苹果 )和(香蕉)

[绝对值]

变量

自制积木

解决篇

基础口算练习中,你已经学会了如何计算加减乘除。一个数字在实际生活中被使用时,通常都会附带一个单位,例如表示长度的米、分米、厘米,表示重量的千克、克、公斤、斤、两等等。在对它们的运用过程中,会出现需要对不同单位进行换算的情况,这个案例就是用来帮助你练习单位换算。

第一步,还是把用到的背景Space添加进来。

第二步,添加角色。

这个案例中使用了默认的小猫角色,不需要修改。另外还有作为游戏类型选择的按钮角色。你同样可以添加两个不同的按钮角色,或者只添加一个按钮角色,利用克隆来实现它。

第三步,使用指令积木实现程序。

1. 点击绿旗按钮,循环播放背景音乐,显示游戏类型按钮。

这一步很简单了,当绿旗被点击时,我们还是让舞台循环播放背景音乐,小猫隐藏起来,按钮显示出来放在固定的位置。在这里我使用了两个不同的按钮角色,你可以自己尝试一下使用克隆来完成它。

2. 点击游戏类型按钮,开始相应游戏,显示游戏时长和回答题目数量。

接下单,当你点击其中一个按钮时,我们就要开始进行不同的游戏。到时候小猫会根据被点击的按钮不同,提出不同的问题。你现在就需要思考一下,如何让小猫区分应该进行哪种游戏?

或许你能很快想到一种解决方式,当不同的按钮被点击时,它们可以给小猫各自广播一条消息。例如,熟悉进率按钮广播[开始熟悉进率游戏],单位换算按钮广播[开始单位换算游戏]。当小猫接收到不同的消息时,就知道应该进行哪种游戏了。

这是一种解决方式,还有没有别的方法呢?比如说我们新建一个游戏类型的变量,通过给它设置不同的变量值,让小猫区分游戏类型?

使用这种方式,当两个按钮角色被点击时,它们只需要先将游戏类型变量设置为不同值,然后广播一条相同的消息通知小猫开始游戏即可。小猫接收到开始游戏消息后,只需要对游戏类型变量值进行判断,就可以知道该进行哪种游戏。

在学习编程的过程中,你一定要很熟悉如何利用变量来对不同的东西进行区分,它们可以是不同东西的类别,或者一个东西的不同状态等等。

开始游戏之后,我们还使用了两个变量,一个用来对游戏时长计时,另一个用来记录玩家回答的个数。

先新建两个变量游戏时间和回答数量。

开始时我们同样可以将它们交由舞台来管理。当绿旗被点击时,先将它们隐藏起来。当接收到[游戏开始]的消息时,再让它们显示出来。别忘了游戏开始时需要将它们的变量值设为0。

紧接着,你就需要修改游戏时间,让它一秒一秒往上增长。你可以像基础口算练习中那样,使用重复执行等待(1)秒将[我的变量]增加(1)积木,每隔一秒让变量值增加1。

你也可以使用计时器归零计时器积木,不停的将计时器的值设置给游戏时间变量。不过这样显示的时间会有一个问题,计时器的时间精确到了毫秒,所以数字是一个小数。

有没有什么方法可以只显示秒呢?你可以利用运算分类的中的[绝对值]积木,积木参数选择向下取整,这时该积木会返回不超過传入数字的整數中最大的一个。例如,当你传入一个正数时,它就会将小数部分删除,只保留整数部分。

3. 小猫移动至随机位置,进行提问。

开始游戏后,首先小猫会开始提问。为了让小猫看上去不太死板,每次提问时,我会先让它移动到舞台上的一个随机位置,然后通过说(你好!)积木说出问题。

你可能会想到使用移到([随机位置])积木来让小猫移动。

点击绿旗按钮进行测试,你会发现一个小问题。当小猫移到游戏时间变量附近时,它的说话气泡会被变量给遮挡住,你也就无法看见小猫的问题是什么。

如何解决呢?很简单,你只需要先为小猫设定一个随机移动的范围,例如你可以拖动小猫来到你设置范围的四个角落,记住此时的x和y坐标范围值。

接着利用移到x:(0) y:(0)在(1)和(10)之间取随机数积木为它随机获取范围内的坐标值即可。

接下来,就要开始考虑如何获取不同的题目了。

  • 熟悉进率:随机挑选一组进率单位,提问从高级单位换算为低级单位的进率是多少?

  • 单位换算:随机挑选一组进率单位,提问从高级或低级单位的随机值,换算为另一种单位的值是多少?

小猫可以在不同数值和不同单位间任意提问。在之前的案例中你已经学习过了列表,或许你可以想到只要新建一个问题列表,然后将所有用到的问题都提前添加进列表中。提问时就可以从问题列表中随机取出一个,让小猫说出来即可。

通过这样做确实可以实现提问的功能,但是也会有几个问题。

第一个问题,你如何在一个列表的题目中区分,哪些是熟悉进率的题目,哪些是单位换算的题目?

或许你马上就能想到,可以建立两个不同的问题列表,再通过对游戏类型变量进行判断,就可以去对应的问题列表取值。

现在请你注意观察两种游戏类型的问题有什么区别?

假设我们现在只进行米和分米,千克和克这两组单位之间的换算。

在熟悉进率的问题列表中,你只需要填入两个问题1米=?分米和1千克=?克就可以了。

可是单位换算的问题列表呢?你可以提问1米=?分米,2米=?分米,1千克=?克,3千克=?克等等。也就是说在米和千克前面你可以填入任意一个数字。这样还没完,你还可以反过来将低级单位放在前面,提问10分米=?米,20分米=?米,3000克=?千克,5000克=?千克等等,同样在分米和克前面的数字可以任意替换。也就是说单位换算列表中可以填入的问题是无穷无尽的。

第二个问题,在下一步小猫被点击后,你如何知道当前问题的答案?

或许你会想到,只要你在问题列表中添加问题时,把答案也加进去。例如,在每个问题的下面再添加一个它的答案。

这样一来在挑选问题时,你就可以把列表中编号为单数的选出来作为问题提问,再将选出的问题编号加1,就可以获取到它的答案。

这是一种解决方法,不过要使用这种方法你就又要开始思考如何才能利用在(1)和(10)之间取随机数积木获取单数的随机值。

说完了使用上面的方法可能会遇到的问题,接下来就要想一想,有没有更简洁的方式可以获取不同的问题,并得到对应的答案?

不过在此之前,我想先请你思考另外一个问题,当你在进行单位换算时,你到底在做什么?或者说当你在进行单位换算,你知道哪些条件,又要解决什么问题?

既然是单位换算,当然你会知道两个需要进行换算的单位,并且他们必须是相同的类型。例如,米和分米都是长度单位,千克和克都是质量单位。

接着,要进行单位换算,你还要知道其中一个单位的具体数值。例如,5千克=?克中的5,30分米=?米中的30。

最后,你要解决的问题是,如何将已知单位的数值换算为另一个单位的等量数值。例如,求出5千克=5000克中的5000,30分米=3米中的3。

具体应该如何求值呢?

这时你就需要用到两个单位之间的进率,也就是高级单位表示出的数值和用低级单位表示出的数值之比。例如,米和分米之间的进率为10,千克和克之间的进率为1000。

知道了两个单位之间的进率,你就可以利用其中一个单位的数值计算出另一个单位。

高级单位数值×进率=低级单位数值

低级单位数值÷进率=高级单位数值

现在回到我们的案例中,看一下小猫提出的问题是什么?例如下面这个问题。

请你想一想可以将小猫的问题拆分成我们上面所说的哪几部分?

是不是每个问题都可以拆分成4个部分,高级单位数值、高级单位、低级单位数值、低级单位。除此之外,为了进行单位间的换算,你还需要知道两个单位间的进率。

现在开始调动你的大脑,假如我将这5个部分(高级变量数值、高级变量、低级变量数值、低级变量和进率)分别建立为变量,然后将它们设置成不同的变量值,再将这些变量值按照一定的顺序拼接起来,是不是就得到了不同的问题或答案?接下来我们就开始来实现它。

首先建立这5个变量。

在提问和回答之前,先将它们设为相应的变量值,接着就可以利用连接(苹果 )和(香蕉)积木拼接出小猫说话的问题和答案。

你同样可以使用自制积木把它们封装成两个部分。

一个自制积木叫生成换算题。生成换算题时,不需要显示自制积木的运行过程,可以勾选运行时不刷新屏幕。

另一个积木叫显示问题或答案。显示问题和显示答案有一个小的区别,在显示问题时,需要将其中一个数值改为问号。为了让自制积木能够区分是否需要改成问号,你可以给这个自制积木加上一个参数叫做显示类型。如果显示类型等于问题,就将数值替换为问号,否则就显示数值。

点击绿旗按钮测试一下,现在小猫已经可以正常的提问了。但是目前的程序还有几个问题。

首先,目前的程序在生成换算题时,是将单位和进率变量设置成了固定值。

之前你已经想到了可以用列表来存储不同的问题,然后随机取出一个进行提问。同样的方法,现在也可以利用变量来存储不同的单位和进率,然后随机取出一组来使用。

现在请你思考一下,应该如何来用列表存储它们呢?像之前所想那样,建立一个变量,第1行存第一个低级单位,第2行存第一个高级单位,第3行存第一个进率。接着,第4行存第二个低级单位,第5行存第二个高级单位,第6行存第二个进率,依次类推?

使用这种方法来做没有问题,只是在随机取出某一组单位和进率时不太方便。还有没有其他方法呢?

想一想每个题目的单位和进率之间有什么联系?是不是每一组的单位和进率都是一一对应的。一个题目中的低级单位会对应一个高级单位,他们两个又会对应一个进率。

现在我们可以建立三个列表,分别是低级单位列表、高级单位列表和进率列表。

接着往里面填入各自的数据。在填入时需要注意一点,同一个问题的一组单位和进率,需要填到列表中相同编号的位置。

例如,编号为1的低级单位填米,高级单位填千米,进率就要填1000;编号为2的低级单位填分米,高级单位填米,进率就要填10,以此类推。

想一想这样做的目的是什么?

现在每一组单位和进率在列表中的编号都是相同的。当你通过一个随机编号从低级单位列表中取出一个值时,利用相同的编号,你就可以从高级单位列表和进率列表中获取到,与被取出的低级单位所对应的值。

还记不记的在之前的分析中,需要将问题和答案分为单数和双数存入同一个列表中。使用相同的方法,你可以将问题和答案分成两个列表,再利用相同的编号来获取相对应的问题和答案。

点击绿旗按钮进行测试,现在小猫已经从列表中随机取出不同的问题显示在舞台上。

接下来,开始处理另一个问题,如何区分熟悉进率和单位换算这两个不同的游戏类型?

在熟悉进率的游戏中,每个问题都是将数量为1的某个高级单位,转换成低级单位的对应数值。

所以我们在设置高级单位数值时,需要利用游戏类型变量做判断,如果游戏类型等于熟悉进率,那么就将高级单位数值设为1,否则设为在(1)和(10)之间取随机数积木所取的随机值。

在显示问题和答案积木中,同样需要对游戏类型做判断,以决定高级单位和低级单位在等号两边的位置。如果游戏类型等于熟悉进率,那么就将高级单位固定显示在等号的左侧。

如果游戏类型等于单位换算呢?那么两种单位的位置就可以随机进行调换。这里需要注意的是,为了能保证单位的位置在问题和答案中是一致的,例如问题是1千克=?克,答案就应该是1千克=1000克,而不能是1000克=1千克。你就必须保证在提问和回答时,用来判断单位位置的随机值也是一致的。

例如,你可以增加一个变量叫做高级单位位置,在生成换算题中为它设值。你可以用1和2分别代表等号的左边和右边。如果游戏类型等于熟悉进率,那么它的值固定是1。如果游戏类型等于单位换算,那么它的值就在1和2之间取随机值。

接着你就可以重新修改显示问题和答案积木,不再使用游戏类型进行判断,改为使用高级单位位置来判断。

4. 点击小猫,说出答案,自动进入下一问题,回答题目数量加1。

最后一步,当小猫被点击时,让它说出答案。很简单了,在当角色被点击后面使用显示问题或答案积木,参数填入答案。

说完答案后,将回答题目数量加1,然后重新让小猫移到新位置提问。提问的方法是不是和开始游戏时一模一样?第一步,移动到随机位置;第二步,生成换算题;第三步,显示问题和答案,参数填入问题。

还记不记得我在介绍自制积木的用法时说过,当你多次使用相同的指令去完成同样的任务时,就可以考虑将它们封装到一个自制积木中使用。在这里你可以新建一个自制积木叫做提问,然后将提问的三行指令放入其中。

点击绿旗按钮进行测试,你已经可以选择不同的游戏类型,正常的进行单位换算的练习了。

最后,你还可以考虑在小猫提问和回答时播放一个音效,让游戏效果更佳。

好了,这样你就已经完成了单位换算练习的小游戏。

想看更多学习案例,欢迎点击查看《Scratch 3学习手册》open in new window

想要获取所有案例源码和素材,以及获得我对你在学习中所遇问题的一对一解答,欢迎加入石头解忧杂货店

Last Updated:
Contributors: lanheixingkong