VB上机练习5-键盘事件、时钟事件
(2009-12-04 08:13:24)
[编辑][删除]
标签:高中信息技术算法与程序设计教育分类:算法与VB程序设计VB教学已有一段时间了,学生已经感受过新鲜、神奇、茫然。不能继续茫然了,怎么办呢,后面还有好几个难啃的算法,真是难为我这些学生了。后面的东西先放放吧,先来个简单游戏设计,重新激发下学生的兴趣。
主题:用vb设计飞机射击游戏
主要问题:(1)飞机移动控制;(2)子弹飞行,目标飞行;(3)子弹发射(4)是否命中
新知识点:KeyPress()按键事件;timer()时钟事件;picturebox控件;image控件;对象位置属性
一、飞机移动控制
功能:用键盘的的'A' 'D' 'W' 'S' 4个键分别控制飞机左右上下移动。
设计:用一个PictureBox控件当飞机,命名为picFJ,设置BorderStyle 0-none,设置Picture飞机图片。
【知识点】KeyPress(KeyAscii as Integer)事件:即敲键盘时激发的事件。
KeyPress定义方法:进入代码窗口,选择picFJ、选择KeyPress将出现下面代码块。
Private Sub picFJ_KeyPress(KeyAscii As Integer)
End Sub
KeyAscii为传入参数,即用户所敲键的Ascii码值,我们可以加行打印代码测试(Print KeyAscii)Private Sub picFJ_KeyPress(KeyAscii As Integer)
print KeyAscii
End Sub
调试程序,我们敲键时就会将所敲键的Ascii码打印到窗口。通过此测试我可以知道a d w s空格的Ascii码分别为:97 100 119 115 32
接下来我们就可以写出如下代码:
'控制飞机移动及子弹发射
Private Sub picFJ_KeyPress(KeyAscii As Integer)
If KeyAscii = 97 Then
'picFJ左移
ElseIf KeyAscii = 100 Then
'picFJ右移
ElseIf KeyAscii = 115 Then
'picFJ下移
ElseIf KeyAscii = 119 Then
'picFJ上移
ElseIf KeyAscii = 32 Then
'picFJ发射子弹
End If
End Sub
对象位置移动:VB中对象的位置由两个参数控制,对象左角点相对窗
体左边的距离Left;对象左角点相对窗体上边的距离Top(如图)。
由此,要移动对象位置,只要改变这两个参数就可以了。飞机左移的
代码为:picFJ.Left=picFJ.Left-100,于是可写出如下代码:
Private Sub picFJ_KeyPress(KeyAscii As Integer)
If KeyAscii = 97 Then
'picFJ左移
picFJ.Left = picFJ.Left - 100
ElseIf KeyAscii = 100 Then
'picFJ右移
picFJ.Left = picFJ.Left + 100
ElseIf KeyAscii = 115 Then
'picFJ下移
picFJ.Top = picFJ.Top + 100
ElseIf KeyAscii = 119 Then
'picFJ上移
picFJ.Top = picFJ.Top - 100
ElseIf KeyAscii = 32 Then
'picFJ发射子弹
End If
End Sub
二、子弹飞行
功能:子弹飞行
设计:用Image控件作子弹,名称为:imgZD,设置imgZD的Picture属性为子弹图片,设置index为0(将子弹对象构造成数组,因为会用到比较多的子弹)。
简单的vb程序代码
分析:子弹飞行原理即子弹的位置不断改变(imgZD(0).Top=imgZD(0).Top-200)。用户只管发射,发射后自动飞行。如何控制子弹自动改变位置,需要引进一个新的概念,时间控制动作。用到Timer控件。
Timer控件有个Timer()事件。它的作用是每隔一段时间重复做某事。现在我们要的就是每隔一段时间重复执行子弹往上移动。
设计:添加一个Timer对象,名称:Timer1,Interval(时间间隔,单位:毫秒)设置为40,双击Timer1的图标,将生成如下代码块:该代码块内的代码将每隔40毫秒执行一次。
Private Sub Timer1_Timer()
End Sub
要重复执行的代码为:imgZD(0).Top=imgZD(0).Top-200,于是可写出如下代码
Private Sub Timer1_Timer()
if imgZD(0).top-imgZD(0).Height>0 then'如果子弹还未超出上边界
imgZD(0).Top=imgZD(0).Top-200
end if
End Sub
此时可以调试下程序了,看看效果。
三、子弹发射
功能:发射子弹
分析:从上面代码可知,子弹是在时钟控制下飞行的,超出边界后停止。控制子弹发射实际只需把子弹的位置调整到发射点(后面的事情是子弹飞行,那是时钟的事情)。发射点就是当前飞机所在的位置。
【知识点】过程:过程是实现特定功能的代码块,它与函数的区别是它没有返回值,定义的关键字是Sub。(定义函数的关键字为:Function)定义方法如下:
Sub函数名(参数列表)
End Sub
定义发射过程,函数名shot,参数为发射子弹的序号(前面已说明子弹要用一些,用数组构造)Sub shot(zdH as Integer)
imgZD(zdH).Left = picFJ.Left + 400'将子弹调整到飞机的中间位置
imgZD(zdH).Top = picFJ.Top
End Sub
现在可以在KeyPress()事件中添加发射子弹代码了,代码如下:
call shot(0)'调用过程需加关键字call ,此处是发射0号子弹
此时,我们可以调试下程序,看看效果。