劉鳳飛老師是出版過(guò)多部少兒編程圖書(shū)的專家,不久前他用scratch制作了一款模擬疫情病毒傳播的程序幫助孩子們理解隔離對(duì)于防疫的重要性,跟我一起來(lái)學(xué)習(xí)他是怎么制作的吧。如圖1。
這個(gè)程序用綠色小球代表健康人,紅色代表感染者,當(dāng)兩者相遇綠色小球就會(huì)變紅表示被感染成為新的感染者。
通過(guò)記錄健康者數(shù)量、感染者數(shù)量、救治者數(shù)量的變化和全部感染時(shí)間來(lái)直觀感受病毒傳播為什么受人口流動(dòng)和隔離速度因素的影響。
通過(guò)動(dòng)態(tài)調(diào)節(jié)人口流動(dòng)速度和隔離速度參數(shù)模擬目前的防疫措施,減少人口流動(dòng)、及時(shí)收治隔離對(duì)最終戰(zhàn)勝疫情的關(guān)鍵作用。
比如在人口流動(dòng)為3時(shí)平均9秒鐘從1感染到100個(gè)人。降低人口流動(dòng)速度為1時(shí),全部感染時(shí)間延長(zhǎng)到25秒。如果隔離速度更快就可以在感染全部人群前完全控制疫情。
這個(gè)程序的參數(shù)雖然不少,但是程序結(jié)構(gòu)清晰,邏輯簡(jiǎn)單,沒(méi)有使用任何復(fù)雜的數(shù)學(xué)公式,很適合小朋友學(xué)習(xí)。在理解防疫知識(shí)的同時(shí)學(xué)習(xí)編程的技巧,一舉兩得。
下面我們對(duì)程序的各個(gè)部分進(jìn)行分析。
本代碼的結(jié)構(gòu)很清晰,雖然有很多針對(duì)克隆體的代碼,但依據(jù)功能不同分解成多個(gè)單元,這樣的程序非常便于閱讀。
在world.xiaomawang.com小碼王社區(qū)搜索“Scratch模擬疫情病毒傳播”,找到果果老師的作品。這是一個(gè)開(kāi)源作品,你可以在“改編作品”時(shí)下載到本地自行編輯。
程序依靠多個(gè)變量來(lái)體現(xiàn)病毒的傳播力。程序第一段就是初始化變量。人口總數(shù)、人口流動(dòng)(角色移動(dòng)速度)、隔離速度(感染角色消失的時(shí)間)、全部感染時(shí)間、編號(hào)(每個(gè)克隆體的編號(hào))、我的變量(臨時(shí)變量)。用健康、感染、救治三個(gè)列表記錄每個(gè)克隆體的情況。健康數(shù)量、感染數(shù)量、救治數(shù)量三個(gè)數(shù)量等于三個(gè)列表當(dāng)前項(xiàng)目數(shù)。如圖2。
生成克隆體并記錄全部感染時(shí)間。計(jì)時(shí)直到健康列表內(nèi)項(xiàng)目為0時(shí)結(jié)束。如圖3。
以下多段代碼都是針對(duì)每個(gè)克隆體的,為了代碼結(jié)構(gòu)清晰每個(gè)功能單獨(dú)成一段。
用小球的隨機(jī)運(yùn)動(dòng)代表人口流動(dòng),將健康小球的編號(hào)加入列表。用“人口流動(dòng)”模擬各種隔離措施的力度,運(yùn)動(dòng)越慢代表隔離的強(qiáng)度越大。如圖4。
最后一個(gè)克隆體變?yōu)榧t色代表感染者。如圖5。
偵測(cè)當(dāng)碰到紅色時(shí),自身變?yōu)榧t色,并從健康列表移動(dòng)到感染列表。如圖6。
隔離速度綜合代表戴口罩、洗手、測(cè)體溫、住院隔離治療等防疫措施的力度。用10除以隔離速度,這樣它的數(shù)值越大等待時(shí)間越少。如圖7。
隔離速度和人口流動(dòng)隨著防疫措施會(huì)變化并且影響防疫的效果,我們把它倆設(shè)為可實(shí)時(shí)調(diào)整的變量。右鍵點(diǎn)擊變量設(shè)為滑桿。人口流動(dòng)越怏感染越迅速,隔離速度越大就能延長(zhǎng)全部感染時(shí)間或阻斷疫情。如圖8。
你可以在源程序的基礎(chǔ)上進(jìn)行完善修改,比如先為程序添加上注釋便于理解和后續(xù)修改。
其次添加更多參數(shù)和判斷讓程序能夠更好地模擬現(xiàn)實(shí)情況。比如治愈后的克隆體并不消失而是變成白色代表治愈,變成黑色代表死亡(新增死亡率參數(shù))。增加潛伏期(變黃)和發(fā)病期(變紅)(新增潛伏時(shí)間)。添加更多終止程序的判斷或防疫的措施等。