劉鳳飛老師是出版過多部少兒編程圖書的專家,不久前他用scratch制作了一款模擬疫情病毒傳播的程序幫助孩子們理解隔離對于防疫的重要性,跟我一起來學習他是怎么制作的吧。如圖1。

這個程序用綠色小球代表健康人,紅色代表感染者,當兩者相遇綠色小球就會變紅表示被感染成為新的感染者。
通過記錄健康者數量、感染者數量、救治者數量的變化和全部感染時間來直觀感受病毒傳播為什么受人口流動和隔離速度因素的影響。
通過動態調節人口流動速度和隔離速度參數模擬目前的防疫措施,減少人口流動、及時收治隔離對最終戰勝疫情的關鍵作用。
比如在人口流動為3時平均9秒鐘從1感染到100個人。降低人口流動速度為1時,全部感染時間延長到25秒。如果隔離速度更快就可以在感染全部人群前完全控制疫情。
這個程序的參數雖然不少,但是程序結構清晰,邏輯簡單,沒有使用任何復雜的數學公式,很適合小朋友學習。在理解防疫知識的同時學習編程的技巧,一舉兩得。
下面我們對程序的各個部分進行分析。
本代碼的結構很清晰,雖然有很多針對克隆體的代碼,但依據功能不同分解成多個單元,這樣的程序非常便于閱讀。
在world.xiaomawang.com小碼王社區搜索“Scratch模擬疫情病毒傳播”,找到果果老師的作品。這是一個開源作品,你可以在“改編作品”時下載到本地自行編輯。
程序依靠多個變量來體現病毒的傳播力。程序第一段就是初始化變量。人口總數、人口流動(角色移動速度)、隔離速度(感染角色消失的時間)、全部感染時間、編號(每個克隆體的編號)、我的變量(臨時變量)。用健康、感染、救治三個列表記錄每個克隆體的情況。健康數量、感染數量、救治數量三個數量等于三個列表當前項目數。如圖2。
生成克隆體并記錄全部感染時間。計時直到健康列表內項目為0時結束。如圖3。
以下多段代碼都是針對每個克隆體的,為了代碼結構清晰每個功能單獨成一段。
用小球的隨機運動代表人口流動,將健康小球的編號加入列表。用“人口流動”模擬各種隔離措施的力度,運動越慢代表隔離的強度越大。如圖4。
最后一個克隆體變為紅色代表感染者。如圖5。

偵測當碰到紅色時,自身變為紅色,并從健康列表移動到感染列表。如圖6。
隔離速度綜合代表戴口罩、洗手、測體溫、住院隔離治療等防疫措施的力度。用10除以隔離速度,這樣它的數值越大等待時間越少。如圖7。
隔離速度和人口流動隨著防疫措施會變化并且影響防疫的效果,我們把它倆設為可實時調整的變量。右鍵點擊變量設為滑桿。人口流動越怏感染越迅速,隔離速度越大就能延長全部感染時間或阻斷疫情。如圖8。
你可以在源程序的基礎上進行完善修改,比如先為程序添加上注釋便于理解和后續修改。
其次添加更多參數和判斷讓程序能夠更好地模擬現實情況。比如治愈后的克隆體并不消失而是變成白色代表治愈,變成黑色代表死亡(新增死亡率參數)。增加潛伏期(變黃)和發病期(變紅)(新增潛伏時間)。添加更多終止程序的判斷或防疫的措施等。