【超详细Scratch教学课件分享】两位数可暂停倒计时

您好,感谢您一直对少儿编程、对“与非学堂”的关注。为了更好地为大家服务,诚邀您填写一份《关于少儿编程教与学的课件资源素材需求调查》,https://www.wjx.cn/jq/82398684.aspx。

图片

问卷二维码

 

 

本篇内容在与非学堂公众号2020年9月7日首发。

 

全世界的少儿编程老师,Unite!

 

 

课件属性分析(每项数值最高都为10):

  • 难易度-7(适用于具有循环、条件、变量基础,中等偏上水平的孩子)

  • 趣味性-4(不是特别有趣,中偏下)

  • 讲授性-7(需要老师比较多的讲解,学生听讲理解、接受)

  • 启发性-5(使用了6次关键的选择题,2次关键的问答题)

 

故事背景:

小熊已经编写好了一个从9开始数到0的倒计时,并且还可以随时按下空格键,控制倒计时的开始或继续。但是现在它有了更多的想法:既然已经有这些功能了,为什么不能设计一个可以从99往下倒数的倒计时呢?

 

作品效果要求:

设计一个倒计时,可以从99开始倒计时,数字每秒减小1,显示0时,播放铃声,并且在倒计时过程中,按下空格键时,如果正在进行,则计时暂停,如果按下时已经暂停了,则计时继续。

 

课堂教学流程:

找回我们之前完成的“可暂停倒计时”(【超详细Scratch教学课件分享】可暂停倒计时)。

 

我们已经可以让数字从9倒数到0,在这个过程中可以随时按下空格暂停或继续了。

 

大家回想一下,曹老师是怎么让大家完成可暂停的倒计时这个功能的呢?

 

我们是这样做的。如上图,要用一个操作控制暂停和继续,关键是用一个“计时状态”的变量,让它在两种状态之间切换。然后在重复换造型的代码那里,根据这个变量的值来确定是否真的要换造型,循环的结束条件就是造型编号=10(即0的造型)。

 

现在,我们要让倒计时从99开始,意思就是要显示两位数。

 

原来一位数,现在要变成两位数。大家想一想,怎么做呢?

 

老师这里教大家两个方法。

 

第一个方法啊,很简单,同学们都能想得到。

 

大家说之前我们是怎么做到数字9、8、7……0这样变化的?是不是用的换造型?

 

那既然之前我们用的换造型,完成了从9到0的变化,现在我们是不是也一样可以用换造型的方式,让这个角色从99到0的变化啊?

 

回答肯定是YES!

 

我们试一试,把角色的造型,一个一个增加,从9一直添加到99,大的数字都往前放。来吧!

 

(此处如果真的要做的话,耗时5分钟……)

 

大家想一想,这种做法做完之后,需要改的地方只有一个:“重复执行直到”后面的条件,改为“造型编号=100”就可以了(因为这时造型0已经是第100个造型了)。

 

按理说,运行也不会有任何问题!

 

但是!大家想一想,这种方法是简单呢,还是不简单呢?

 

我们如果是从99倒数到0,用这种方法其实还可以,大不了费几分钟时间嘛!但是,如果要让这个程序,从999倒数到0呢?从9999倒数到0呢?是不是就会把人累死了啊?

 

同学们注意,我们在编程时,如果你写的程序,能解决当前你遇到的一个问题,那可以算是及格,如果能解决几种情况下的问题,可以得80分,如果能适用更多的情况,更加通用,那就能得90多100分了。

 

程序的通用性,一个代码能不能解决更多的同类问题,是判断这个代码好坏的一个方面。

 

这就是说,如果我们的代码更通用,那过一段时间我们就更有可能会再用到它,它重复使用的几率就增大了。同样,如果我们的代码更通用,大家也可以一起在网上共享了,我们就可以直接把别人已经写过的解决同样问题的代码,拿来就能解决自己的问题了。

 

大家别小看了这种代码的优势。正是有了这种通用性、可重用性,计算机技术才能在这么短短几十年取得这么大的成果。

 

好,那么我们现在就来想一想,怎么才能让这个倒计时的程序,能够以不变应万变,让我们不管想从几位数开始倒计时,都能够完美进行呢?

 

这就是曹老师要介绍给同学们的第二种办法

 

这种方法更加通用,那说明我们考虑到的点就会更多,不用说,编程肯定会更加麻烦一点。但是麻烦只是暂时时,一旦写好这个程序,无论什么需求,都能很好的快速实现了!

 

不过为了使问题先不要一下子就变得很难,我们还是把数字先控制为从99开始。后面我们再说从任意位数开始的做法。

 

刚才第一种办法,我们是在1个角色上添加100个造型。现在我们换个思路,1个角色已经有了0-9这十个数字,那要显示0-99这一百个数字的话,还可以怎么做?(请同学们直接回答)

 

我们可以直接把有着0-9这十个数字的角色,再复制一个,这样的话,让它们一前一后,一个代表十位数,一个代表个位数,就可以了。

 

(练习时间)

 

 

大家注意,这一步完成之后,我们需要整体地思考一下,如何往下进行了。

 

现在我们有两个数字角色,每个上面都有10个数字的造型。要想从99开始倒计时,中间仍可以控制它的暂停继续。

 

(请同学们先回答这个问题后继续后面的内容)

哪些角色需要有暂停继续的功能呢?

A. 十位数

B. 个位数

C. 都需要

 

很明显,这里应该选“都需要”。这是因为我们计时暂停,是两个位上的数字都得暂停。

 

既然是都需要的话,整个程序共用一个“计时状态”的变量,是不是就可以了?并不需要单独控制某个数字,对不对?所以,原来我们在每个角色里的控制“计时状态”的代码块,现在不需要放到每一个角色里了。

就是上面这段代码,它本来是在数字角色中的,我们在复制数字角色的时候,把它也一起复制了。这样一来,对整个程序而言,有两段同样的代码,那么当我们按下空格键时,同样的代码就会执行2次了,因此这样反而会出错。

 

因此我们得删除其中的一个,并且最好是选择比较理想的地方来放这个共用的变量控制代码。放哪里好呢?

 

(请同学们先回答这个问题后继续后面的内容)

程序共用的这段“计时状态”变量控制代码,最好可以放到哪里?

A. 十位数

B. 个位数

C. 舞台背景

 

因为代码是“共用”的,所以最好把它移到一个公共的,谁也不偏袒的地方,因此,我们可以把它从角色里移到舞台背景上,表示可以控制整个程序

 

(练习时间)

 

 

大家在改变用空格控制“计时状态”代码的位置后,可以运行试试,发现两个数字会同步从9变成0。

 

大家想一想,之前数字从9到0,非常简单,我们是直接让造型从9变到0就完事儿了。但是现在要从99开始,并且角色也变成了两个。

 

这里涉及两个问题

问题一,怎么让程序知道,数到哪一个数字了呢?

问题二,怎么让两个角色,一起来表示0-99之间的某一个数字呢?

 

(请同学们先回答这个问题后继续后面的内容)

程序要知道数到哪一个数字了,需要用到什么编程概念?

A. 循环

B. 条件

C. 变量

D. 广播

 

 

这个我们没得选了,就是变量。因为变量的功能,就是记录。程序需要知道的任何东西,都可以用变量。

 

这个变量,我们给它起个名字,就叫“当前数字”。

 

因为“当前数字”也不是属于某一个角色的,而是要指挥两个角色共同变化造型,所以我们也要在舞台背景上编写“当前数字初始化的代码。

 

(练习时间)

 

那下面面临的问题是,两个角色怎么一起表示“当前数字”这个变量表示的数字呢?

 

这里我们可以这样想,是不是“当前数字”这个变量的值,才是我们倒计时真正计的数,它是灵魂,而舞台上的两个角色,是“当前数字”的两张皮。

 

所以,这里我们得先把代码再调整一下。之前我们是直接在角色上用“重复执行直到……”控制的造型变化,对不对?现在不行了,现在我们得控制这个“当前数字”变量的变化才行。

 

简单地说,不管是重复执行的每1秒的数字变化,还是空格造成的暂停和继续,控制的应该是“当前数字”这个变量才对,而舞台上的两个角色,需要用某种方法,从这个“当前数字”的灵魂处,获取信息,显示自己应该显示的那个造型。

 

所以,让我们复制一份角色中的代码到舞台背景上,然后再修改吧!

 

角色中要复制到背景上的代码(同时把两个角色中现有的代码都删除):

 

 

在舞台背景上,要把复制来的代码修改成什么样子呢?

 

首先,舞台背景上不需要处理造型相关的东西,“换成……造型”直接删除。

 

其次,“重复执行直到……”后面再也不是“造型编号=10”了,而是要用灵魂变量“当前数字=0”来判断。

 

最后,计时里每次“等待1秒”后,不是“下一个造型”了,而是换成对变量的控制:“将当前数字增加-1”。

 

所以这时舞台背景上修改后的代码是这个样子的:

 

(练习时间)

 

 

运行起来后,可以看到,“当前数字”的变量(打上勾显示在舞台上),可以从99一直往下减少了,按下空格,它也可以暂停了。

 

现在就剩下两个数字角色不跟着“当前数字”这个变量变化造型的问题了。

 

我们暂且不想,怎么让数字角色真正显示成变量对应的值。我们先想一想,要让它们跟变量的值时时对应,应该用什么方法吧!

 

(请同学们先回答这个问题后继续后面的内容)

“当前数字”随时可能改变,也可能不改变,用哪种方法能让数字角色,时时跟“当前数字”保持同步?

A. 循环

B. 条件

C. 克隆

 

 

 

相信同学们看到了,问题中的一个关键词“随时”,像“随时”“一直”“时时”等这种表示重复时间的词,在编程实现时,必须要用到“循环”。(其实用广播也可以,同学们可以在完成这种方法后,再自己思考怎么用广播实现)
 

具体循环里要做什么事情,才能让造型跟“当前数字”变量值保持一致呢?

 

“换成……造型”这个代码块,肯定是会要用到的,但是这个代码块只能选择换到某一个固定的造型,我总不可能要循环地换成一个固定的数字吧?那这样效果就是这个显示出来的数字再也不会改变了。

 

那这个怎么办呢?

 

其实,这里有一个小技巧,大家拿小本本记好了~我们这个“换成……造型”这个代码块,除了能够下拉选择造型之外,还可以拖一个数字变量进中间的椭圆形位置。这样的话,如果这个变量值为2,就会把角色切换到它的第2个造型。变量的值将对应到造型的编号上。

 

由于有这个性质,我们如果能让切换到的这个造型,刚好就显示变量里数的值,是不是就更省事儿了?(请同学们直接回答)大家看,我们现在角色的造型是这样排列的,应该怎么调整才能满足这个要求呢?

 

得让第1个造型,就显示数字1,第2个造型显示数字2,……第9个造型显示数字9,这样才行。暂时把数字0放到最后一个。

 

改变造型顺序后,是这样的:

 

十位数和个位数两个角色都调整成这样。(反正现在个位数什么代码也没有,可以直接先把它删除了,重复从十位数复制过来,再改名)

 

(练习时间)

 

 

好,现在我们需要让十位数和个位数两个角色,分别切换到一个数字对应的造型。

 

比如,现在“当前数字”是89,十位数是不是应该切换到8的造型,而个位数是不是应该切换到9的造型?

 

刚才这个代码里的“数”这个变量,对十位数而言,它就应该是8,而个位数而言,它应该是9。那很明显,这两个角色里需要的数字不一样。

 

既然需要的数字不一样,我们是不是直接再来一个变量,就可以了?

 

是的,并且为了记变量名更清楚,我们要把两个变量分别改名为“十位”和“个位”。

 

我们希望,十位数的角色,时时换成十位变量对应的造型,而个位数的角色,时时换成个位变量对应的造型。

 

(练习时间)

 

 

不过这一步写好了,倒计时程序仍然不会工作。因为我们只是认为有这样“十位”和“个位”的两个数字变量,但是它们的值到底是多少?默认的只是0啊!所以运行程序后,舞台上只会出现00。

 

到这里,其实我们离目标只有一步之遥了。

 

“十位”和“个位”两个数字,来自哪里?来自我们之前的“当前数字”这个变量啊!

 

那么,怎么把“当前数字”里的十位和个位,分别拆到“个位”和“十位”这两个变量里去呢?

 

这里需要考验大家的数学知识了!

 

我们都很容易看出来,89的十位是8,个位是9,那计算机怎么看出来呢?说白了,我们需要把咱们人看出这个8和9的过程,一五一十地告诉计算机。

 

其实我们89,可以写成80+9。

 

8所在的位置,之所以说它是十位,是说它这上面的一个数字,表示的是这么多个十,8就表示8个十。

 

而9所在的位置,是个位,是说它的数字表示的是这么多个一,9就表示9个一。

 

89 = 8 * 10 + 9 * 1

 

同样,

 

53 = 5 * 10 + 3 * 1

29 = 2 * 10 + 9 * 1

4 = 0 * 10 + 4 * 1

 

大家看,这样是不是就拆分出来一个两位数的十位和个位了?

 

我们用计算机算的时候也是,先看一个数里有多少个10,再看除去这个几十后,还剩下多少个1

 

大家注意,老师这里用了一个“先”“再”对不对,说明咱们的程序只需要分两步就可以完成!开心吧?

 

问题是,怎么先看一个数里有多少个10?(现在只考虑它是100以内的数)

 

这个问题,难吗?80里有多少个10啊?89里有多少个10啊?

 

(请同学们先回答这个问题后继续后面的内容)

计算一个数里有多少个10,应该使用哪种计算?

A. 加法

B. 减法

C. 乘法

D. 除法

 


我们应该使用除法!80/10=8,所以80里有8个10。而89/10=8.9,虽然这里是小数,除不尽,但是也没有9个10,只能算有9个10。

 

我们在编程时,为了表示这种不管除得尽除不尽,都取结果的整数部分的运算,叫做“取整运算”。在“运算”代码组的最后一个。

用上面的方式就能得到“当前数字”的十位部分了。我们像下面这么写,把它放到十位的变量里。

 

有了十位之后,个位是不是就是剩下的部分了啊?那怎么算除掉10位后剩下的部分呢?其实就是计算一个数除以10的余数,对不对?

 

80/10=8 ...... 0

89/10=8 ...... 9

35/10=3 ...... 5

 

其实都是在原来的数上,减去刚才得到的十位数字*10之后,剩下的就是余数。

 

(请同学们先回答这个问题后继续后面的内容)

这段代码放哪里最好呢?

A. 舞台背景

B. 十位数字角色

C. 个位数字角色

 

 

因为它里面既涉及到十位变量,又涉及到个位变量,还涉及到当前数字,看来是一段公用的代码。所以我们可以把它放到舞台背景上。

 

在舞台背景上,什么时候执行这两行代码好呢?因为每一次当前数字改变,才会引起十位变量和个位变量的改变,所以把它放到当前数字变化的代码后面,是最妥当的了。

 

 

(练习时间)

 

到这里,一个完整的两位数可暂停倒计时程序,就完成了!

 

教学流程总结:(请横屏查看)

 

 

知识技巧总结:

  1. 理解程序的通用性、可复用性

  2. 区分公共代码与角色自身代码

  3. 掌握计算数字的十位和个位的方法

  4. 知道向下取整运算的用法

  5. 掌握“换成……造型”代码块中使用变量的用法

 

课后作业:

请同学们修改程序,在十位和个位这两个数字角色里,用广播的方法完成造型的切换。

 

 

 

 

 

 

 

 

与非学堂(codingclassonline)

一个专注青少年信息技术教育,探讨少儿编程的教与学,交流技巧、分享资源的公众号。

--------------------------------------

 

 

 

【课件分享】

  1. 【超详细Scratch教学课件分享】简单倒计时

  2. 【超详细Scratch教学课件分享】可暂停倒计时
     

 

 

 

【往期每日一题】

  1. 蓝桥杯青少组选拔赛STEMA考试样题及解析(科技素养及逻辑思维)

  2. 【Scratch竞赛每日一题】旋转问题

  3. 【Scratch竞赛每日一题】雷电猴与宝箱

  4. 【Scratch竞赛每日一题】海狸的语言

  5. 【Scratch竞赛每日一题】加减大师

  6. 【Scratch竞赛每日一题】限时猜数字

  7. 【Scratch竞赛每日一题】蹦床游戏

  8. 【Scratch竞赛每日一题】来回蹓跶的小猫

  9. 【Scratch竞赛每日一题】小猫回城堡

  10. 【Scratch竞赛每日一题】薛定谔的猫累了

  11. 【Scratch竞赛每日一题】小猫狐狸赛跑

  12. 【Scratch竞赛每日一题】循环变大小

  13. 【Scratch竞赛每日一题】循环画画

  14. 【Scratch竞赛每日一题】坐标和反弹

  15. 【Scratch竞赛每日一题】北极熊快长大

  16. 【Scratch竞赛每日一题】移动与反弹

  17. 【Scratch竞赛每日一题】巧用图章

  18. 【Scratch竞赛每日一题】画线判断

  19. 【Scratch竞赛每日一题】循环变量

  20. 【Scratch竞赛每日一题】小猫克隆

  21. 【Scratch竞赛每日一题】小法师的穿墙术

  22. 【Scratch竞赛每日一题】随机数

  23. 【Scratch竞赛每日一题】小猫拿苹果

 

 

 

 

 

【近期考竞通知】

  1. 蓝桥杯青少组选拔赛 报名开始

  2. 8月编程竞赛汇总,Python、Scratch都有

  3. 2020年第二场NCT全国青少年编程能力等级测试即将启动

  4. 青少年编程能力等级测评(CPA)2020年第二季开始报名

 

 

 

【高赞原创集锦】

  1. 半部论语治天下,一段Scratch懂论语

  2. 好书推荐:《CODE》

  3. 编程却被我妈一直说成玩游戏,我该咋办?

  4. 【免费快领】Scratch编程秘籍PDF

  5. 就《从计算机世界出发窥探中西文明的差异》的补充

  6. 为什么精心制作的少儿编程课程观看的人不多?

  7. 零基础孩子的第一节Scratch课,应该学什么?

  8. Scratch晋级Python,一路要打通哪些关?

  9. 一名合格的程序员,如何让 林有有 = 没有

  10. 这些东西,比光让孩子学编程重要100倍

  11. 这位同学,Scratch代码里可不能填这么大的数字哦!

  12. 玩转Scratch,炮弹击中目标有多难?

  13. 【长文慎入】从计算机世界出发窥探中西文明的差异

     

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值