6). 当左侧区域所有白色小人变红以后左侧计时器停止计时

英超 03-08 阅读:33 评论:0

  本文转载于“超平的编程课”公众号。

  [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第9讲。

  第11届蓝桥杯青少年组国赛原定于2020年4月25日举行,因疫情推迟到2020年10月31日,并且改为在线考试。Scratch分为初级组和中级组,其中初级组面向7~10岁孩子,中级组面向11~14岁孩子。

  模拟新冠疫情传播,本题是第11届蓝桥杯Scratch国赛真题编程第5题,中级组和初级组都有此题。题目要求考生通过程序模拟在新冠肺炎传播过程中,采取隔离手段和不采取隔离手段的对比效果,本题难度系数为5。

  背景信息:抗击新冠肺炎,隔离是非常重要的手段之一。通过隔离,可以最大限度地缩小污染范围,减少病毒传播机会。

  编程实现:通过程序模拟在新冠肺炎传播过程中,采取隔离手段和不采取隔离手段的对比效果。白色小人代表健康人群,红色小人代表感染病毒人群。

  具体要求:

  1). 左侧为不带隔离区的情况,右侧为带有隔离区的情况,左侧和右侧区域各有一个计时器,计时器初始值为0;初始效果

  2).点击绿旗,两侧区域分别自动随机生成20个小人(白色小人19个,红色小人1个)并随机移动(滑行模块参数设置为2秒),右侧区域的小人在隔离区外移动;左右两个区域初始情况

  3). 此时计时器开始计时,每秒数字加1;

  4). 红色小人碰到白色小人,白色小人被传染,变成红色小人;

  5). 右侧区域中的白色小人被传染变红之后3秒被放在隔离区不再移动(第一个红色小人在开始计时3秒后进入隔离区);

  6). 当左侧区域所有白色小人变红以后左侧计时器停止计时,同时左侧所有红色小人停止移动;

  7). 右侧所有红色小人都在隔离区内,隔离区外没有红色小人,右侧计时器停止计时。不隔离和隔离效果对比

  先来看看作品效果吧:模拟新冠疫情-11届蓝桥杯国赛https://www.zhihu.com/video/1518258102142636032

  由题目描述可以得知,这里有非隔离区和隔离区两个区域,每个区域又有两类人群,一是白色小人代表的健康人群,二是红色小人代表的感染人群。

  根据排列组合知识,一共有4种人群,即非隔离区的白色小人、红色小人,隔离区的白色小人、红色小人。

  看样子这里需要4个角色,看看题目给我们提供的角色吧,如图所示:角色列表图

  这里只有一个角色,它有两个造型,分别是红色小人和白色小人,那怎么变成4个角色呢?通常有如下两种方法:复制角色使用克隆技术

  一般来说,如果需要大量的角色,比如100个或无限个,肯定首选克隆技术,如果角色数量比较少,两种方法都是可以的。为了让大家更好的理解和掌握Scratch克隆,我选择使用克隆技术。

  另外一个需要重点关注的细节是右侧区域中的白色小人被传染变红之后3秒被放在隔离区,对于这里的3秒钟,如何做到精确计时呢?这需要借助计时器,具体实现稍后详细介绍。

  根据上面的思路分析,我们可以分3步进行编程:克隆出4种不同的人群左侧非隔离区感染情况模拟右侧带隔离区感染情况模拟

  1.克隆出4种不同的人群

  在Scratch中,克隆是一个非常有用的编程技术,凡是作品中需要大量相同或类似的角色,都可以使用克隆,比如飞机大战游戏中的敌机和子弹、飞扬的小鸟游戏中不断出现的水管、切西瓜游戏中的水果等。

  克隆有一个很重要的特征,及所有的克隆体在克隆时和本体都有相同的特征,比如它的位置、大小、造型、是否显示等。那么如何区分这些不同的克隆体呢?

  解决方案是给每个克隆体做一个标记,这就好比工厂生产的手机,所有的同型号手机都长的一模一样,如何区分它们呢?非常简单,只需要给每个手机一个唯一的编号即可。

  在Scratch中使用克隆时,可以定义一个私有变量, 每次克隆之前,设置好私有变量的值,然后再克隆,这样就可以通过这个私有变量来区分不同的克隆体了。

  先创建一个私有变量”人群类别“,注意一定要勾选”仅适用于当前角色“,如图:创建私有变量

  并规定如下:1表示左侧非隔离区的健康人群(白色小人)2表示左侧非隔离区的感染者(红色小人)3表示右侧带隔离区的健康人群(白色小人)4表示右侧带隔离区的感染者(红色小人)

  根据题目描述,在”小人“角色中编写代码如下:克隆不同种类的小人

  如此一来, 每个小人克隆体都有一个“人群类别”的私有变量,用来表示自己所属人群类别了。

  2. 左侧非隔离区感染情况模拟

  左侧非隔离区域有两类人群,一是健康的白色小人,共19个,二是感染的红色小人,只有1个。它们都在左侧区域内不停地来回移动,如果白色小人碰到红色小人,则立刻变成红色小人,表示被感染了,当所有的白色小人都被感染变成红色小人后,停止移动。

  对于红色小人来说,只需要在左侧区域范围内不停移动直到所有小人都变成红色为止,逻辑相对简单一些,先来编写红色小人的程序,代码如所示:左侧区域红色小人代码

  需要注意的是,这里x坐标的范围限定在-220到-20之间,表示左侧非隔离区域,小人的运动也只能限定在这个区域,所以,当x坐标大于-20时,立刻让角色转向移动。

  相应的,白色小人也需要做相同的处理,唯一不同的是当碰到红色小人时需要改变造型,并改变左侧白色小人数,其代码如下所示:左侧区域白色小人代码

  其中红色标注部分是专门用来处理碰到红色小人时的代码。

  与此同时,我们还需要对感染过程进行计时,首先需要创建一个变量“时间1”,然后利用Scratch中的计时器进行计时,代码如下:记录时间1代码

  需要说明的是,计时器总是在不停的计时,根本就停不下来,所以需要先进行归零操作,其次计时器的数字是小数,小数点后面还有3位,需要去掉小数,可以使用向下取整运算指令来实现。

  3. 右侧带隔离区感染情况模拟

  右侧带隔离区域的情况和左侧基本相似,不同的是被感染的红色小人在3秒之后会被转移到隔离区。由于每个小人感染的时间点是不一样的,因此需要创建一个私有变量用于记录其感染时间,不妨命名为“感染时间”。

  红色小人的逻辑相对简单一些,我们先来编写红色小人的程序。当生成红色小人克隆体时,不妨先将变量“感染时间”设为当前计时器,并使用”计时器 - 感染时间“来计算小人的移动时间,一旦它们的差大于3,就立刻将其转移到隔离区,代码如下:右侧区域红色小人代码

  对于白色小人来说,当碰到红色小人时才开始设置其“感染时间”,但是需要确保条件“计时器 - 感染时间 > 3”一开始不成立,需要将“感染时间”设置一个较大的值,比如10000,其代码如下:右侧区域白色小人代码

  同理,还需要创建变量“时间2”,用来记录安全隔离所需的时间,其逻辑也很简单,如下:记录时间2代码

  至此,整个作品就大功告成啦。

  本题还是有些难度的,代码量大概在150个积木块左右,涉及到的知识点包括:变量,包括全局变量和私有变量;Scratch克隆,尤其是结合私有变量来区分不同的克隆体技巧;计时器的使用,尤其是计时器的特点;重复直到循环的使用;Scratch舞台坐标系及区域坐标范围的确定;各种运算指令的综合运用,包括减法、比较、或、随机数等指令。

  多次运行程序,可以很明显看到,左侧非隔离区域在经过10~20秒左右,所有的小人都会被感染。而右侧带隔离区域在经过5~10秒左右,一小部分感染人群被转移到隔离区域,而大部分健康人群仍然可以正常来回移动。

  本题通过编程模拟了不隔离和及时隔离感染人群的对比效果,可以让孩子深刻意识到防控疫情的有效方法,并积极参与。更重要的是,通过建立模型并编程模拟日常生活和工作中遇到的问题,然后解决问题或提供决策依据,这正是科学思维的精髓。

  如果你觉得文章对你有所帮助,别忘了点赞,你的鼓励是我坚持继续写下去的最大动力,Thanks♪(・ω・)ノ。

  需要素材和源码的,可以联系本人,或者搜索同名gzh。

6). 当左侧区域所有白色小人变红以后左侧计时器停止计时
版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

分享:

扫一扫在手机阅读、分享本文

网友评论

相关推荐

文章排行

标签列表