李麗華+魏樹權(quán)
摘要:案例教學(xué)法對于計(jì)算機(jī)專業(yè)是一種新的教學(xué)形式,能激發(fā)學(xué)生的學(xué)習(xí)積極性,提高學(xué)生分析問題和解決問題的能力。該文以掃雷游戲?yàn)槔U述了在VB教學(xué)中采用案例教學(xué)法對控件數(shù)組、函數(shù)過程、遞歸算法等重要的知識點(diǎn)進(jìn)行教學(xué)設(shè)計(jì)和教學(xué)實(shí)施的過程。
關(guān)鍵詞:案例教學(xué)法;案例設(shè)計(jì);控件數(shù)組
中圖分類號:G642 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2016)22-0108-03
案例教學(xué)法,在計(jì)算機(jī)科學(xué)中是一種開放式、互動式的新型教學(xué)方式,它通過模擬或者重現(xiàn)軟件項(xiàng)目中的關(guān)鍵場景,使學(xué)生主動把自己納入案例當(dāng)中,運(yùn)用已有的知識和經(jīng)驗(yàn)來分析、判斷案例提供的背景、軟件需求描述,并解決相關(guān)軟件設(shè)計(jì)技術(shù)問題,最后,從中總結(jié)出某些關(guān)鍵的知識點(diǎn)或設(shè)計(jì)方案;也可以讓學(xué)生通過自己的思考或者跟隨他人的思路來拓寬自己的視野,從而促進(jìn)學(xué)生進(jìn)行知識技能遷移,提高學(xué)生的軟件設(shè)計(jì)能力[1]。
控件數(shù)組是Visual Basic中的一個(gè)較難的知識點(diǎn),它是一組具有相同名稱和類型的控件的集合,通過各自的編號(下標(biāo))來識別,并且可以共享事件。程序中使用控件數(shù)組所占用的資源比單獨(dú)添加多個(gè)控件所占用的資源更少,而且控件數(shù)組的事件共享,使用多個(gè)同類型控件在一個(gè)應(yīng)用中執(zhí)行相同或類似的代碼,使用控件數(shù)組比單獨(dú)創(chuàng)建多個(gè)控件更容易設(shè)計(jì),代碼更容易維護(hù)[2]。在控件數(shù)組的教學(xué)過程中,需要學(xué)生理解以控件為數(shù)組的設(shè)計(jì)形式、控件在應(yīng)用界面上的微差異可視化的表現(xiàn)形式,結(jié)合控件事件代碼的共享機(jī)制以解決軟件設(shè)計(jì)問題的設(shè)計(jì)思維,由于設(shè)計(jì)思維的轉(zhuǎn)變,實(shí)踐證明,采用單純的講解其知識點(diǎn)并簡單演示,很難獲得優(yōu)良的教學(xué)效果。
將案例教學(xué)法引入Visual Basic的教學(xué)過程,就是要把軟件案例的設(shè)計(jì)實(shí)現(xiàn)過程加以典型化處理[3],形成供學(xué)生思考分析的案例,采用鼓勵(lì)學(xué)生獨(dú)立研究學(xué)習(xí)與師生相互探討相結(jié)合的教學(xué)方式,提高學(xué)生分析問題和解決問題的能力。本文在教學(xué)過程中模擬一個(gè)Windows系統(tǒng)自帶的掃雷游戲的實(shí)現(xiàn)過程,靈活的運(yùn)用VB各個(gè)章節(jié)的知識點(diǎn),以案例驅(qū)動的方式,結(jié)合界面設(shè)計(jì)和編碼,以使學(xué)生能夠更加真切的理解和掌握控件數(shù)組的知識要點(diǎn),并能進(jìn)行實(shí)際應(yīng)用設(shè)計(jì)。
1 案例準(zhǔn)備
通過多年的教學(xué)實(shí)踐探索,我們認(rèn)為教學(xué)案例的選擇,要滿足三個(gè)條件:典型、貼近實(shí)際、有趣,經(jīng)過細(xì)致選擇,Windows系統(tǒng)自帶的掃雷游戲最后被選中。
在案例教學(xué)中,要讓學(xué)生成為教學(xué)過程的主角,我們在講解控件數(shù)組課前將準(zhǔn)備好的掃雷游戲案例告知學(xué)生,要求學(xué)生查找一些必要的資料,做好發(fā)言準(zhǔn)備;同時(shí),我們將初步的案例問題分解細(xì)節(jié)告訴學(xué)生[4]。初步分解如下:
1)游戲地圖構(gòu)建;
2)游戲地雷分布構(gòu)建;
3)游戲中點(diǎn)擊控件按鈕,地雷顯示;
4)游戲中排雷錯(cuò)誤處理。
2 案例課堂講解討論
案例課堂講解討論是案例教學(xué)過程的中心環(huán)節(jié),教師需要主動調(diào)動學(xué)員的主動性,引導(dǎo)學(xué)生主動緊緊圍繞案例進(jìn)行思考和分析[5]。以10×10的游戲地圖為例,共需100個(gè)按鈕控件。
1)游戲地圖構(gòu)建
地圖如何構(gòu)建?首先引導(dǎo)學(xué)生對不正確的設(shè)計(jì)方案進(jìn)行否定,比如先繪制20個(gè)左右的按鈕控件到界面上,然后依次點(diǎn)擊按鈕生成控件單擊事件,在這個(gè)過程中引導(dǎo)學(xué)生對各個(gè)環(huán)節(jié)進(jìn)行發(fā)言,時(shí)機(jī)成熟后,引入控件數(shù)組知識點(diǎn):
①控件數(shù)組的概念及功能:控件數(shù)組是VB中特有的一組對象,同一個(gè)控件數(shù)組的所有控件擁有共同的名稱和類型并響應(yīng)同一個(gè)事件過程,但每一個(gè)控件都擁有自己的屬性值。數(shù)組通過下標(biāo)來標(biāo)示每一個(gè)控件元素。
②引入掃雷游戲的實(shí)際需要,生成游戲地圖,基本完成步驟:
a、做好一個(gè)按鈕當(dāng)模版
b、建立控件數(shù)組
c、生成99個(gè)新的控件數(shù)組元素
③對設(shè)計(jì)進(jìn)行小結(jié),引導(dǎo)學(xué)生一起歸納采用控件數(shù)組設(shè)計(jì)地圖的初步特征,并重點(diǎn)強(qiáng)調(diào)應(yīng)用到的控件數(shù)組的知識要點(diǎn)[6]。
2)游戲地雷分布構(gòu)建
①分析地雷和控件的關(guān)系:教學(xué)過程中和學(xué)生一起分析,地雷是游戲中的一個(gè)關(guān)鍵元素,但它不是游戲中的獨(dú)立元素,必須和控件進(jìn)行關(guān)聯(lián)。
②地雷設(shè)計(jì):可以采用二維數(shù)組記錄哪些按鈕控件對應(yīng)地雷。在窗體的聲明部分聲明二維數(shù)組,用于存儲按鈕控件有地雷的情況。假設(shè)規(guī)定二維數(shù)組某元素的值為1,代表該位置上的按鈕有地雷,為0代表無地雷。
Dim zha(1 To 10, 1 To 10) As Integer
③生成隨機(jī)地雷
教學(xué)中和學(xué)生一同進(jìn)行分析:10×10的游戲地圖中有10個(gè)地雷,地雷的分布必須具有隨機(jī)性,所以對10個(gè)地雷的位置使用隨機(jī)函數(shù)來進(jìn)行設(shè)置,同時(shí)要注意生成的代表地雷位置的隨機(jī)數(shù)不能重復(fù)。最后一同設(shè)計(jì)出主要代碼,參考如下:
zhdshu = 10 '地雷總數(shù)
Dim tmp(10) As Integer
t = 0
While t < 10
biaozhi = 0 '用于標(biāo)識當(dāng)前控件是否有雷
linshishu = Int(Rnd * 100)
For i = 0 To t
If tmp(i) = linshishu Then
biaozhi = 1
Exit For
End If
Next i
If biaozhi = 0 Then
t = t + 1
tmp(t) = linshishu
End If
Wend
For i = 1 To 10
zha(tmp(i) \ 10 + 1, (tmp(i) Mod 10) + 1) = 1
Next i
④對設(shè)計(jì)進(jìn)行小結(jié),引導(dǎo)學(xué)生一起歸納地雷分布設(shè)計(jì)過程中,將代碼與界面進(jìn)行關(guān)聯(lián)的設(shè)計(jì)要點(diǎn),并回顧隨機(jī)數(shù)知識點(diǎn)。
3)游戲中點(diǎn)擊控件按鈕,地雷顯示
①首先提出關(guān)鍵問題引導(dǎo)學(xué)生思考:在按鈕上點(diǎn)擊鼠標(biāo)左鍵需要顯示其周圍有幾個(gè)地雷,如何計(jì)算?游戲中如何判斷是否獲勝?
②地雷個(gè)數(shù)的計(jì)算:在按鈕上點(diǎn)擊鼠標(biāo)左鍵后,界面上需要顯示其周圍有幾個(gè)地雷,地雷個(gè)數(shù)的計(jì)算問題可以轉(zhuǎn)換為判斷當(dāng)前點(diǎn)擊的按鈕所對應(yīng)的行列數(shù),即對應(yīng)的二維數(shù)組元素周圍的8個(gè)按鈕有幾個(gè)地雷。一同設(shè)計(jì)出主要代碼,參考如下:
Dim hang As Integer, lie As Integer, shuzi As Integer
hang = Int(Index / 10) + 1
lie = (Index Mod 10) + 1
'判斷當(dāng)前點(diǎn)擊按鈕的周圍有幾個(gè)地雷,并顯示出來
shuzi = 0
For i = hang - 1 To hang + 1
For j = lie - 1 To lie + 1
If i >= 1 And i <= 10 And j >= 1 And j <= 10 And (Not (i = hang And j = lie)) Then
'判定周圍是否有按鈕
If zha(i, j) = 1 Then
shuzi = shuzi + 1
End If
End If
Next j
Next i
cmd(Index).Caption = shuzi '顯示有幾個(gè)地雷
③判斷獲勝
引導(dǎo)學(xué)生分析出設(shè)計(jì)方案:用戶已經(jīng)標(biāo)識出所有地雷,標(biāo)示正確了就算贏,所以程序中我們只需要判斷是否zha數(shù)組中所有的等于1的元素,在界面上顯示的標(biāo)志是符號"●",并且顯示的地雷總數(shù)是10個(gè)。然后和學(xué)生一同設(shè)計(jì)出程序代碼。
④對設(shè)計(jì)進(jìn)行小結(jié),引導(dǎo)學(xué)生一起歸納控件數(shù)組共享事件代碼的編程方式,重點(diǎn)加強(qiáng)學(xué)生理解控件數(shù)組中各個(gè)控件既獨(dú)立又統(tǒng)一的設(shè)計(jì)特點(diǎn)。
4)游戲中排雷錯(cuò)誤處理
引導(dǎo)學(xué)生分析出設(shè)計(jì)方案:如果游戲中,用戶點(diǎn)擊錯(cuò)了,則應(yīng)該顯示所有的雷,這個(gè)過程我們只需要遍歷zha數(shù)組,如果數(shù)組元素等于1,則是地雷,顯示出來即可。一同設(shè)計(jì)出主要代碼,參考如下:
If zha(hang, lie) = 1 Then
For i = 1 To 10
For j = 1 To 10
If zha(i, j) = 1 Then
cmd(i * 10 - 10 + j - 1).Caption = "●"
End If
Next j
Next i
Exit Sub
End If
5)游戲優(yōu)化
基本功能設(shè)計(jì)結(jié)束后,引導(dǎo)學(xué)生對案例中部分代碼進(jìn)行優(yōu)化設(shè)計(jì)。
①將求按鈕周圍地雷數(shù)量編寫為函數(shù),引導(dǎo)學(xué)生一同設(shè)計(jì)函數(shù)代碼,參考代碼如下:
Private Function qiugeshu(suoyin As Integer) As Integer
numhang = Int(suoyin / 10) + 1 ‘找出控件數(shù)組元素對應(yīng)的行列信息
numlie = (suoyin Mod 10) + 1
shuzi = 0
For i = numhang - 1 To numhang + 1
For j = numlie - 1 To numlie + 1
If i >= 1 And i <= 10 And j >= 1 And j <= 10 And _
(Not (i = numhang And j = numlie)) Then
If zha(i, j) = 1 Then
shuzi = shuzi + 1
End If
End If
Next j
Next i
qiugeshu = shuzi
End Function
②采用遞歸實(shí)現(xiàn)掃雷游戲過程的連續(xù)排雷處理功能,每次點(diǎn)擊,對被點(diǎn)擊按鈕周圍的按鈕進(jìn)行處理,引導(dǎo)學(xué)生一同設(shè)計(jì)函數(shù)代碼,參考代碼如下:
Private Sub fun(suoyin1 As Integer)
numhang = Int(suoyin1 / 10) + 1
numlie = (suoyin1 Mod 10) + 1
cmd(suoyin1).Caption = qiugeshu(suoyin1)
'遍歷周圍的8個(gè)
If qiugeshu(suoyin1) = 0 Then
For i = numhang - 1 To numhang + 1
For j = numlie - 1 To numlie + 1
If i >= 1 And i <= 10 And j >= 1 And j <= 10 And _
(Not (i = numhang And j = numlie)) Then
If Not IsNumeric(cmd((i - 1) * 10 + j - 1).Caption) Then
fun ((i - 1) * 10 + j - 1)
End If
End If
Next j
Next i
End If
End Sub
③對優(yōu)化設(shè)計(jì)進(jìn)行小結(jié),復(fù)習(xí)遞歸程序的設(shè)計(jì),引導(dǎo)學(xué)生一起歸納應(yīng)用控件數(shù)組解決項(xiàng)目設(shè)計(jì)問題的特點(diǎn):在方案設(shè)計(jì)上,可批量處理大量重復(fù)或功能相近的控件;在代碼設(shè)計(jì)上,利用for-next循環(huán)結(jié)構(gòu),可以方便地為控件數(shù)組的各個(gè)元素設(shè)置屬性等。
3 結(jié)論
案例教學(xué)以其與實(shí)際聯(lián)系緊密、操作性強(qiáng)的特點(diǎn)架起了理論與實(shí)踐的橋梁。相對單純講解理論知識并簡單演示的傳統(tǒng)教學(xué),將案例教學(xué)法應(yīng)用于VB教學(xué)過程的最大優(yōu)勢在于以案例為課堂教學(xué)基本支撐點(diǎn),將學(xué)生引人一個(gè)特定的相對真實(shí)的軟件設(shè)計(jì)情境中,通過師生、生生之間的共同探討,逐步剖析、層層推進(jìn)的解決問題,在整個(gè)教學(xué)過程中激發(fā)學(xué)生的學(xué)習(xí)積極性,培養(yǎng)學(xué)生的分析問題和解決問題的能力,幫助學(xué)生將理論知識轉(zhuǎn)化為實(shí)踐能力,經(jīng)過多年的探索和實(shí)踐取得了很好的教學(xué)效果。
參考文獻(xiàn):
[1] 丁海燕.Visual Basic程序設(shè)計(jì)課程實(shí)踐教學(xué)模式的探討[J].實(shí)驗(yàn)室研究與探索.2013,32(10):431-433
[2]黃爽.VB程序設(shè)計(jì)與應(yīng)用課程項(xiàng)目教學(xué)法的實(shí)施[J].遼寧高職學(xué)報(bào),2010,12(10):45-46.
[3]胡緒英.VB中控件數(shù)組及其應(yīng)用[J].軟件導(dǎo)刊.2014,13(10):20-22.
[4]譚浩強(qiáng).visualBasic程序設(shè)計(jì)案例教程[M].北京:清華大學(xué)出版社,2012.
[5]楊鈞.如何在計(jì)算機(jī)教學(xué)中激發(fā)學(xué)生學(xué)習(xí)興趣[J].遼寧中醫(yī)藥大學(xué)學(xué)報(bào),2006(8):65-67.
[6] 葉子,龐麗娟.試論師生互動模式形成的基本過程[J].教育研究,2009(2).