内容正文:
null
第13课
控件数组与Timer控件“开心水果机”
教科版(云南)信息技术八年级下册
问题与任务:
小明在网上玩过一个“开水果机”的游戏,于是,他想用VB编一个类似的程序。
游戏规则:点击“开始”,从指定的水果图片中随机抽取3张水果图片(可重复)并放入3个图片框中,直至按下“停止”按钮,如果3张图片都相同则表示中奖。运行效果如“图13-1‘开心水果机’效果图”所示。
新课导入
一、“开心水果机”原理分析
通过观察“开心水果机”程序界面(图13-2)并结合游戏规则,小明发现水果机的秘密:每次点击开始”按钮后,水果机会自动从指定的水果图片中任意抽取3张可重复的水果图片,并放入3个图片框中,直至按下“停止”按钮为止。中奖的判断依据是3个图片框中的图片是同一图片。
新课讲解
小明从该程序的流程图(图13-3)发现,要编写本程序,除了前面所学到的VB知识外,还必须要知道怎样多次、随机抽取图片。
二、Rnd和Fix函数
要实现随机抽取图片,就必须要生成随机数。那么,如何生成一个随机数呢?
试一试
(1)新建工程。请依照图13-4(a)新建一个工程,添加Text控件和两个Command控件,依照图13-4(b)所示输入代码,并注意更改控件的name等属性。
(2)运行程序。单击“例1”按钮6次,将控件Text的数按要求填写在表13-1的第二列中。关闭后重新运行程序,再次单击“例1”按钮6次,将产生数按要求填写在表13-1的第三列中,观察两列数的变化规律。
记录次数 第一次产生数据 第二次产生数据 (关闭后重新运行) 第三次产生数据 (加入 Randomize后)
1
2
3
4
5
6
表13-1随机函数
(3)添加代码。按图13-5所示在程序中添加代码,将程序执行后的结果记录在第四列中,并观察数的变化规律。
图13-5加载 Randomize函数通过观察我们发现,随机函数Rnd的作用是返回一个大于或等于0,但小于1的随机小数。其语法格式为
Rnd
而 Randomize函数的作用是初始化随机生成器,保证每次运行程序得到的随机数序列不同。其语法格式为
Randomize
一般情况下,对象的编号都是整数。为了将小数变为整数,我们还需要用到取整函数Fix,它的作用是返回给定数的整数部分。其语法格式为
Fix (number)
例如,Fix(3.8)和Fix(3.1)的返回值都是3
?想一想 如何利用Rnd和Fix函数产生一个0~3的随机整数?
三、控件数组
试一试 结合图13-2的程序界面设计图,说说下列代码的作用是什么。
Private Sub Commandstrt Click( )
x= Fix(Rnd* 3)
If x= 0 Then Imagelst Picture =Image1 Picture
If x =1 Then Imagelst Picture = Image2 Picture
If x= 2 Then Imagelst Picture Image3 Picture
If x= 3 Then Imagelst Picture Image4 Picture
End Sub
在编写程序时,我们常常需要使用一批同一类型的控件对象,如本例中的4张图片。如果采用新建的方法一个个产生这些控件对象,就会产生如Image1、 Image2、 Image3、 Image4这样一些零散对象。对这些对象编写代码非常烦琐且不方便,无法批量使用。
1.创建控件数组
控件数组的建立可以通过复制、粘贴的方式,具体操作步骤如下(图13-6)
(1)在窗体上添加一个 Image控件,并命名为“ ImageBak"。
(2)选择该控件,通过“复制”“粘贴”创建控件数组 Imagebak。最初新建的那个控件名称为“ Image Bak(0)”,粘贴得到的控件名称为“ Image Bak(1)”。
(3)重复步骤(2),得到下一个控件数组元素。
2.控件数组
控件数组就是一组控件对象,如 ImageBak(0)、 ImageBak(1)、 Image Bak(2)、 ImageBak(3),其中每个对象均被称为控件数组的一个元素。控件数组有以下特点。
(1)控件数组中的元素具有相同的对象名,如上面的4个控件对象都叫 ImageBak。
(2)控件数组中的元素以索引号( Index属性)来区别,就像对同一类产品进行编号一样。
(3)控件数组中的元素的索引号默认从0开始。
(4)控件数组中的元素共享事件过程,即可以在同一事件过程中方便地对控件数组中所有的元素进行统一处理。
?想一想 如何通过随机数和素引号从控件数组中选择一个对应编号的图片?
讨 论 结合本节例子,说说在什么情况下适合使用控件数组。
四、 Timer控件
Timer控件的作用是有规律地以一定的时间间隔激发 Timer事件,从而每隔一段时间执行一次Tmer事件下的代码。 Timer控件有两个重要的属性:
Interval和 Enabled。
Interval属性表示两次 Ttimer事件的时间间隔,以毫秒为单位。如希望每秒执行一次 imer事件,则将 Intervall属性值设为1000。 Interval属性值越小,表示时间间隔越短,变化的频率越快,但当 Interval属性值为0时,表示Timer控件无效。
Enabled属性只有两个值:True和 False,用来决定 Timer控件是否有效。
在刚オ的窗体中添加一个 Timer控件,将 Interval属性值设为500,再将前面随机抽取的图片代码移动到 Timer事件中,观察执行程序后的效果有什么变化。
试一试
五、“开心水果机”的程序设计
结合游戏规则和流程图,我们可以将游戏的关键“自动抽取图片功能”交给 Timer控件,游戏的开始即 Timer控件的激活由“开始”按钮来控制“停止”按钮不仅用于停止游戏,还用于游戏结果的判断。
程序代码如图13-7所示。
1.程序中的变量a,b,c都是通过表达式Fix(Rnd*4)产生的,它们的值是否一样呢?我们可通过调试功能中的“变量监视”,观察它们的值,验证自己的答案。
2.“三个数相等”,在数学中可用表达式“a-b=c”来表示,那么在VB中又是如何表达的呢?
想一想
根据提示,将“下落的小方块”(“图13-8下落的小方块”)程序补充完整。
程序要求:每按下键盘一次,屏幕中的黑色格子将向下移动一格,直到最后一行。
Dim i As Integer i代表行数
Private Sub Form_Load( )
思考练习
I=1
End Sub
Private Sub Form_Key Down(Key Code As Integer, Shift As Integer)
If i<=_________Then
Shape1(________* 10+4). Fillstyle=1
Shapel(i * 10+4). Fillstyle=__________________
I=___________
End If
End Sub
提示
1.屏幕上的格子使用控件数组 Shape,其中第一行 Shape(0)~ Shape(9),第二行 Shape(10)~ Shape(19)……
2.当前格子所在位置是第一行第5个,即 Shape(4),下移一次就到了第二行第5个,即 Shape(14)……
3.格子的移动实际上是改变 Shape控件的 Fillstyle属性:当 Fillstyle属性值为0时, Shape控件用实线填满;当 Fillstyle属性值为1时, Shape控件透明。
4.按下键盘触发的是 KeyDown事件。
这节课,我们了解了“开心水果机”原理和 Timer控件的意义,知道了 Rnd、Fix函数的格式和作用,掌握了控件数组及其创建方法。探究、体验了设计“开心水果机”的程序。
课堂小结
“开心水果机”原理分析
Rnd和Fix函数
控件数组
Timer控件
“开心水果机”的程序设计
控件数组与 Timer
控件“开心水果机”
板书设计
课程结束
$$