Scratch模拟疫情病毒传播
2020-04-28
刘凤飞老师是出版过多部少儿编程图书的专家,不久前他用scratch制作了一款模拟疫情病毒传播的程序帮助孩子们理解隔离对于防疫的重要性,跟我一起来学习他是怎么制作的吧。如图1。
这个程序用绿色小球代表健康人,红色代表感染者,当两者相遇绿色小球就会变红表示被感染成为新的感染者。
通过记录健康者数量、感染者数量、救治者数量的变化和全部感染时间来直观感受病毒传播为什么受人口流动和隔离速度因素的影响。
通過动态调节人口流动速度和隔离速度参数模拟目前的防疫措施,减少人口流动、及时收治隔离对最终战胜疫情的关键作用。
比如在人口流动为3时平均9秒钟从1感染到100个人。降低人口流动速度为1时,全部感染时间延长到25秒。如果隔离速度更快就可以在感染全部人群前完全控制疫情。
这个程序的参数虽然不少,但是程序结构清晰,逻辑简单,没有使用任何复杂的数学公式,很适合小朋友学习。在理解防疫知识的同时学习编程的技巧,一举两得。
下面我们对程序的各个部分进行分析。
本代码的结构很清晰,虽然有很多针对克隆体的代码,但依据功能不同分解成多个单元,这样的程序非常便于阅读。
1.代码获得
在world.xiaomawang.com小码王社区搜索“Scratch模拟疫情病毒传播”,找到果果老师的作品。这是一个开源作品,你可以在“改编作品”时下载到本地自行编辑。
2.变量和列表
程序依靠多个变量来体现病毒的传播力。程序第一段就是初始化变量。人口总数、人口流动(角色移动速度)、隔离速度(感染角色消失的时间)、全部感染时间、编号(每个克隆体的编号)、我的变量(临时变量)。用健康、感染、救治三个列表记录每个克隆体的情况。健康数量、感染数量、救治数量三个数量等于三个列表当前项目数。如图2。
3.生成克隆体
生成克隆体并记录全部感染时间。计时直到健康列表内项目为0时结束。如图3。
4.人口流动
以下多段代码都是针对每个克隆体的,为了代码结构清晰每个功能单独成一段。
用小球的随机运动代表人口流动,将健康小球的编号加入列表。用“人口流动”模拟各种隔离措施的力度,运动越慢代表隔离的强度越大。如图4。
5.生成感染者
最后一个克隆体变为红色代表感染者。如图5。
6.感染
侦测当碰到红色时,自身变为红色,并从健康列表移动到感染列表。如图6。
7.隔离速度
隔离速度综合代表戴口罩、洗手、测体温、住院隔离治疗等防疫措施的力度。用10除以隔离速度,这样它的数值越大等待时间越少。如图7。
8.可调整变量
隔离速度和人口流动随着防疫措施会变化并且影响防疫的效果,我们把它俩设为可实时调整的变量。右键点击变量设为滑杆。人口流动越怏感染越迅速,隔离速度越大就能延长全部感染时间或阻断疫情。如图8。
9.扩展功能
你可以在源程序的基础上进行完善修改,比如先为程序添加上注释便于理解和后续修改。
其次添加更多参数和判断让程序能够更好地模拟现实情况。比如治愈后的克隆体并不消失而是变成白色代表治愈,变成黑色代表死亡(新增死亡率参数)。增加潜伏期(变黄)和发病期(变红)(新增潜伏时间)。添加更多终止程序的判断或防疫的措施等。