



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 SubKeyAscii为传入参数,即用户所敲键的Ascii码值,我们可以加行打印代码测试(Print KeyAscii)Private Sub picFJ_KeyPress(KeyAscii As Integer) print KeyAsciiEnd 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 IfEnd 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 IfEnd Sub二、子弹飞行功能:子弹飞行设计:用Image控件作子弹,名称为:imgZD,设置imgZD的Picture属性为子弹图片,设置index为0(将子弹对象构造成数组,因为会用到比较多的子弹)。分析:子弹飞行原理即子弹的位置不断改变(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() ifimgZD(0).top-imgZD(0).Height0 then 如果子弹还未超出上边界 imgZD(0).Top=imgZD(0).Top-200 end ifEnd Sub此时可以调试下程序了,看看效果。三、子弹发射功能:发射子弹分析:从上面代码可知,子弹是在时钟控制下飞行的,超出边界后停止。控制子弹发射实际只需把子弹的位置调整到发射点(后面的事情是子弹飞行,那是时钟的事情)。发射点就是当前飞机所在的位置。【知识点】过程:过程是实现特定功能的代码块,它与函数的区别是它没有返回值,定义的关键字是Sub。(定义函数的关键字为:Function)定义方法如下:Sub函数名(参数列表)End Sub定义发射过程,函数名shot,参数为发射子弹的序号(前面已说明子弹要用一些,用数组构造)Sub shot(zdH as Integer) imgZD(zdH).Left = picFJ.Left + 400 将子弹调整到飞机的中间位置 imgZD(zdH).Top = picFJ.TopEnd Sub现在可以在KeyPress()事件中添加发射子弹代码了,代码如下:call shot(0) 调用过程需加关键字call ,此处是发射0号子弹此时,我们可以调试下程序,看看效果。继续分析:1颗子弹显然不够用。子弹刚发射还在飞行时若再按发射键,子弹还没跑出窗体就被重置到发射位置。本实例将用10颗子弹循环发射,发射键敲击频率不是特别高的话应该是够用了。设计:复制imgZD(0),粘贴9次。这样就有10颗子弹了,是一个数组,序号从0到9.循环发射的实现:记录发射的子弹号zdH,初始值为-1,每次要发射的子弹号 zdH = (zdH + 1) mod10要让10颗子弹都在时钟控制下自动飞行,时钟的Timer()事件应改为:Private Sub Timer1_Timer() dim i as Integer for i = 0 to 9 ifimgZD(i).top-imgZD(i).Height0 then 如果子弹还未超出上边界 imgZD(i).Top=imgZD(i).Top-200 end if nextEnd Sub前一次发射的子弹号变量应该定义在事件的外面,Dim zdH as Integer 这样所有事件都能获取到该变量。这样的变量我称为全局变量。在过程及函数外面是不能写定义以外的代码的,zdH的初值赋值只能在Form_Load()事件中完成。Dim zdH As IntegerPrivate Sub Form_Load() zdH = -1End SubKeyPress()事件的子弹发射处代码应改为:zdH = (zdH + 1) mod 10call shot(zdH)废话:一个下午竟然都没能写完,今天继续。四、目标飞行分析:目标也是自动飞行(为了简单,仅限水平方向右移),跟子弹的自动飞行是一样的。只不过它是全自动的,没有发射问题,但需循环飞行(超出屏幕、被命中需自动重置)。设计:目标用Image控件,名称 imgZSJ、index 0(构造数组)、Picture 直升机图片。复制imgZSJ(0),粘贴2次(直升机imgZSJ数组有3个元素,序号0-2)。再创建一个时钟对象Timer2,interval设置为30,用来控制直升机。代码如下:Private Sub Timer2_Timer() Dim i As Integer For i = 0 To 2 If imgZSJ(i).Left 100 And imgZD(zdH).Top - imgZSJ(zsjH).Top 100 And imgZD(zdH).Left - imgZSJ(zsjH).Left 0 then 如果子弹还未超出上边界 imgZD(i).Top=imgZD(i).Top-200 For j = 0 To 2 If (isMingZhong(i, j) = True) Then 如果命中 lblDF.Caption = CInt(lblDF.Caption) + 1 命中次数统计 imgZSJ(j).Left = -1000 + Rnd *1000 直升机位置重置 imgZSJ(i).Top = Rnd * 2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 衣服租借协议书
- 本田协议书合
- 复工租车协议书
- 个人之间的协议书有用
- 电子离婚协议书
- 代偿没有协议书
- web服务是基于什么协议书
- 股东出资协议书范本
- 毕业了实习协议书
- 流程导学式教学设计七单元
- 2024-2025学年山东省青岛五十八中高一(上)第一次月考数学试卷(含答案)
- PANTONE国际色卡CMYK色值对照表3
- DL∕T 5371-2017 水电水利工程土建施工安全技术规程
- TD/T 1057-2020 国土调查数据库标准(正式版)
- 健康教育狂犬病知识讲座
- 应急救援的现场医疗急救
- 第一章 马克思主义自然观
- 2023-2024学年八年级物理上学期第一次月考考试版【测试范围:第一章、第二章】(人教版)
- 重大隐患判定标准解读课件
- j11pro固件爵聆数播说明书
- 电容式电压互感器试验指导方案
评论
0/150
提交评论