版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Vb 制作小游戏 一、射击游戏Option ExplicitDim RandX As SingleDim RandY As SingleDim Score As SingleDim Thisscore As SingleDim Average As SingleDim Shot As IntegerDim Appear As BooleanDim Distance As SinglePrivate Sub Command1_Click( Timer1.Enabled = TrueCommand3.Enabled = TrueIf Command1.Enabled = True Then Com
2、mand3.Caption = "暂停 "End IfCommand4.Enabled = TrueEnd SubPrivate Sub Command2_Click(If Command4.Enabled = True ThenMsgBox "请先结束游戏 ", 48, "警告 "ElseEndEnd IfEnd SubPrivate Sub Command3_Click( Command1.Enabled = False Command3.Caption = "继续 " Timer1.Enabled = Not
3、 Timer1.Enabled If Timer1.Enabled = True Then Command3.Caption = "暂停 "End IfEnd SubPrivate Sub Command4_Click( Timer1.Enabled = False Command3.Enabled = False Command1.Enabled = True Picture1.ClsLabel1.Caption = "射击:" Label2.Caption = "平均得分:" Label3.Caption = "环数:&
4、quot; Label4.Caption = "总分:" Command4.Enabled = FalseCommand3.Caption = "暂停 "End SubPrivate Sub Form_Load(Appear = FalseTimer1.Enabled = FalseThisscore = 0Score = 0Shot = 0End SubPrivate Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single BeepShot
5、 = Shot + 1Picture1.DrawWidth = 4Picture1.PSet (X, Y, RGB(255, 0, 0Distance = Sqr(X - RandX * (X - RandX + (Y - RandY * (Y - RandYIf Appear And Timer1.Enabled ThenThisscore = 5 - Int(Distance / 10If Thisscore <= 0 ThenThisscore = 0End IfScore = Score + ThisscoreAverage = Int(Score / Shot * 100 /
6、100Label1.Caption = "射击:" + Str(Shot + "发 "Label2.Caption = "平均得分:" & Format(Average, "0.00" & "环 " Label3.Caption = "环数:" + Str(Thisscore + "环 " Label4.Caption = "总分:" + Str(Score + "环 "End IfEnd SubPr
7、ivate Sub Timer1_Timer(Dim i As IntegerAppear = Appear Xor TrueRandX = 500 * Rnd(RandY = 370 * Rnd(If Appear ThenPicture1.DrawWidth = 1Picture1.DrawStyle = 0For i = 10 To 50 Step 10Picture1.Circle (RandX, RandY, i, RGB(0, 0, 255Next iPicture1.Line (RandX - 60, RandY-(RandX + 60, RandY Picture1.Line
8、(RandX, RandY - 60-(RandX, RandY + 60 ElsePicture1.ClsEnd IfEnd Sub二、打飞机游戏从作一个小游戏开始指针本文从制作一个简单的小游戏开始,通过扩展这游戏,讲解 VB 多媒体,键盘控制与一些相 关技术。这是个类似打飞机的游戏,运行界面见图。图 1这个游戏程式包括下列对象:Table11、操作对象 Fight 的键盘控制:VB 中的窗口键盘控制可使用 Form_KeyUp(松开与 Form_KepDown(窗口按下事件,其语 法是:PrivateSubForm_KeyUpPrivateSubForm_KeyDownKeyCode 参数
9、是返回所按键的 ASCII 代码。 在 VB 中可使用其预定义的常数来替代这些 ASCII 代码,如 vbKeyLeft 即指左箭头键的 ASCII 值 37。Shift 参数是在响应 SHIFT , CTRL 和 ALT 键的状态的一个整数, 分别对应于值 1、 2和 4,即 二进制得 1, 10, 100。如果 SHIFT 、 CTRL 和 ALT 这三个键都被按下,则 Shift 的值为 7(二 进制 111。 同理如果 CTRL 和 ALT 这两个键都被按下,则 Shift 的值为 6。可对其进行位屏 蔽,即二进制的特定位的与运算来确定相应的键是否按下。如判断 CTRL 键其语法为 S
10、hiftAND2(可用预定义的 vbCtrlMask 常数替代是否为真。注意,当窗口的 KeyPreview 属性被设置为 False 时, Form_KeyUp、 Form_KepDown事件将被 忽略。Fight 对象的移动可通过修改 LEFT 属性设置对象内部的左边与窗口的左边之间的距离位置, Top 属性设置对象的内顶部和窗口的顶边之间的距离来实现。具体实现代码 :OptionExplicit PrivateCtrldownAsBooleanCTRL 键 PrivateSpeedAsIntegerFight 对象的移动速度 在窗口的 load 事件中加入 Fire.KeyPreview
11、=True Fire.BorderStyle=3将窗口设为固定对话框, 不包含最大化和最小化按钮, 不能改变尺寸。 窗口的 Form_keydown 事件包括. PrivateSubForm_KeyDown CtrlDown=判断 CTRL 键,用于加速 IfThen Speed=80高速 Else Speed=40低速 EndIf SelectCaseKeyCode CasevbKeyLeft 注释:左键 IfThen Fight.Left=Fight.Left-Speed EndIf CasevbKeyRight右键 IfThenFight 对象的右边缘不能超越窗口的右边缘 Fight.L
12、eft=Fight.Left+Speed EndIf EndSelect EndSub 亦可使用 VB 针对控件的 Object_KeyDown,Object_KeyUp 事件,大同小异。注意,这种方式 不能有效地识别同时按下多个按键,不能适应游戏的需求。 2、使用 Timer 时钟控件绘制运动着的图像 Timer 可以有规律地隔一段时间执行一次代码。其间隔的时间由 Interval 属性设置,是一 个整数,单位是毫秒既千分之一秒。执行的代码放置于 Timer 事件中。 目标 Home 的移动的策略不拘一格,本文给出一简单的随机变加速度算法。 PrivateSubTimerS_Timer If
13、Then50加或减速度,VB 中 rand 总是正值 homespeed=homespeed+Rnd50 Else homespeed=homespeed-Rnd50 EndIf Home.Left=Home.Left+homespeed IfThen 注释:如目标右边缘小于窗口左边缘 Home.Left=Fire.Width目标在窗口的右边出现 EndIf IfThen如目标左边缘小于窗口右边缘 Home.Left=-Home.Width目标在窗口的左边出现 EndIf EndSub 目标 Home 的移动的策略还可引入 Fight 对象的位置和速度的参数,实际上,目标 Home 与 Fig
14、ht 对象的移动可以是二维的,只要修改其 Top 属性就可实现,此类游戏耐玩的关键在于 其移动的策略,读者不妨自行定义一策略看看。 3、子弹的实现 在窗口的 Load 事件中加入 Shot.Visible=False 注释:子弹不可见 HadShot=0命中次数 MaxShot=3摧毁目标的命中次数 在窗口的 Form_KeyDown 事件中加入 IfThen目标尚没摧毁 . CasevbKeySpace IfThen 注释:发射子弹,后可加入声音,与减分 Shot.Left=Fight.Left+/2定位于 Fight 的正中 Shot.Top=Fight.Top-Shot.Height定位
15、于 Fight 的上方 Shot.Visible=True子弹可见 EndIf . EndIf EndSub 在 TimerS 的 Timer 事件中加入 PrivateSubTimerS_Timer IfThen IfThen子弹已发射 Shot.Top=shot.Top-100 EndIf IfThen子弹到达窗口顶端 Shot.Visible=False Else IfAnd_ >=Home.TopAnd_ +Home.WidthAnd_ >=Home.LeftAnd_ Then 注释:子弹命中目标 Shot.Visible=False HadShot=HadShot+1后可
16、加入声音,与加分 EndIf EndIf . Else 注释:可加入声音 Home.Picture="Home2.gif"显示摧毁后的图象 EndIf EndSub 敌目标发射子弹的方式基本相同,此代码还可扩展至若干发子弹,不再熬诉。 4、加入多媒体特征 可使用 API 函数 mciExecute 实现多功能,语法为,先声明 PrivateDeclareFunctionmciExecuteLib"winmm.dll"AsLong 然后在欲播放时加入下语句即可 x=mciExecute 还可使用 Multimedia、MediaPlayerMediaPlayer 多媒体控件,以 Multimedia 控件为例:在 欲播放时加入下语句 WithMultimedia 控件名 .Filename="欲播放的多媒体文件" .command="Open" .command="Play" EndWith 并在 Multimedia
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安徽大学江淮学院《包装设计》2021-2022学年第一学期期末试卷
- 安徽大学《数据库应用基础》2022-2023学年第一学期期末试卷
- 安徽大学《软件质量保证与测试》2023-2024学年第一学期期末试卷
- 大班手表手工课课程设计
- 安徽大学《量子力学导论》2021-2022学年第一学期期末试卷
- 安徽大学《光学测量》2021-2022学年第一学期期末试卷
- 中国象棋软件课程设计
- 2024年度生物医药研发合作合同标的为新型抗生素
- 中华文化概况课程设计
- 压痕技术培训课程设计
- 孙子兵法-湖南大学中国大学mooc课后章节答案期末考试题库2023年
- 艺术概论PPT完整全套教学课件
- 《篮球三步上篮》说课PPT
- 织物的撕破强力的测试指标及方法
- 学习的联结理论
- 教练场地技术条件说明
- 城镇污水排入排水管网许可申请表3(完整资料)
- 收据(打印模板)
- 苏科版七年级上册期末数学几何证明与尺规作图训练
- GB/T 15394-1994多探针测试台通用技术条件
- 医疗质量(安全)不良事件管理考试试题及答案
评论
0/150
提交评论