閆妮 鐘柏昌
“分支結(jié)構(gòu)”作為程序設(shè)計中解決實際問題的一種方法,是“VB程序設(shè)計”教學(xué)中的重點和難點之一,讓學(xué)生理解何時用和如何用是教學(xué)的關(guān)鍵。大多數(shù)教材通過類似“猜數(shù)”的程序進行教學(xué),但由于與學(xué)生的生活聯(lián)系不是很緊密,很難引起學(xué)生的興趣。因此,本課以設(shè)計一個“接紙團”的小游戲作為課程內(nèi)容的載體,以設(shè)計游戲來激發(fā)學(xué)生的學(xué)習(xí)興趣。
教材與學(xué)生情況分析
本課是河北省中小學(xué)信息技術(shù)電子教材VB程序設(shè)計分冊中第四單元中的內(nèi)容,課時為兩課時,軟件版本為VB6.0。在本課之前,教材已涉及程序設(shè)計的基本概念、VB的基本操作以及順序結(jié)構(gòu)中用到的簡單控件、常量、變量、表達式和函數(shù)等知識,為本課的教學(xué)奠定了基礎(chǔ)。本課將學(xué)習(xí)利用分支結(jié)構(gòu)控制程序的流程,學(xué)生通過學(xué)習(xí)能夠處理多分支問題并作出正確判斷,并能用流程圖表示程序的執(zhí)行過程。
本課的教學(xué)對象是初二年級學(xué)生。通過前面的學(xué)習(xí),學(xué)生已經(jīng)掌握了VB程序設(shè)計的概念和一般過程,能夠完成對象的屬性設(shè)置和事件添加,并能夠運用表達式和函數(shù)來解決問題。另外,前幾節(jié)課的活動以學(xué)生學(xué)習(xí)和生活中的常用軟件為原型進行程序設(shè)計,激發(fā)了學(xué)生開發(fā)復(fù)雜軟件的興趣,所以學(xué)生迫切希望找到解決問題的方法。
教學(xué)目標
知識與技能目標:理解并掌握Timer控件和Timer事件的用法;掌握Rnd函數(shù)的用法;能夠合理運用關(guān)系表達式和邏輯表達式;能夠用IF語句來處理多分支問題并作出正確判斷;能夠使用流程圖表示程序的執(zhí)行過程;能夠處理嵌套的分支結(jié)構(gòu)。
過程與方法目標:通過開發(fā)“接紙團”小游戲,掌握程序設(shè)計的一般過程;能夠測試和調(diào)試程序;通過不斷探究解決問題,能夠自主完成一些任務(wù)。
情感態(tài)度與價值觀目標:在游戲的不斷完善中體驗迭代的思想;在實現(xiàn)程序功能中體會用戶體驗的重要性和程序設(shè)計的意義。
游戲設(shè)計與實現(xiàn)
1.游戲功能設(shè)計
基于以上分析,本節(jié)課將要求學(xué)生完成一個“接紙團”游戲的設(shè)計任務(wù),實現(xiàn)鍵盤控制、計時和物體隨機運動等基本功能,具體方案如上頁表所示。本游戲的開發(fā)分兩個版本,完成前面四個功能為“接紙團V1.0”版本,實現(xiàn)全部七個功能為“接紙團V2.0”版本。
2.游戲界面設(shè)計
本課需要用到的控件有Image、PictureBox、Label、Timer。Image控件用來創(chuàng)建ImgLaji對象和ImgTong對象,分別顯示紙團和垃圾桶;PictureBox控件用來創(chuàng)建一個供ImgLaji對象和ImgTong對象活動的區(qū)域,相當(dāng)于一個容器;Label控件用來創(chuàng)建Label1對象和Label2對象,前者用來說明后者的功能,后者用來顯示得分;Timer控件用來創(chuàng)建一個計時器對象,用來統(tǒng)計游戲時間和模擬ImgLaji對象自動往復(fù)的勻速下落。下圖是本課案例的界面,學(xué)生可以以此為參照展開設(shè)計,使程序界面更美觀。
3.程序編寫
實現(xiàn)“接紙團V1.0”的功能需要用到Timer事件、IF單分支和雙分支語句及條件表達式,具體代碼省略。
教學(xué)實踐
本次教學(xué)為兩節(jié)連堂課,筆者設(shè)計的教學(xué)流程為:創(chuàng)設(shè)情境,分析需求→針對需求,設(shè)計界面→任務(wù)驅(qū)動,層層遞進→拓展提升,歸納總結(jié)。
1.創(chuàng)設(shè)情境,分析需求
教師以游戲的設(shè)計作為活動和內(nèi)容的載體,貼近學(xué)生的學(xué)習(xí)和生活經(jīng)驗,從而激發(fā)學(xué)生的興趣和熱情。因此,本環(huán)節(jié)教師首先讓學(xué)生回憶玩過的游戲并思考其功能,引導(dǎo)學(xué)生展開討論,找出與本課主題相關(guān)的游戲功能并總結(jié)。在此基礎(chǔ)上,教師再讓學(xué)生思考如何設(shè)計一個“接紙團”的游戲。學(xué)生積極討論,提出應(yīng)對策略。教師積極反饋學(xué)生的回答,并通過引導(dǎo)使其在腦海里建立一個解決的藍圖,接著運行“接紙團”游戲案例,引導(dǎo)學(xué)生用自己的語言描述游戲的功能,從而為學(xué)生的藍圖插上翅膀。
2.針對需求,設(shè)計界面
本環(huán)節(jié)包括分析階段和搭建階段。
在分析階段,教師首先引導(dǎo)學(xué)生思考教材中的“對象事件分析表”如何實現(xiàn)程序的每個功能,接著讓學(xué)生檢查表中是否實現(xiàn)了程序的全部功能,如果不能,說明理由并進行完善。在分析過程中,讓學(xué)生體會如何把自然語言轉(zhuǎn)化為編程語言,實現(xiàn)需求分析中的功能。
在搭建階段,則由學(xué)生根據(jù)已有知識,參照上頁表格中要求的控件,完成界面的設(shè)計。在此過程中,學(xué)生會遇到新的知識,如Timer控件。對此,學(xué)生以小組形式討論并總結(jié)控件的添加方法。教師對學(xué)生的回答給予積極反饋,并糾正和補充說明。
3.任務(wù)驅(qū)動,層層遞進
這一環(huán)節(jié),根據(jù)游戲的功能劃分為四個階段。
①利用ImgLaji對象實現(xiàn)勻速下落一次。
首先,讓學(xué)生利用已有知識實現(xiàn)ImgLaji對象的下移運動,并分析此效果存在的不足,從而引出Timer控件和Timer事件。然后,教師系統(tǒng)地介紹Timer控件的重要屬性和Timer事件的執(zhí)行原理,并引導(dǎo)學(xué)生分析Timer控件的Enable屬性與其他控件的Enable屬性的不同。學(xué)生在對以上知識有了一定的認識后,利用Timer事件實現(xiàn)ImgLaji對象勻速下落并運行程序。此時會出現(xiàn)ImgLaji對象在下移時超出Picture1范圍的新問題,以致看不到第二次下移運動。
教師引導(dǎo)學(xué)生分析新問題,得出“ImgLaji對象在下移過程中如果沒有超出范圍則繼續(xù)移動,否則停止移動”的解決辦法。此時,給學(xué)生介紹選擇結(jié)構(gòu)和單分支IF語句,并利用流程圖描述程序執(zhí)行過程。接著,教師引導(dǎo)學(xué)生學(xué)習(xí)條件表達式,并比較其與數(shù)學(xué)表達式的異同,編寫單分支結(jié)構(gòu)代碼實現(xiàn)判斷ImgLaji對象超出范圍停止的功能。
②利用ImgLaji對象從窗體頂部隨機位置往復(fù)勻速落下。
運行上述程序,教師通過設(shè)置疑問引出雙分支結(jié)構(gòu),實現(xiàn)了ImgLaji對象超出范圍后回到界面頂部。經(jīng)過修改后,學(xué)生還會發(fā)現(xiàn)一個新的問題,即ImgLaji對象每次都從相同的位置下移,既沒有實現(xiàn)需求中隨機的效果,也不具備挑戰(zhàn)性。因此,教師引導(dǎo)學(xué)生自學(xué)Rnd函數(shù)的用法,并思考哪個屬性決定ImgLaji對象的隨機下移。教師通過提問,發(fā)現(xiàn)學(xué)生能夠想到改變ImgLaji對象的Left屬性實現(xiàn)隨機效果,但就隨機值的獲取還存在問題。此時,教師進一步引導(dǎo)學(xué)生思考Picture1對象和ImgLaji對象的關(guān)系,從而得出只要使ImgLaji對象的Left屬性值在Picture1的Width屬性值范圍內(nèi)即可。接著,讓學(xué)生探索解決此問題的表達式,并采用最有效的方法編寫代碼。
③利用鍵盤按鍵控制ImgTong對象移動。
游戲必須要有交互功能,根據(jù)本游戲的實際,需要采用鍵盤交互。首先,讓學(xué)生自學(xué)KeyDown事件的功能和使用方法。教師接著提出問題:如何用該事件實現(xiàn)鍵盤控制?學(xué)生在分析后回答:實現(xiàn)鍵盤控制需要進行多次判斷,所以需要多個分支。教師肯定和表揚學(xué)生的回答,再講解多分支IF語句的格式和程序執(zhí)行過程的流程圖。當(dāng)學(xué)生理解后,由學(xué)生自行選擇按鍵,畫出流程圖并編寫代碼。接著,學(xué)生運行程序并分析效果,提出改進意見。有的學(xué)生說可以通過數(shù)值改變ImgTong對象移動的幅度,以便更快地接住紙團;有的學(xué)生說ImgTong對象會移動到Picture1之外;還有的學(xué)生說需要修改ImgLaji對象的最低位置,使其能隨著ImgTong對象的移動而變化。教師肯定學(xué)生的回答,并提出修改意見,學(xué)生嘗試完成任務(wù)。
④實現(xiàn)計時和計分功能。
經(jīng)過上述修改后,游戲的基本功能已經(jīng)實現(xiàn),但還不能計分和計時。教師引導(dǎo)學(xué)生分析并總結(jié):當(dāng)ImgLaji對象在下落過程中即將超過ImgTong對象時,ImgLaji對象落在ImgTong對象上,則加分,否則不加分,隨后讓ImgTong對象回到頂部隨機位置。教師讓學(xué)生把該執(zhí)行過程補充到流程圖中,再讓學(xué)生分析流程圖中各分支的特點,并引導(dǎo)學(xué)生說出Else分支中包含的兩個分支,隨后向?qū)W生講解嵌套IF語句的格式和執(zhí)行過程。為了方便學(xué)生理解嵌套結(jié)構(gòu)的觸發(fā)條件,教師運行上述程序并移動ImgTong對象,讓學(xué)生觀察發(fā)現(xiàn)ImgLaji對象落在ImgTong對象上的位置條件,并利用嵌套結(jié)構(gòu)實現(xiàn)計分功能。最后,教師引導(dǎo)學(xué)生利用變量來控制時間,并提示學(xué)生此處與紙團控制方法的不同之處在于這里是變量,而后者是常量,從而引導(dǎo)學(xué)生編寫程序時注意更改變量的值。
4.拓展提升,歸納總結(jié)
學(xué)生完成以上全部任務(wù)后,調(diào)試并運行程序。學(xué)生可能還會出現(xiàn)如下問題:一是ImgLaji對象在下落過程中有時會不斷閃爍;二是多次運行程序會發(fā)現(xiàn)ImgLaji對象在限定時間內(nèi)每次的運動軌跡都相同;三是界面沒有顯示倒計時用來提醒用戶;四是游戲沒有設(shè)置重玩功能以及闖關(guān)功能;等等。對于問題一,教師可讓學(xué)生改用PictureBox控件,并介紹Image控件和PictureBox控件的區(qū)別。對于問題二,教師可以在講解Randomize語句的用法及其與Rnd函數(shù)的關(guān)系之后,再由學(xué)生自己解決。問題三和問題四屬于新的功能,教師可以引導(dǎo)學(xué)生分析算法并由小組協(xié)作完成。最后,教師再引導(dǎo)學(xué)生回憶整個程序的實現(xiàn)過程并總結(jié)每個知識點和其使用情境。
教學(xué)反思
本課以分支結(jié)構(gòu)為線索展開教學(xué),主要是讓學(xué)生掌握分支結(jié)構(gòu)的使用方法,使其能夠處理多分支問題,并能用流程圖表示程序的執(zhí)行過程。從掌握情況來看,幾乎所有學(xué)生都掌握了IF單分支、雙分支及多分支IF語句,部分學(xué)生掌握了IF語句的嵌套,而且還能靈活運用。例如,針對ImgTong對象可能會移動到Picture1外的情況,學(xué)生們想到了利用控制ImgLaji對象的方法解決,即嵌套結(jié)構(gòu)。
從教學(xué)角度看,需求分析階段的“對象事件分析表”相當(dāng)于一個學(xué)習(xí)支架,幫助學(xué)生梳理任務(wù)元素和解決過程,很好地鍛煉了學(xué)生的邏輯分析能力和編程思想。在界面設(shè)計階段,學(xué)生可以根據(jù)自己的想法設(shè)計界面,自由發(fā)揮。在算法分析和代碼編寫階段,整個教學(xué)過程是以問題為導(dǎo)向,使教學(xué)始終圍繞任務(wù)進行,學(xué)生通過問題的解決可以明確知識的應(yīng)用情境,并能靈活運用學(xué)到的知識。最后的調(diào)試和拓展環(huán)節(jié),學(xué)生在解決程序問題以及實現(xiàn)新功能的同時,知識遷移運用能力和獨立解決問題的能力得到了提升。
當(dāng)然,本堂課的教學(xué)中還存在一些不足,如不能及時掌握學(xué)生的知識接受情況;由于時間的限制,學(xué)生想到的一些功能無法實現(xiàn)等。