2024年2月8日发(作者:)
Vb制作小游戏
一、射击游戏
Option Explicit
Dim RandX As Single
Dim RandY As Single
Dim Score As Single
Dim Thisscore As Single
Dim Average As Single
Dim Shot As Integer
Dim Appear As Boolean
Dim Distance As Single
Private Sub Command1_Click()
d = True
d = True
If d = True Then
n = "暂停"
End If
d = True
End Sub
Private Sub Command2_Click()
If d = True Then
MsgBox "请先结束游戏", 48, "警告"
Else
End
End If
End Sub
Private Sub Command3_Click()
d = False
n = "继续"
d = Not d
If d = True Then
n = "暂停"
End If
End Sub
Private Sub Command4_Click()
d = False
d = False
d = True
n = "射击:"
n = "平均得分:"
n = "环数:"
n = "总分:"
d = False
n = "暂停"
End Sub
Private Sub Form_Load()
Appear = False
d = False
Thisscore = 0
Score = 0
Shot = 0
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Beep
Shot = Shot + 1
dth = 4
(X, Y), RGB(255, 0, 0)
Distance = Sqr((X - RandX) * (X - RandX) + (Y - RandY) * (Y - RandY))
If Appear And d Then
Thisscore = 5 - Int(Distance / 10)
If Thisscore <= 0 Then
Thisscore = 0
End If
Score = Score + Thisscore
Average = Int((Score / Shot) * 100) / 100
n = "射击:" + Str(Shot) + "发"
n = "平均得分:" & Format(Average, "0.00") & "环"
n = "环数:" + Str(Thisscore) + "环"
n = "总分:" + Str(Score) + "环"
End If
End Sub
Private Sub Timer1_Timer()
Dim i As Integer
Appear = Appear Xor True
RandX = 500 * Rnd()
RandY = 370 * Rnd()
If Appear Then
draw = True
dth = 1
yle = 0
For i = 10 To 50 Step 10
(RandX, RandY), i, RGB(0, 0, 255)
Next i
(RandX - 60, RandY)-(RandX + 60, RandY)
(RandX, RandY - 60)-(RandX, RandY + 60)
Else
End If
End Sub
二、打飞机游戏
从作一个小游戏开始
指针
本文从制作一个简单的小游戏开始,通过扩展这游戏,讲解VB多媒体,键盘控制与一些相关技术。这是个类似打飞机的游戏,运行界面见图。
图1
这个游戏程式包括下列对象:
Table1
1、操作对象Fight的键盘控制:
VB中的窗口键盘控制可使用Form_KeyUp(松开)与Form_KepDown(窗口按下)事件,其语法是:
PrivateSubForm_KeyUp
PrivateSubForm_KeyDown
KeyCode参数是返回所按键的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键其语法为ShiftAND2(可用预定义的vbCtrlMask常数替代)是否为真。
注意,当窗口的KeyPreview属性被设置为False时,Form_KeyUp、Form_KepDown事件将被忽略。
Fight对象的移动可通过修改LEFT属性设置对象内部的左边与窗口的左边之间的距离位置,Top属性设置对象的内顶部和窗口的顶边之间的距离来实现。
具体实现代码:
OptionExplicit
PrivateCtrldownAsBoolean‘CTRL键
PrivateSpeedAsInteger‘Fight对象的移动速度
在窗口的load事件中加入
view=True
Style=3‘将窗口设为固定对话框,不包含最大化和最小化按钮,不能改变尺寸。
窗口的Form_keydown事件包括.
PrivateSubForm_KeyDown
CtrlDown=‘判断CTRL键,用于加速
IfThen
Speed=80‘高速
Else
Speed=40‘低速
EndIf
SelectCaseKeyCode
CasevbKeyLeft注释:左键
IfThen
=-Speed
EndIf
CasevbKeyRight‘右键
IfThen‘Fight对象的右边缘不能超越窗口的右边缘
=+Speed
EndIf
EndSelect
EndSub
亦可使用VB针对控件的Object_KeyDown,Object_KeyUp事件,大同小异。注意,这种方式不能有效地识别同时按下多个按键,不能适应游戏的需求。
2、使用Timer时钟控件绘制运动着的图像
Timer可以有规律地隔一段时间执行一次代码。其间隔的时间由Interval属性设置,是一个整数,单位是毫秒既千分之一秒。执行的代码放置于Timer事件中。
目标Home的移动的策略不拘一格,本文给出一简单的随机变加速度算法。
PrivateSubTimerS_Timer
IfThen‘50%加或减速度,VB中rand总是正值
homespeed=homespeed+Rnd50
Else
homespeed=homespeed-Rnd50
EndIf
=+homespeed
IfThen注释:如目标右边缘小于窗口左边缘
=‘目标在窗口的右边出现
EndIf
IfThen‘如目标左边缘小于窗口右边缘
=-‘目标在窗口的左边出现
EndIf
EndSub
目标Home的移动的策略还可引入Fight对象的位置和速度的参数,实际上,目标Home与Fight对象的移动可以是二维的,只要修改其Top属性就可实现,此类游戏耐玩的关键在于其移动的策略,读者不妨自行定义一策略看看。
3、子弹的实现
在窗口的Load事件中加入
e=False注释:子弹不可见
HadShot=0‘命中次数
MaxShot=3‘摧毁目标的命中次数
在窗口的Form_KeyDown事件中加入
IfThen‘目标尚没摧毁
......
CasevbKeySpace
IfThen注释:发射子弹,后可加入声音,与减分
=+/2‘定位于Fight的正中
=‘定位于Fight的上方
e=True‘子弹可见
EndIf
.....
EndIf
EndSub
在TimerS的Timer事件中加入
PrivateSubTimerS_Timer
IfThen
IfThen‘子弹已发射
=-100
EndIf
IfThen‘子弹到达窗口顶端
e=False
Else
If)And_
>=)And_
+)And_
>=)And_
Then注释:子弹命中目标
e=False
HadShot=HadShot+1‘后可加入声音,与加分
EndIf
EndIf
.......
Else
注释:可加入声音
e=""‘显示摧毁后的图象
EndIf
EndSub
敌目标发射子弹的方式基本相同,此代码还可扩展至若干发子弹,不再熬诉。
4、加入多媒体特征
可使用API函数mciExecute实现多功能,语法为,先声明
PrivateDeclareFunctionmciExecuteLib""AsLong
然后在欲播放时加入下语句即可
x=mciExecute
还可使用Multimedia、MediaPlayerMediaPlayer多媒体控件,以Multimedia控件为例:在
欲播放时加入下语句
WithMultimedia控件名
.Filename="欲播放的多媒体文件"
.command="Open"
.command="Play"
EndWith
并在Multimedia控件名的Done事件中加入
Multimedia控件名.Command="Close"
Multimedia控件支持视频播放,可制作动画的启动封面,最简单的可在启动时隐藏其它控件,播放一视频文件,然后再关闭此视频文件,显示隐藏了的控件,有兴趣的话大可尝试一番。
此外本程式还包括一菜单,下设Play,Option,Exit三功能,比较简单,读者可自行完成。VB并不是制作游戏的最佳工具,制作这个简单的游戏仅仅是为了介绍VB一些基本的技术,希望读者能从扩展这个游戏中得到乐趣。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1707358647a1495813.html
评论列表(0条)