版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年热敷元件项目可行性研究报告
- 2026陕西西安市长安区村镇建设管理站公益性岗位招聘8人备考题库附答案详解(培优a卷)
- 2026年光伏组件项目可行性研究报告
- 2026福建福州市志愿者联合会专职工作人员(劳务派遣)招聘3人备考题库含答案详解(典型题)
- 2026湖北武汉东风咨询有限公司招聘2人备考题库含答案详解(培优b卷)
- 2026重庆大学机械与运载工程学院郑玲教授研究团队博士后招聘备考题库含答案详解ab卷
- 2026江苏连云港市灌云万邦人力资源有限公司招聘10人备考题库完整参考答案详解
- 2026湖北武汉市第五医院招聘备考题库带答案详解(能力提升)
- 2026江西赣州市赣县区融启文化传媒有限公司面向社会招聘管理人员1人备考题库附答案详解(能力提升)
- 2026福建福州商贸职业中专学校招聘教师5人备考题库及一套答案详解
- 情境教学在初中数学教学中的应用研究
- 国家教育事业发展“十五五”规划纲要
- 宁夏的伊斯兰教派与门宦
- 昆虫生态学 第三章种群生态学课件
- 2025年自考00009政治经济学财经类04月真题试卷及答案
- SAP-CO-PC-生产成本核算配置与操作
- 唐河县泌阳凹陷郭桥天然碱矿产资源开采与生态修复方案
- 恐龙无处不有(2024年山东泰安中考语文现代文阅读试题)
- 中考数学专项复习:一次函数、反比例函数、二次函数的图象共存问题(重点突围)(解析版)
- 中学学生社团教师工作手册(完整)
- AQ 1064-2008 煤矿用防爆柴油机无轨胶轮车安全使用规范(正式版)
评论
0/150
提交评论