VB上机练习5-键盘事件、时钟事件
(2009-12-0408:13:24)
[编辑][删除]
标签:高中信息技术算法与程序设计教育分类:算法与VB程序设计VB教
学已有一段时间了,学生已经感受过新鲜、神奇、茫然。不能继续茫然了,怎么办呢,后面还有好几个难啃的算法,真是难为我这些学生了。后面的东西先放放吧,先来个简单游戏设计,重新激发下学生的兴趣。
主题:用vb设计飞机射击游戏
主要问题:(1)飞机移动控制;(2)子弹飞行,目标飞行;(3)子弹发射(4)是否命中
新知识点:KeyPress(按键事件;timer()时钟事件;picturebox控件;image控件;对象位置属性
一、飞机移动控制
功能:用键盘的的‘A'‘D''W'S'4个键分别控制飞机左右上下移动。
设计:用一个PictureBox控件当飞机,命名为picFJ设置BorderStyle0-none,设置Picture飞机图片。
【知识点】KeyPress(KeyAsciiasInteg璃件:即敲键盘时激发的事件。
KeyPress定义方法:进入代码窗口,选择picFJ选择KeyPressW出现下面代码块。
PrivateSubpicFJ_KeyPress(KeyAsciiAsInteger)
EndSub
KeyAscii为传入参数,即用户所敲键的Ascii码值,我们可以加行打印代码测试(PrintKeyAsciiPrivateSubpicFJ_KeyPress(KeyAsciiAsInteger)
printKeyAscii
EndSub
调试程序,我们敲键时就会将所敲键的Ascii码打印到窗口。通过此测试我可以知道adws空格的Ascii码分别为:9710011911532
接下来我们就可以写出如下代码:
'控制飞机移动及子弹发射
PrivateSubpicFJ_KeyPress(KeyAsciiAsInteger)
IfKeyAscii=97Then
'picFJ左移
ElseIfKeyAscii=100Then
'picFJ右移
ElseIfKeyAscii=115Then
'picFJ下移
ElseIfKeyAscii=119Then
'picFJ上移
ElseIfKeyAscii=32Then
'picFJ发射子弹
EndIf
EndSub
对象位置移动:VB中对象的位置由两个参数控制,对象左角点相对窗
体左边的距离Left;对象左角点相对窗体上边的距离Top(如图)。
由此,要移动对象位置,只要改变这两个参数就可以了。飞机左移的
代码为:picFJ.Left=picFJ.Left-100P是可写出如下代码:
PrivateSubpicFJ_KeyPress(KeyAsciiAsInteger)
IfKeyAscii=97Then
'picFJ左移
picFJ.Left=picFJ.Left-100
ElseIfKeyAscii=100Then
'picFJ右移
picFJ.Left=picFJ.Left+100
ElseIfKeyAscii=115Then
'picFJ下移
picFJ.Top=picFJ.Top+100
ElseIfKeyAscii=119Then
'picFJ上移
picFJ.Top=picFJ.Top-100
ElseIfKeyAscii=32Then
'picFJ发射子弹
EndIf
EndSub
二、子弹飞行vb程序设计简单吗
功能:子弹飞行
设计:用Image控件作子弹,名称为:imgZD,设置imgZD的Picture属性为子弹图片,设置index为0(将子弹对象构造成数组,因为会用到比较多的子弹)。
分析:子弹飞行原理即子弹的位置不断改变(imgZD(0).Top=imgZD(0).Top-200)。用户只管发射,发射后自动飞行。如何控制子弹自动改变位置,需要引进一个新的概念,时间控制动作。用到Timer控件。
Timer控件有个Timer()事件。它的作用是每隔一段时间重复做某事。现在我们要的就是每隔一段时间重复执行子弹往上移动。
设计:添加一个Timer对象,名称:Timer1,Interval(时间间隔,单位:毫秒)设置为40,双击Timer1的图标,将生成如下代码块:该代码块内的代码将每隔40毫秒执行一次。
PrivateSubTimer1_Timer()
EndSub
要重复执行的代码为:imgZD(0).Top=imgZD(0).Top-200于是可写出如下代码
PrivateSubTimer1_Timer()
ifimgZD(0).top-imgZD(0).Height>0then如果子弹还未超出上边界
imgZD(0).Top=imgZD(0).Top-200
endif
EndSub
此时可以调试下程序了,看看效果。
三、子弹发射
功能:发射子弹
分析:从上面代码可知,子弹是在时钟控制下飞行的,超出边界后停止。控制子弹发射实际只需把子弹的位置调整到发射点(后面的事情是子弹飞行,那是时钟的事情)。发射点就是当前飞机所在的位置。
【知识点】过程:过程是实现特定功能的代码块,它与函数的区别是它没有返回值,定义的关键字是Sub。(定义函数白^关键字为:Function)定义方法如下:
Sub函数名(参数列表)
EndSub
定义发射过程,函数名shot,参数为发射子弹的序号(前面已说明子弹要用一些,用数组构造)Subshot(zdHasInteger)
imgZD(zdH).Left=picFJ.Left+400F子弹调整到飞机的中间位置
imgZD(zdH).Top=picFJ.Top
EndSub
现在可以在KeyPress佛件中添加发射子弹代码了,代码如下:
callshot(0)'调用过程需加关键字call此处是发射0号子弹
此时,我们可以调试下程序,看看效果。
继续分析:1颗子弹显然不够用。子弹刚发射还在飞行时若再按发射键,子弹还没跑出窗体就被重置到发射位置。本实例将用10颗子弹循环发射,发射键
敲击频率不是特别高的话应该是够用了。
设计:复制imgZD(0)粘贴9次。这样就有10颗子弹了,是一个数组,序号从0到9.
循环发射的实现:记录发射的子弹号zdH,初始值为-1,每次要发射的子弹号zdH=(zdH+1)mod1要让10颗子弹都在时钟控制下自动飞行,时钟的Timer()事件应改为:
PrivateSubTimer1_Timer()
dimiasInteger
fori=0to9
ifimgZD(i).top-imgZD(i).Height>0then如果子弹还未超出上边界
imgZD(i).Top=imgZD(i).Top-200
endif
next
EndSub
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论