vbvb编写一个射击游戏小游戏制作

基于VB6.0射击游戏的实现_Visual Basic教程_动态网站制作指南
基于VB6.0射击游戏的实现
来源:人气:4992
基于VB6.0射击的实现随着计算机技术的进步,计算机游戏也越来越普及,很多喜爱程序开发的读者朋友都向往游戏编程,但往往又觉得游戏编程序很复杂,高深莫测。诚然,象"帝国时代"、"反恐精英"这样的大型游戏需要写很复杂的程序来实现一些令人"头昏"的算法,需要熟悉DirectX开发知识。但是,对于一般的开发人员,完全可以利用所学的知识开发一些小的游戏,达到自娱自乐的目的。  本文介绍如何在VisualBasic6.0环境下开发射击小游戏,通过实现该小游戏可以帮助一些VisualBasic初学者加深对VisualBasic编程知识的理解,同时它也可以开拓初、中级开发爱好者的编程思路。该射击小游戏程序编译运行后的界面效果如图一所示:图一、射击游戏界面图  在射击游戏中,安排了两个角色,相互之间可以开***进行对射,同时为了丰富游戏的功能,游戏的场景中添加定时移动的仙人掌,为射击的双方角色提供保护功能。当其中一个角色中弹后,游戏终止,同时游戏人物角色的图标变更,表示角色死亡。为了实现上述的游戏,最初要作的是设计程序界面,按照游戏的需求,首先生成一个VB应用程序,在Form1上添加一个开始按钮btnStart,一个名为picDesert的Picture控件,该控件用来做为游戏的场景和其它控件的容器,在该控件上添加六个Image控件,分别用来显示游戏的角色、两个移动的仙人掌、分别向右、向左呼啸射击的子弹以及标志角色死亡的图标,它们的图象分别如下:游戏角色仙人掌呼啸的子弹角色击中标志  为了使程序中的仙人掌、游戏角色和射击时发射的子弹可以移动,需要向项目中添加定时器tmrMouseCnt和Timer1,在这两个定时响应函数中完成不同对象的移动功能。在游戏运行后,为了使用户可以通过键盘和鼠标来操作游戏的角色,实现射击的功能,需要添加鼠标消息和键盘消息处理函数。例如,对于角色1来说,可以通过上下键来移动,空格键来射击,对于角色2来说,鼠标左右键控制移动,双击实现射击。在射击过程中,要处理两个细节,一个细节是子弹与仙人掌及角色的区域重叠问题,当子弹与仙人掌重叠时让子弹隐藏起来,与角色重叠时表示击中目标,游戏结束。这里需要判断何时两个区域有重叠,解决这个问题的方法是使用API函数IntersectRect,用它来判断两个区域是否有重叠。另一个细节是子弹射击过程中需要添加"呼啸"的声音和击中目标时添加人物惨叫的声音,来达到逼真的效果,为了实现这个功能,需要向程序中添加语音文件(程序中的语音文件分别为:BANG.W***和OH!!.W***),然后通过API函数sndPlaySound来实现。另外,在对象移动的过程中,需要注意移动到边缘位置的情况处理。程序的具体实现代码如下:SHOOTOUT.BASOptionExplicit'DatatyperequiredbytheIntersectRectfunctionTypetRectLeftAsLongTopAsLongRightAsLongBottomAsLongEndType'WindowsAPIrectanglefunctionsDeclareFunctionIntersectRectLib"user32"(lpDestRectAstRect,lpSrc1RectAstRect,lpSrc2RectAstRect)AsLong'Functionsandconstantsusedtoplaysounds.DeclareFunctionsndPlaySoundLib"winmm.dll"Alias"sndPlaySoundA"(ByVallpszSoundNameAsString,ByValuFlagsAsLong)AsLong'ConstantusedwithsndPlaySoundfunctionGlobalConstSND_ASYNC=&H1'----------------------------------------------------------'SHOOTOUT.FRMOptionExplicit'KeyCodesforkeyboardaction.ConstKEY_SPACE=&H20ConstKEY_UP=&H26ConstKEY_DOWN=&H28'NumberofTwstomoveplayeroneachkeyormouseevent.ConstPlayerIncrement=45'Constantsformouseaction.ConstNO_BUTTON=0ConstLBUTTON=1ConstRBUTTON=2'Booleanthatindicatesifmousebuttonhasbeenesseddown.DimMouseButtonDownAsInteger'Numberofbulletseitherplayercanhaveinuseatonetime.ConstNUM_BULLETS=6'Booleansindicatingifplayer0orplayer1havejustfired.DimGunFired(0To1)AsInteger'Startthegamebyenablingthemaintimerandhidingthestartbutton.PrivateSubbtnStart_Click()Timer1.Enabled=TruebtnStart.Visible=FalseEndSub'CheckifthetwoImagesintersect,usingtheIntersectRectAPIcall.PrivateFunctionCollided(imgAAsImage,imgBAsImage)AsIntegerDimAAstRectDimBAstRectDimResultRectAstRect'CopyinformationintotRectstructureA.Left=imgA.LeftA.Top=imgA.TopB.Left=imgB.LeftB.Top=imgB.Top'CalculatetherightandbottomsofrectanglesneededbytheAPIcall.A.Right=A.Left imgA.Width-1A.Bottom=A.Top imgA.Height-1B.Right=B.Left imgB.Width-1B.Bottom=B.Top imgB.Height-1'IntersectRectwillonlyreturn0(false)ifthe'tworectanglesdoNOTintersect.Collided=IntersectRect(ResultRect,A,B)EndFunction'Double-clickingthemousefiresPlayer1'sgun.PrivateSubForm_DblClick()DimrcAsIntegerIfNotTimer1.EnabledThenExitSubGunFired(1)=Truerc=sndPlaySound(App.Path&"\BANG.W***",SND_ASYNC)EndSub'ThiseventhandlesPlayer0'sgameactionviathekeyboard.PrivateSubForm_KeyDown(KeyCodeAsInteger,ShiftAsInteger)DimrcAsIntegerStaticInKeyDownAsIntegerIfNotTimer1.EnabledThenExitSubIfInKeyDownThenExitSubInKeyDown=TrueDoEventsSelectCaseKeyCodeCaseKEY_UPimgPlayer(0).Top=imgPlayer(0).Top-PlayerIncrementIfimgPlayer(0).Top&0ThenimgPlayer(0).Top=0CaseKEY_SPACEGunFired(0)=Truerc=sndPlaySound(App.Path&"\BANG.W***",SND_ASYNC)CaseKEY_DOWNimgPlayer(0).Top=imgPlayer(0).Top PlayerIncrementIfimgPlayer(0).Top&(picDesert.ScaleHeight-imgPlayer(0).Height)ThenimgPlayer(0).Top=picDesert.ScaleHeight-imgPlayer(0).HeightEndIfEndSelectInKeyDown=FalseEndSubPrivateSubForm_Load()DimiAsIntegerTimer1.Interval=22Timer1.Enabled=FalseMouseButtonDown=NO_BUTTONFori=1ToNUM_BULLETS-1LoadimgLBullet(i)LoadimgRBullet(i)NextEndSubPrivateSubForm_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)MouseButtonDown=ButtonEndSubPrivateSubForm_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)MouseButtonDown=NO_BUTTONEndSub'Themaingametimer.PrivateSubTimer1_Timer()ConstCactusIncrement=30ConstBulletIncrement=300ConstNumCacti=2DimiAsIntegerDimrcAsInteger'Movetherovingcacti.Fori=0ToNumCacti-1imgCactus(i).Top=imgCactus(i).Top-CactusIncrementIfimgCactus(i).Top&-imgCactus(i).HeightThenimgCactus(i).Top=picDesert.HeightEndIfNext'Didplayer0fireabullet?IfGunFired(0)ThenGunFired(0)=False'Findare(invisible)bullet.Fori=0ToNUM_BULLETS-1IfNotimgLBullet(i).VisibleThenimgLBullet(i).Top=imgPlayer(0).TopimgLBullet(i).Left=imgPlayer(0).Left (imgPlayer(0).Width/2)imgLBullet(i).Visible=TrueExitForEndIfNextEndIf'Didplayer1fireabullet?IfGunFired(1)ThenGunFired(1)=False'Findaspare(invisible)bullet.Fori=0ToNUM_BULLETS-1IfNotimgRBullet(i).VisibleThenimgRBullet(i).Top=imgPlayer(1).TopimgRBullet(i).Left=imgPlayer(1).Left-(imgPlayer(1).Width/2)imgRBullet(i).Visible=TrueExitForEndIfNextEndIf'MoveVisibleBulletsFori=0ToNUM_BULLETS-1'Moveplayer0'sbullets.IfimgLBullet(i).VisibleThenimgLBullet(i).Left=imgLBullet(i).Left BulletIncrementIfCollided(imgLBullet(i),imgCactus(0))ThenimgLBullet(i).Visible=FalseElseIfCollided(imgLBullet(i),imgCactus(1))ThenimgLBullet(i).Visible=FalseElseIfimgLBullet(i).Left&picDesert.ScaleWidthThenimgLBullet(i).Visible=FalseElseIfCollided(imgLBullet(i),imgPlayer(1))ThenimgLBullet(i).Visible=FalseimgPlayer(1).Picture=imgRIP.PictureTimer1.Enabled=Falserc=sndPlaySound(App.Path&"\OH!!.W***",SND_ASYNC)EndIfEndIf'Moveplayer1'sbullets.IfimgRBullet(i).VisibleThenimgRBullet(i).Left=imgRBullet(i).Left-BulletIncrementIfCollided(imgRBullet(i),imgCactus(0))ThenimgRBullet(i).Visible=FalseElseIfCollided(imgRBullet(i),imgCactus(1))ThenimgRBullet(i).Visible=FalseElseIfimgRBullet(i).Left&-imgRBullet(i).WidthThenimgRBullet(i).Visible=FalseElseIfCollided(imgRBullet(i),imgPlayer(0))ThenimgRBullet(i).Visible=FalseimgPlayer(0).Picture=imgRIP.PictureTimer1.Enabled=Falserc=sndPlaySound(App.Path&"\OH!!.W***",SND_ASYNC)EndIfEndIfNextEndSub'HandlePlayer1'smovement(upanddown).PrivateSubtmrMouseCntl_Timer()IfNotTimer1.EnabledThenExitSubSelectCaseMouseButtonDownCaseRBUTTONimgPlayer(1).Top=imgPlayer(1).Top-PlayerIncrementIfimgPlayer(1).Top&0ThenimgPlayer(1).Top=0CaseLBUTTONimgPlayer(1).Top=imgPlayer(1).Top PlayerIncrementIfimgPlayer(1).Top&(picDesert.ScaleHeight-imgPlayer(1).Height)ThenimgPlayer(1).Top=picDesert.ScaleHeight-imgPlayer(1).HeightEndIfEndSelectEndSub  文章的上述内容对射击游戏中的各个实现功能进行了详细的介绍,读者朋友可以根据文章中的程序代码自己动手实验一下。本程序在Windows2000、VisualBasic6.0环境下编译通过,运行正常。->
优质网站模板vb小游戏制作,39490小游戏大全 -
相关搜索:
3199推荐:
相关游戏 18 个
显示方式:
3199小游戏为您搜索匹配了一些“vb小游戏制作”的小游戏,谢谢大家支持3199小游戏。
一个阴暗的迷宫,在走迷宫的同时你会遇到不同的人,与他们对话也许你会知道一些有用的事情。操作方法:方向键控制移动,回车键跳过对话。类别:&&疯狂的小汽车第二部,想象你开着车,然后迎面来了其他车。这可要命了,幸好你的车子能跳起来,不然肯定会让其他车撞翻的。类别:&&&介绍:消灭小毛球加强选关版上线了,关卡全开。又是一款带来全新关卡的加强版游戏,游戏中紫色小毛球满世界捣乱,而玩家要利用物理的方法,杀死小毛球,可以利用气球让它们升到空中,气球破灭后摔下来掉落到钉板上,消灭它们,不管用什么方法千万可别让它们逃跑了。
这对可爱的玩具情侣拥有许多衣服和表情,选择你最喜欢的搭配为它们拍一张照留恋吧。类别:&&&
汉堡形状的蛋糕你吃过吗?想不想自己尝试做一下呢?今天小编就教大家怎样制作这种好看又好吃的蛋糕。步骤很简单哦,大家快学起来吧!
类别:&&&&美丽的圣诞夜这对小情侣坐在屋顶等待着圣诞老人的礼物,呵呵...快来为她们打扮吧!操作方法:鼠标点击为他们换装吧。类别:&&&
情人节到了,看看小新是怎么追妹子吧。你还在犹豫送什么礼物好呢?学学小新吧。无敌版中,碰到恶狗和......&&
类别:&&&介绍:火柴人是有非常简单的线条构成的,可是他的表情动作却能很丰富,来一起打造你喜欢的火柴人。类别:&&
这位娇媚的小新娘今天要和她帅帅的小男友结婚了~大家来为她打扮漂亮吧~类别:&&&&小新开了一家超市,而且当上了收银员,不过小新的数学不知道学的怎么样,如果学的不好,给客人找错钱那就麻烦了!操作方法:客人结帐时头顶上有显示所买的东西和交的钱,3种食品在桌子上都有价格,点击小新按照差价给客人找钱然后点击画面下方的按钮就可以了.找错钱后会出现画面,点击冰淇淋是重新给客人找钱,点击小新的头像是继续给下一个客人找钱.类别:&&周末到喽,可以在家做好吃的美美的吃一顿喽!现在来跟妹妹学做烤鸡翅吧,既好吃也不会怕脂肪太多会发胖哦!操作方法:鼠标点击操作,每个步骤该放什么都会有提示!类别:&介绍:危险马戏团来了,这次的表演有小丑丢球、射飞刀、走钢丝等多种精采项目,还请了世界级的大力士来表演举重,不过钱不够的话就没办法看下一项表演哦。类别:&
蜡笔小新最近迷恋上了滑板,他在公路上正在练习自己的滑板技术,可惜他的同学老给他捣乱,蜡笔小新决定拿出溜溜球教训教训他的同学,大家能帮助蜡笔小新么?类别:&&&&&外星小怪大逃亡,一款非常不错的物理过关游戏。游戏中,外星小怪来到地球探险,没想到,地球到处都是机关陷阱,我们需要帮助外星小怪,合理的利用引力装置,收集所有的星星,顺利找到自己的飞船,逃离地球,喜欢的小伙伴们,快来一起试试看吧!类别:&&&&这对小情侣开了家茶餐厅,生意还是比较红火的那!男孩在厨房负责做美味的食物,女孩在外面招呼顾客。操作方法:用鼠标操作。一定要记住顾客点的什么,不然就不会加分喽,加油吧~类别:&&&介绍:一款别样玩法的有趣的消消看游戏,漂亮五彩的小方块,还会有可爱的小爱心出现,不过只能靠语气哦,赶快来挑战一下吧~!
对于初期练习打字的朋友来说,这是一个不错的游戏,不同难度可以供你挑战,早日练就一手流利的打字功力吧!类别:&&
可爱的甜甜圈,萌系指数爆表哦!喜欢吗?喜欢就来学学如何做吧!
网站为您提供在线小游戏、双人小游戏、小游戏大全等深受广大网友喜爱的小游戏
作品版权归作者所有 &合作:、、

参考资料

 

随机推荐