VB太空大战代码.docx
- 文档编号:12929734
- 上传时间:2023-06-09
- 格式:DOCX
- 页数:29
- 大小:18.82KB
VB太空大战代码.docx
《VB太空大战代码.docx》由会员分享,可在线阅读,更多相关《VB太空大战代码.docx(29页珍藏版)》请在冰点文库上搜索。
VB太空大战代码
'键盘检测函数
PrivateDeclareFunctionGetAsyncKeyStateLib"user32"(ByValvKeyAsLong)AsInteger
'CPU休息函数
PrivateDeclareSubSleepLib"kernel32"(ByValdwMillisecondsAsLong)
'画图函数
PrivateDeclareFunctionBitBltLib"gdi32"(ByValhDestDCAsLong,ByValXAsLong,ByValYAsLong,ByValnWidthAsLong,ByValnHeightAsLong,ByValhSrcDCAsLong,ByValxSrcAsLong,ByValySrcAsLong,ByValdwRopAsLong)AsLong
PrivateConstSRCCOPY=&HCC0020'(DWORD)dest=source
PrivateConstSRCPAINT=&HEE0086'(DWORD)dest=sourceORdest
PrivateConstSRCAND=&H8800C6'(DWORD)dest=sourceANDdest
'概念一个坐标结构体
PrivateTypePOINTAPI
XAsLong
YAsLong
EndType
PrivateTypeBullet'概念子弹的结构体
XAsInteger'X坐标
YAsInteger'Y坐标
WidthAsInteger'子弹宽
HeightAsInteger'子弹高
TypeAsString'子弹类型,要紧和图片挂钩,什么类型的子弹画什么图
StateAsString'状态
OwnerAsString'所有者
SpeedAsInteger'速度
HurtAsInteger'损害
EndType
PrivateTypeRocket'概念火箭的结构体
XAsInteger'X坐标
YAsInteger'Y坐标
WidthAsInteger'宽
HeightAsInteger'高
DirectAsString'方向
ActionAsString'行动
StateAsString'状态
LifeAsInteger'生命值
LevelAsInteger'品级
SpeedAsInteger'速度
FrTimeAsInteger'动画帧相对游戏帧的延时
FrameAsInteger'动画第几帧
FrameSpeedAsInteger'动画帧切换速度
EndType
PrivateTypeEnemy'概念仇敌的结构体
XAsInteger'X坐标
YAsInteger'Y坐标
TypeAsString'类型
StateAsString'状态
LifeAsInteger'生命值
SpeedAsInteger'速度
FrTimeAsInteger'动画帧相对游戏帧的延时
FrameAsInteger'动画第几帧
FrameSpeedAsInteger'动画帧切换速度
Rect_LeftUpAsPOINTAPI'概念碰撞矩形的左上角点
Rect_RightDownAsPOINTAPI'概念碰撞矩形的右下角点
EndType
PrivateTypeBoom'概念爆炸的结构体
XAsInteger'X坐标
YAsInteger'Y坐标
TypeAsString'爆炸类型,要紧和图片挂钩,什么类型的画什么爆炸
StateAsString'状态
FrameAsInteger'动画第几帧
FrTimeAsInteger'动画帧相对游戏帧的延时
FrameSpeedAsInteger'动画帧切换速度
EndType
ConstGAME_INIT=0
ConstGAME_MENU=1
ConstGAME_STARTING=2
ConstGAME_RUN=3
ConstGAME_RESTART=4
ConstGAME_EXIT=5
ConstBlltNum=99'100颗子弹
ConstBoomNum=49'50个爆炸成效
ConstEnemyNum=29'30个仇敌
Dimgame_stateAsInteger'游戏的状态
DimerrorAsInteger'错误
DimsYAsInteger'space的y坐标
DimmRocketAsRocket'概念一个火箭
DimShootIntervalAsInteger'概念火箭子弹距离
DimShootLockAsBoolean'概念发射锁
DimBllt(BlltNum)AsBullet'概念BlltNum颗子弹
DimmBoom(BoomNum)AsBoom'概念50个爆炸
DimmEnemy(EnemyNum)AsEnemy'概念30个仇敌
DimEnemyNAsInteger'仇敌显现的数量
PrivateSubStart()
DoWhilegame_state<>GAME_EXIT
SelectCasegame_state
CaseIs=GAME_INIT
Init
game_state=GAME_MENU
CaseIs=GAME_MENU
Menu
game_state=GAME_STARTING
CaseIs=GAME_STARTING
Setup_For_Run'游戏设置
game_state=GAME_RUN'游戏开始
CaseIs=GAME_RUN
Clear'清场
Get_Input'获取输入
Do_Logic
Render_Frame
Wait
CaseIs=GAME_RESTART
Fixup
game_state=GAME_MENU
CaseIs=GAME_EXIT
Release_And_Cleanup
error=0
EndSelect
DoEvents
Loop
EndSub
PrivateSubInit()
EndSub
PrivateSubMenu()
EndSub
PrivateSubSetup_For_Run()
'背景太空的初始画图位置
sY=1782
'创建火箭
WithmRocket
'火箭初始的起始位置
.X=/2-15
.Y=/2
'火箭的生命值
.Life=2
'火箭初始速度
.Speed=2
'火箭动画切换速度
.FrameSpeed=5
'火箭品级初始为1
.Level=3
'火箭的宽和高
.Width=29
.Height=64
.State="active"
EndWith
'火箭发射子弹的初始距离
ShootInterval=40
EndSub
PrivateSubClear()
EndSub
PrivateSubGet_Input()
If(GetAsyncKeyState(vbKeyUp)<>0)Then="up"'按键上
If(GetAsyncKeyState(vbKeyDown)<>0)Then="down"'按键下
If(GetAsyncKeyState(vbKeyLeft)<>0)Then="left"'按键左
If(GetAsyncKeyState(vbKeyRight)<>0)Then="right"'按键右
If(GetAsyncKeyState(vbKeyUp)<>0)And(GetAsyncKeyState(vbKeyLeft)<>0)Then="left_up"'按键左上
If(GetAsyncKeyState(vbKeyUp)<>0)And(GetAsyncKeyState(vbKeyRight)<>0)Then="right_up"'按键右上
If(GetAsyncKeyState(vbKeyDown)<>0)And(GetAsyncKeyState(vbKeyLeft)<>0)Then="left_down"'按键左下
If(GetAsyncKeyState(vbKeyDown)<>0)And(GetAsyncKeyState(vbKeyRight)<>0)Then="right_down"'按键右下
If(GetAsyncKeyState(vbKeySpace)<>0)Then="shoot"'按键空格
'=GetAsyncKeyState(vbKeySpace)
EndSub
PrivateSubDo_Logic()
'计算地图的转动切换
sY=sY-1
IfsY<0ThensY=1782
'随机创建些仇敌
Create_Enemy
'计算火箭位移
Calc_Rocket_Move
'创建火箭发射的子弹
Create_Rocket_Bullet
'计算仇敌位移(包括是不是与火箭发生碰撞)
Calc_Enemy_Move
'计算子弹的位移(包括是不是与火箭或仇敌发生碰撞)
Calc_Bullet_Move
'计算动画帧(包括火箭、仇敌、爆炸)
Calc_Frame_Play
EndSub
PrivateSubRender_Frame()
'画太空图
BitBlt,0,0,600,600,,0,sY-600,SRCCOPY
BitBlt,0,-sY,600,601,,0,1782-601,SRCCOPY
'画子弹
DimiAsInteger
Fori=0ToBlltNum
WithBllt(i)
If.State="active"Then
IfLeft(.Type,3)="Lv1"OrLeft(.Type,3)="Lv2"Then
BitBlt,.X,.Y,8,12,,0,0,SRCAND
BitBlt,.X,.Y,8,12,,0,12,SRCPAINT
ElseIfLeft(.Type,3)="Lv3"Then
If.Type=""Then
BitBlt,.X,.Y,8,8,,8,0,SRCAND
BitBlt,.X,.Y,8,8,,8,8,SRCPAINT
ElseIf.Type=""Then
BitBlt,.X,.Y,8,12,,0,0,SRCAND
BitBlt,.X,.Y,8,12,,0,12,SRCPAINT
ElseIf.Type=""Then
BitBlt,.X,.Y,8,12,,0,0,SRCAND
BitBlt,.X,.Y,8,12,,0,12,SRCPAINT
ElseIf.Type=""Then
BitBlt,.X,.Y,8,8,,8,0,SRCAND
BitBlt,.X,.Y,8,8,,8,8,SRCPAINT
EndIf
EndIf
EndIf
EndWith
Next
'画火箭
WithmRocket
If.State="active"Then
If.Frame=1Then
BitBlt,.X,.Y,29,64,,0,0,SRCAND
BitBlt,.X,.Y,29,64,,0,64,SRCPAINT
ElseIf.Frame=2Then
BitBlt,.X,.Y,29,64,,29,0,SRCAND
BitBlt,.X,.Y,29,64,,29,64,SRCPAINT
ElseIf.Frame=3Then
BitBlt,.X,.Y,29,64,,58,0,SRCAND
BitBlt,.X,.Y,29,64,,58,64,SRCPAINT
ElseIf.Frame=4Then
BitBlt,.X,.Y,29,64,,87,0,SRCAND
BitBlt,.X,.Y,29,64,,87,64,SRCPAINT
EndIf
EndIf
EndWith
'画仇敌
Fori=0ToEnemyNum
WithmEnemy(i)
If.State="active"Then
If.Type="e1"Then
If.Frame=1Then
BitBlt,.X,.Y,32,50,,0,0,SRCAND
BitBlt,.X,.Y,32,50,,0,50,SRCPAINT
ElseIf.Frame=2Then
BitBlt,.X,.Y,32,50,,32,0,SRCAND
BitBlt,.X,.Y,32,50,,32,50,SRCPAINT
EndIf
EndIf
EndIf
EndWith
Next
'画爆炸
Fori=0ToBoomNum
WithmBoom(i)
If.State="active"Then
If.Frame=1Then
BitBlt,.X,.Y,64,64,,0,0,SRCAND
BitBlt,.X,.Y,64,64,,0,64,SRCPAINT
ElseIf.Frame=2Then
BitBlt,.X,.Y,64,64,,64,0,SRCAND
BitBlt,.X,.Y,64,64,,64,64,SRCPAINT
ElseIf.Frame=3Then
BitBlt,.X,.Y,64,64,,128,0,SRCAND
BitBlt,.X,.Y,64,64,,128,64,SRCPAINT
ElseIf.Frame=4Then
BitBlt,.X,.Y,64,64,,192,0,SRCAND
BitBlt,.X,.Y,64,64,,192,64,SRCPAINT
ElseIf.Frame=5Then
BitBlt,.X,.Y,64,64,,256,0,SRCAND
BitBlt,.X,.Y,64,64,,256,64,SRCPAINT
ElseIf.Frame=6Then
BitBlt,.X,.Y,64,64,,320,0,SRCAND
BitBlt,.X,.Y,64,64,,320,64,SRCPAINT
ElseIf.Frame=7Then
BitBlt,.X,.Y,64,64,,384,0,SRCAND
BitBlt,.X,.Y,64,64,,384,64,SRCPAINT
EndIf
EndIf
EndWith
Next
EndSub
PrivateSubWait()
Sleep10
EndSub
PrivateSubFixup()
EndSub
PrivateSubRelease_And_Cleanup()
EndSub
PrivateSubForm_Activate()
game_state=GAME_INIT
Start
EndSub
PrivateSubForm_Unload(CancelAsInteger)
game_state=GAME_EXIT
EndSub
'创建仇敌进程
PrivateSubCreate_Enemy()
DimeX,i,nAsInteger
DimMaxNumAsInteger'仇敌最大显现的个数
MaxNum=20
IfEnemyN Randomize Fori=0ToEnemyNum '创建仇敌 eX=Int(Rnd*560) WithmEnemy(i) If.State=""Then .Type="e1" .Speed=2 .Life=1 .State="active" .X=eX .Y=-100 .FrameSpeed=5 .=.X .=.Y EnemyN=EnemyN+1 EndIf EndWith IfEnemyN=MaxNumThenExitFor Next EndIf EndSub '计算火箭位移 PrivateSubCalc_Rocket_Move() WithmRocket If.State="active"Then If.Direct="up"Then'上 If.Y>=.SpeedThen.Y=.Y-.Speed ElseIf.Direct="down"Then'下 If.Y<=600-.Speed-64Then.Y=.Y+.Speed ElseIf.Direct="left"Then'左 If.X>=.SpeedThen.X=.X-.Speed ElseIf.Direct="right"Then'右 If.X<=600-.Speed-29Then.X=.X+.Speed ElseIf.Direct="left_up"Then'左上 If.X>=.SpeedThen.X=.X-.Speed*2/3 If.Y>=.SpeedThen.Y=.Y-.Speed*2/3 ElseIf.Direct="right_up"Then'右上 If.X<=600-.Speed-29Then.X=.X+.Speed*2/3 If.Y>=.SpeedThen.Y=.Y-.Speed*2/3 ElseIf.Direct="left_down"Then'左下 If.X>=.SpeedThen.X=.X-.Speed*2/3 If.Y<=600-.Speed-64Then.Y=.Y+.Speed*2/3 ElseIf.Direct="right_down"Then'右下 If.X<=600-.Speed-29Then.X=.X+.Speed*2/3 If.Y<=600-.Speed-64Then.Y=.Y+.Speed*2/3 EndIf EndIf '避免持续位移,方向清空 .Direct="" EndWith EndSub '火箭发射子弹的进程 PrivateSubCreate_Rocket_Bullet() '若是Rocketshoot了,就创建一颗子弹 Dimi,j,kAsInteger DimnBlltAsInteger'概念子弹个数 DimnnAsInteger'子弹创建个数计数 If="shoot"AndShootLock=TrueAnd="active"Then'必需抵达距离时刻,而且火箭若是活着的时候才能创建新的子弹 If=1Then'品级1子弹 nBllt=1 Fori=0ToBlltNum WithBllt(i) If.Owner=""Then .Owner="rocket" .State="active" .Type="Lv1" .X=+14-4'初始子弹在火箭的正上方 .Y=-12 .Height=12 .Width=8 .Speed=4 .Hurt=1 nn=nn+1 Ifnn=nBlltThenExitFor EndIf EndWith Next ElseIf=2Then'品级2子弹 nBllt=2 Fori=0ToBlltNum WithBllt(i) If.Owner=""Then .Owner="rocket" .State="active" .Type="Lv2."&Trim(Str(nn+1)) If.Type=""Then .X=+10-4'第一颗子弹在火箭的上方 .Y=-12 ElseIf.Type=""Then .X=+20-4'第二颗子弹在火箭的上方 .Y=-12 EndIf .Height=12 .Width=4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 太空 大战 代码