李丽华+魏树权
摘要:案例教学法对于计算机专业是一种新的教学形式,能激发学生的学习积极性,提高学生分析问题和解决问题的能力。该文以扫雷游戏为例阐述了在VB教学中采用案例教学法对控件数组、函数过程、递归算法等重要的知识点进行教学设计和教学实施的过程。
关键词:案例教学法;案例设计;控件数组
中图分类号:G642 文献标识码:A 文章编号:1009-3044(2016)22-0108-03
案例教学法,在计算机科学中是一种开放式、互动式的新型教学方式,它通过模拟或者重现软件项目中的关键场景,使学生主动把自己纳入案例当中,运用已有的知识和经验来分析、判断案例提供的背景、软件需求描述,并解决相关软件设计技术问题,最后,从中总结出某些关键的知识点或设计方案;也可以让学生通过自己的思考或者跟随他人的思路来拓宽自己的视野,从而促进学生进行知识技能迁移,提高学生的软件设计能力[1]。
控件数组是Visual Basic中的一个较难的知识点,它是一组具有相同名称和类型的控件的集合,通过各自的编号(下标)来识别,并且可以共享事件。程序中使用控件数组所占用的资源比单独添加多个控件所占用的资源更少,而且控件数组的事件共享,使用多个同类型控件在一个应用中执行相同或类似的代码,使用控件数组比单独创建多个控件更容易设计,代码更容易维护[2]。在控件数组的教学过程中,需要学生理解以控件为数组的设计形式、控件在应用界面上的微差异可视化的表现形式,结合控件事件代码的共享机制以解决软件设计问题的设计思维,由于设计思维的转变,实践证明,采用单纯的讲解其知识点并简单演示,很难获得优良的教学效果。
将案例教学法引入Visual Basic的教学过程,就是要把软件案例的设计实现过程加以典型化处理[3],形成供学生思考分析的案例,采用鼓励学生独立研究学习与师生相互探讨相结合的教学方式,提高学生分析问题和解决问题的能力。本文在教学过程中模拟一个Windows系统自带的扫雷游戏的实现过程,灵活的运用VB各个章节的知识点,以案例驱动的方式,结合界面设计和编码,以使学生能够更加真切的理解和掌握控件数组的知识要点,并能进行实际应用设计。
1 案例准备
通过多年的教学实践探索,我们认为教学案例的选择,要满足三个条件:典型、贴近实际、有趣,经过细致选择,Windows系统自带的扫雷游戏最后被选中。
在案例教学中,要让学生成为教学过程的主角,我们在讲解控件数组课前将准备好的扫雷游戏案例告知学生,要求学生查找一些必要的资料,做好发言准备;同时,我们将初步的案例问题分解细节告诉学生[4]。初步分解如下:
1)游戏地图构建;
2)游戏地雷分布构建;
3)游戏中点击控件按钮,地雷显示;
4)游戏中排雷错误处理。
2 案例课堂讲解讨论
案例课堂讲解讨论是案例教学过程的中心环节,教师需要主动调动学员的主动性,引导学生主动紧紧围绕案例进行思考和分析[5]。以10×10的游戏地图为例,共需100个按钮控件。
1)游戏地图构建
地图如何构建?首先引导学生对不正确的设计方案进行否定,比如先绘制20个左右的按钮控件到界面上,然后依次点击按钮生成控件单击事件,在这个过程中引导学生对各个环节进行发言,时机成熟后,引入控件数组知识点:
①控件数组的概念及功能:控件数组是VB中特有的一组对象,同一个控件数组的所有控件拥有共同的名称和类型并响应同一个事件过程,但每一个控件都拥有自己的属性值。数组通过下标来标示每一个控件元素。
②引入扫雷游戏的实际需要,生成游戏地图,基本完成步骤:
a、做好一个按钮当模版
b、建立控件数组
c、生成99个新的控件数组元素
③对设计进行小结,引导学生一起归纳采用控件数组设计地图的初步特征,并重点强调应用到的控件数组的知识要点[6]。
2)游戏地雷分布构建
①分析地雷和控件的关系:教学过程中和学生一起分析,地雷是游戏中的一个关键元素,但它不是游戏中的独立元素,必须和控件进行关联。
②地雷设计:可以采用二维数组记录哪些按钮控件对应地雷。在窗体的声明部分声明二维数组,用于存储按钮控件有地雷的情况。假设规定二维数组某元素的值为1,代表该位置上的按钮有地雷,为0代表无地雷。
Dim zha(1 To 10, 1 To 10) As Integer
③生成随机地雷
教学中和学生一同进行分析:10×10的游戏地图中有10个地雷,地雷的分布必须具有随机性,所以对10个地雷的位置使用随机函数来进行设置,同时要注意生成的代表地雷位置的随机数不能重复。最后一同设计出主要代码,参考如下:
zhdshu = 10 '地雷总数
Dim tmp(10) As Integer
t = 0
While t < 10
biaozhi = 0 '用于标识当前控件是否有雷
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
④对设计进行小结,引导学生一起归纳地雷分布设计过程中,将代码与界面进行关联的设计要点,并回顾随机数知识点。
3)游戏中点击控件按钮,地雷显示
①首先提出关键问题引导学生思考:在按钮上点击鼠标左键需要显示其周围有几个地雷,如何计算?游戏中如何判断是否获胜?
②地雷个数的计算:在按钮上点击鼠标左键后,界面上需要显示其周围有几个地雷,地雷个数的计算问题可以转换为判断当前点击的按钮所对应的行列数,即对应的二维数组元素周围的8个按钮有几个地雷。一同设计出主要代码,参考如下:
Dim hang As Integer, lie As Integer, shuzi As Integer
hang = Int(Index / 10) + 1
lie = (Index Mod 10) + 1
'判断当前点击按钮的周围有几个地雷,并显示出来
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 '显示有几个地雷
③判断获胜
引导学生分析出设计方案:用户已经标识出所有地雷,标示正确了就算赢,所以程序中我们只需要判断是否zha数组中所有的等于1的元素,在界面上显示的标志是符号"●",并且显示的地雷总数是10个。然后和学生一同设计出程序代码。
④对设计进行小结,引导学生一起归纳控件数组共享事件代码的编程方式,重点加强学生理解控件数组中各个控件既独立又统一的设计特点。
4)游戏中排雷错误处理
引导学生分析出设计方案:如果游戏中,用户点击错了,则应该显示所有的雷,这个过程我们只需要遍历zha数组,如果数组元素等于1,则是地雷,显示出来即可。一同设计出主要代码,参考如下:
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)游戏优化
基本功能设计结束后,引导学生对案例中部分代码进行优化设计。
①将求按钮周围地雷数量编写为函数,引导学生一同设计函数代码,参考代码如下:
Private Function qiugeshu(suoyin As Integer) As Integer
numhang = Int(suoyin / 10) + 1 ‘找出控件数组元素对应的行列信息
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
②采用递归实现扫雷游戏过程的连续排雷处理功能,每次点击,对被点击按钮周围的按钮进行处理,引导学生一同设计函数代码,参考代码如下:
Private Sub fun(suoyin1 As Integer)
numhang = Int(suoyin1 / 10) + 1
numlie = (suoyin1 Mod 10) + 1
cmd(suoyin1).Caption = qiugeshu(suoyin1)
'遍历周围的8个
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
③对优化设计进行小结,复习递归程序的设计,引导学生一起归纳应用控件数组解决项目设计问题的特点:在方案设计上,可批量处理大量重复或功能相近的控件;在代码设计上,利用for-next循环结构,可以方便地为控件数组的各个元素设置属性等。
3 结论
案例教学以其与实际联系紧密、操作性强的特点架起了理论与实践的桥梁。相对单纯讲解理论知识并简单演示的传统教学,将案例教学法应用于VB教学过程的最大优势在于以案例为课堂教学基本支撑点,将学生引人一个特定的相对真实的软件设计情境中,通过师生、生生之间的共同探讨,逐步剖析、层层推进的解决问题,在整个教学过程中激发学生的学习积极性,培养学生的分析问题和解决问题的能力,帮助学生将理论知识转化为实践能力,经过多年的探索和实践取得了很好的教学效果。
参考文献:
[1] 丁海燕.Visual Basic程序设计课程实践教学模式的探讨[J].实验室研究与探索.2013,32(10):431-433
[2]黄爽.VB程序设计与应用课程项目教学法的实施[J].辽宁高职学报,2010,12(10):45-46.
[3]胡绪英.VB中控件数组及其应用[J].软件导刊.2014,13(10):20-22.
[4]谭浩强.visualBasic程序设计案例教程[M].北京:清华大学出版社,2012.
[5]杨钧.如何在计算机教学中激发学生学习兴趣[J].辽宁中医药大学学报,2006(8):65-67.
[6] 叶子,庞丽娟.试论师生互动模式形成的基本过程[J].教育研究,2009(2).