问题补充说明:我要的是很带的那种 只要可以动 可以吃东西 可以死的那种 要初学者就好编的那种 多谢啦
'定义蛇的运动速度枚举值
PrivateEnumtpsSpeed
QUICKLY=0
SLOWLY=1
EndEnum
'定义蛇的运动方向枚举值
PrivateEnumtpsDirection
D_UP=38
D_DOWN=40
D_LEFT=37
D_RIGHT=39
EndEnum
'定义运动区域4个禁区的枚举值
PrivateEnumtpsForbiddenZone
FZ_TOP=30
FZ_BOTTOM=5330
FZ_LEFT=30
FZ_RIGHT=5360问答730
EndEnum
'定义蛇头及身体初始化数枚举厂克况烟世格强频值
PrivateEnumtpsSnake
SNAKEONE=1
SNAKETWO=2
SNAKE早且米THREE=3
SNAKEFOUR=4
EndEnum
'定义蛇宽度的常量
PrivateConstSNAKEWIDTHAsInteger=100
'该过程用于显示游戏句行信息
PrivateSubForm_Load()
***.Show
玉征深Me.lbl&App.Major&"."&App.Minor&"."&App.Revision&")"
Me.Caption=Me.lblTitle.Caption
***.Show1
EndSub
'该过程用于使窗体恢复原始大小
PrivateSubForm_Resize()
IfMe.WindowState<>1Then
边吗路肥虽并火香争刚达Me.Caption=""
Me.Height=6405'窗体高度为6405缇
跑香析亲露领盐管白造Me.Width=8535'窗体宽度为8535缇
Me.Left=(Screen.Width-Width)\2
台止着核快Me.Top=(Screen.Height-Height)\2
EndIf
EndSub
'该过程用于重新开始开始游戏
PrivateSubcmdGameStart_MouseDown(ButtonAsInteger,Sh小轻杆载裂消盐娘iftAsInte导这官序会祖速要降ger,XAsSingle,YAsSingle)
Beep
msg=MsgBox("您房秋官已便龙确认要重新开始游戏吗?",4+32,"BS贪食蛇")
Ifmsg=6Th己蒸enCallm_subGame会士海色目著多溶印Initialize
EndSub
'该过程用于暂停/运行游戏
PrivateSubchkPause_MouseDown(ButtonAsInteger,ShiftAsInteger黄球,XAsSing静排le,YAsSingle)
If早云植互比线饭超介度Me.chkPause.Ca轴剂呢题陈核始市基导叫ption="暂停游戏(&P)"Then
Me.tmrSnakeMove.Enabled=False
Me.tmrGameTime.Enabled=False
Me.picMoveArea.Enabled=False
Me.强目要送lblPauseLab.Visible=True
Me.chkPause.Caption="继续游戏(&R)"
Else
Me.tmrSnakeMove.Enabled=True
Me.tmrGameTime.Enabled=True
Me.picMoveArea.Enabled=True
Me.lblPauseLab.Visible=False
Me.chkPause.Caption="暂停游戏(&P)"
EndIf
EndSub
'该过程用于显示游戏规则
PrivateSubcmdGameRules_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Beep
MsgBox"BS贪食蛇:一个规则最简单的趣味游戏,您将用键盘"&Chr(13)&_
"上的4个方向键来控制蛇的运动方向。在运动过程中蛇"&Chr(13)&_
"不能后退,蛇的头部也不能接触到运动区域的边线以外"&Chr(13)&_
"和蛇自己的身体,否则就游戏失败。在吃掉随机出现的"&Chr(13)&_
"果子后,蛇的身体会变长,越长难度越大。祝您好运!!",0+64,"游戏规则"
EndSub
'该过程用于显示游戏开发信息
PrivateSubcmdAbout_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Beep
MsgBox"BS贪食蛇"&"(V-"&App.Major&"."&App.Minor&"版本)"&Chr(13)&Chr(13)&_
""&Chr(13)&Chr(13)&_
"由PigheadPrince设计制作"&Chr(13)&_
"CopyRight(C)2002,BestSoft.TCG",0,"关于本游戏"
EndSub
'该过程用于退出游戏
PrivateSubcmdExit_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Beep
msg=MsgBox("您要退出本游戏吗?",4+32,"BS贪食蛇")
SelectCasemsg
Case6
End
Case7
Me.chkWindowButton(2).Value=0
ExitSub
EndSelect
EndSub
'该过程用于拖动窗体_(点击图标)
PrivateSubimgWindowTop_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
ReleaseCapture
SendMessageMe.hwnd,WM_SYSCOMMAND,SC_MOVE,0
EndSub
'该共用过程用于处理窗体控制按钮组的相关操作_(锁定、最小化、退出)
PrivateSubchkWindowButton_MouseUp(IndexAsInteger,ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IfButton<>1ThenExitSub
SelectCaseIndex
Case0'锁定窗体
IfMe.chkWindowButton(0).Value=1Then
Me.imgWindowTop.BorderStyle=0
Me.imgWindowTop.Enabled=False
Else
Me.imgWindowTop.BorderStyle=1
Me.imgWindowTop.Enabled=True
EndIf
Case1'最小化
Me.WindowState=1
Me.chkWindowButton(1).Value=0
Me.Caption="BS贪食蛇—(V-"&App.Major&"."&App.Minor&"版本)"
Case2'退出
Beep
msg=MsgBox("您要退出本游戏吗?",4+32,"BS贪食蛇")
SelectCasemsg
Case6
End
Case7
Me.chkWindowButton(2).Value=0
ExitSub
EndSelect
EndSelect
EndSub
'该过程用于设置蛇运动速度的快慢
PrivateSubhsbGameSpeed_Change()
Me.tmrSnakeMove.Interval=Me.hsbGameSpeed.Value
EndSub
'该过程用于通过键盘的方向键改变蛇的运动方向
PrivateSubpicMoveArea_KeyDown(KeyCodeAsInteger,ShiftAsInteger)
SelectCaseg_intDirection
CaseD_UP
IfKeyCode=D_DOWNThenExitSub
CaseD_DOWN
IfKeyCode=D_UPThenExitSub
CaseD_LEFT
IfKeyCode=D_RIGHTThenExitSub
CaseD_RIGHT
IfKeyCode=D_LEFTThenExitSub
EndSelect
g_intDirection=KeyCode
EndSub
'该计时循环过程用于计算游戏耗费的秒数并显示
PrivateSubtmrGameTime_Timer()
g_lngGameTime=g_lngGameTime+1
Me.lblGameTime.Caption=g_lngGameTime&"秒"
EndSub
'该计时循环过程用于控制蛇的行动轨迹
PrivateSubtmrSnakeMove_Timer()
DimlngSnakeXAsLong,lngSnakeYAsLong,lngSnakeColorAsLong
DimlngPointXAsLong,lngPointYAsLong,lngPointColorAsLong
Randomize
Me.picMoveArea.SetFocus
Me.picMoveArea.Cls
'确认蛇头的运动方向并获取新的位置
SelectCaseg_intDirection
CaseD_UP'向上运动
g_udtSnake(SNAKEONE).Snake_CurX=g_udtSnake(SNAKEONE).Snake_OldX
g_udtSnake(SNAKEONE).Snake_CurY=g_udtSnake(SNAKEONE).Snake_OldY
g_udtSnake(SNAKEONE).Snake_CurY=g_udtSnake(SNAKEONE).Snake_CurY-SNAKEWIDTH
CaseD_DOWN'向下运动
g_udtSnake(SNAKEONE).Snake_CurX=g_udtSnake(SNAKEONE).Snake_OldX
g_udtSnake(SNAKEONE).Snake_CurY=g_udtSnake(SNAKEONE).Snake_OldY
g_udtSnake(SNAKEONE).Snake_CurY=g_udtSnake(SNAKEONE).Snake_CurY+SNAKEWIDTH
CaseD_LEFT'向左运动
g_udtSnake(SNAKEONE).Snake_CurX=g_udtSnake(SNAKEONE).Snake_OldX
g_udtSnake(SNAKEONE).Snake_CurX=g_udtSnake(SNAKEONE).Snake_CurX-SNAKEWIDTH
g_udtSnake(SNAKEONE).Snake_CurY=g_udtSnake(SNAKEONE).Snake_OldY
CaseD_RIGHT'向右运动
g_udtSnake(SNAKEONE).Snake_CurX=g_udtSnake(SNAKEONE).Snake_OldX
g_udtSnake(SNAKEONE).Snake_CurX=g_udtSnake(SNAKEONE).Snake_CurX+SNAKEWIDTH
g_udtSnake(SNAKEONE).Snake_CurY=g_udtSnake(SNAKEONE).Snake_OldY
EndSelect
'根据新的位置绘制蛇头
lngSnakeX=g_udtSnake(SNAKEONE).Snake_CurX
lngSnakeY=g_udtSnake(SNAKEONE).Snake_CurY
lngSnakeColor=g_udtSnake(SNAKEONE).Snake_Color
Me.picMoveArea.PSet(lngSnakeX,lngSnakeY),lngSnakeColor
'移动蛇身体其他部分的位置
Fori=2Tog_intSnakeLength
g_udtSnake(i).Snake_CurX=g_udtSnake(i-1).Snake_OldX
g_udtSnake(i).Snake_CurY=g_udtSnake(i-1).Snake_OldY
lngSnakeX=g_udtSnake(i).Snake_CurX
lngSnakeY=g_udtSnake(i).Snake_CurY
lngSnakeColor=g_udtSnake(i).Snake_Color
Me.picMoveArea.PSet(lngSnakeX,lngSnakeY),lngSnakeColor
Nexti
'更新蛇旧的坐标位置
Forj=1Tog_intSnakeLength
g_udtSnake(j).Snake_OldX=g_udtSnake(j).Snake_CurX
g_udtSnake(j).Snake_OldY=g_udtSnake(j).Snake_CurY
Nextj
'判断蛇在移动中是否到了禁区而导致游戏失败
Ifm_funMoveForbiddenZone(g_udtSnake(SNAKEONE).Snake_CurX,g_udtSnake(SNAKEONE).Snake_CurY)Then
Beep
MsgBox"您的蛇移动到了禁区,游戏失败!",0+16,"BS贪食蛇"
Me.tmrSnakeMove.Enabled=False
Me.tmrGameTime.Enabled=False
Me.picMoveArea.Visible=False
ExitSub
EndIf
'判断蛇在移动中是否碰到了自己的身体而导致游戏失败
Ifm_funTouchSnakeBody(g_udtSnake(SNAKEONE).Snake_CurX,g_udtSnake(SNAKEONE).Snake_CurY)Then
Beep
MsgBox"您的蛇在移动中碰到了自己的身体,游戏失败!",0+16,"BS贪食蛇"
Me.tmrSnakeMove.Enabled=False
Me.tmrGameTime.Enabled=False
Me.picMoveArea.Visible=False
ExitSub
EndIf
'判断蛇是否吃到了果子
Ifm_funEatPoint(g_udtSnake(SNAKEONE).Snake_CurX,g_udtSnake(SNAKEONE).Snake_CurY)Then
'累加玩家的得分并刷新得分显示
g_intPlayerScore=g_intPlayerScore+1
Me.lblYourScore.Caption=g_intPlayerScore&"分"
Callm_subAddSnake'加长蛇的身体
Callm_subGetPoint'获取下一个果子的位置和颜色
Else
'绘制果子
lngPointX=g_udtPoint.Point_X
lngPointY=g_udtPoint.Point_Y
lngPointColor=g_udtPoint.Point_Color
Me.picMoveArea.PSet(lngPointX,lngPointY),lngPointColor
EndIf
EndSub
'该私有子过程用于初始化游戏
PrivateSubm_subGameInitialize()
Eraseg_udtSnake'清空蛇的结构数组
g_intPlayerScore=0'清空玩家的得分
g_lngGameTime=0'清空游戏耗费的秒数
g_intDirection=D_DOWN'设定蛇的初始运动方向为下
g_intSnakeLength=4'设定蛇的初始长度
ReDimg_udtSnake(1Tog_intSnakeLength)'重新定义蛇的长度
'定义蛇头部的数据
Withg_udtSnake(SNAKEONE)
.Snake_OldX=530
.Snake_OldY=530
.Snake_Color=vbBlack
EndWith
'定义蛇身第2节的数据
Withg_udtSnake(SNAKETWO)
.Snake_OldX=530
.Snake_OldY=430
.Snake_Color=vbGreen
EndWith
'定义蛇身第3节的数据
Withg_udtSnake(SNAKETHREE)
.Snake_OldX=530
.Snake_OldY=330
.Snake_Color=vbYellow
EndWith
'定义蛇身第4节的数据
Withg_udtSnake(SNAKEFOUR)
.Snake_OldX=530
.Snake_OldY=230
.Snake_Color=vbRed
EndWith
Me.picMoveArea.Visible=True
Me.lblYourScore.Caption=g_intPlayerScore&"分"
Me.lblGameTime.Caption=g_lngGameTime&"秒"
Me.tmrSnakeMove.Interval=Me.hsbGameSpeed.Value
Me.tmrSnakeMove.Enabled=True
Me.tmrGameTime.Enabled=True
Callm_subGetPoint'获取第一个果子的位置和颜色
EndSub
'该私有子过程用于返回获取的果子的位置和颜色信息
PrivateSubm_subGetPoint()
DimlngRedValueAsLong,lngGreenValueAsLong,lngBlueValueAsLong
DimlngPointXAsLong,lngPointYAsLong,lngPointColorAsLong
'随机获取果子的颜色
lngRedValue=Int((255-0+1)*Rnd+0)
lngGreenValue=Int((255-0+1)*Rnd+0)
lngBlueValue=Int((255-0+1)*Rnd+0)
lngPointColor=RGB(lngRedValue,lngGreenValue,lngBlueValue)
'随机获取果子的位置
lngPointX=Int((FZ_LEFT-FZ_RIGHT+1)*Rnd+FZ_RIGHT)
lngPointY=Int((FZ_TOP-FZ_BOTTOM+1)*Rnd+FZ_BOTTOM)
Me.PSet(lngPointX,lngPointY),lngPointColor
'设置函数返回值
Withg_udtPoint
.Point_X=lngPointX
.Point_Y=lngPointY
.Point_Color=lngPointColor
EndWith
EndSub
'该私有子过程用于加长蛇的身体
PrivateSubm_subAddSnake()
DimudtSnakeTemp()AsSnake
DimlngSnakeXAsLong,lngSnakeYAsLong,lngSnakeColorAsLong
'备份蛇原先身体的数据并使蛇的身体加长
ReDimudtSnakeTemp(1Tog_intSnakeLength)
Fork=1Tog_intSnakeLength
WithudtSnakeTemp(k)
.Snake_CurX=g_udtSnake(k).Snake_CurX
.Snake_CurY=g_udtSnake(k).Snake_CurY
.Snake_OldX=g_udtSnake(k).Snake_OldX
.Snake_OldY=g_udtSnake(k).Snake_OldY
.Snake_Color=g_udtSnake(k).Snake_Color
EndWith
Nextk
g_intSnakeLength=g_intSnakeLength+1
ReDimg_udtSnake(g_intSnakeLength)
'将备份蛇身体的数据返回到加长的蛇身数组中
Forl=1Tog_intSnakeLength-1
Withg_udtSnake(l)
.Snake_CurX=udtSnakeTemp(l).Snake_CurX
.Snake_CurY=udtSnakeTemp(l).Snake_CurY
.Snake_OldX=udtSnakeTemp(l).Snake_OldX
.Snake_OldY=udtSnakeTemp(l).Snake_OldY
.Snake_Color=udtSnakeTemp(l).Snake_Color
EndWith
Nextl
'写入新加入的身体数据
SelectCaseg_intDirection
CaseD_UP
Withg_udtSnake(g_intSnakeLength)
.Snake_OldX=g_udtSnake(g_intSnakeLength-1).Snake_CurX+SNAKEWIDTH
.Snake_OldY=g_udtSnake(g_intSnakeLength-1).Snake_CurY
.Snake_Color=g_udtPoint.Point_Color
EndWith
CaseD_DOWN
Withg_udtSnake(g_intSnakeLength)
.Snake_OldX=g_udtSnake(g_intSnakeLength-1).Snake_CurX-SNAKEWIDTH
.Snake_OldY=g_udtSnake(g_intSnakeLength-1).Snake_CurY
.Snake_Color=g_udtPoint.Point_Color
EndWith
CaseD_LEFT
Withg_udtSnake(g_intSnakeLength)
.Snake_OldX=g_udtSnake(g_intSnakeLength-1).Snake_CurX
.Snake_OldY=g_udtSnake(g_intSnakeLength-1).Snake_CurY+SNAKEWIDTH
.Snake_Color=g_udtPoint.Point_Color
EndWith
CaseD_RIGHT
Withg_udtSnake(g_intSnakeLength)
.Snake_OldX=g_udtSnake(g_intSnakeLength-1).Snake_CurX
.Snake_OldY=g_udtSnake(g_intSnakeLength-1).Snake_CurY-SNAKEWIDTH
.Snake_Color=g_udtPoint.Point_Color
EndWith
EndSelect
lngSnakeX=g_udtSnake(g_intSnakeLength).Snake_CurX
lngSnakeY=g_udtSnake(g_intSnakeLength).Snake_CurY
lngSnakeColor=g_udtSnake(g_intSnakeLength).Snake_Color
Me.picMoveArea.PSet(lngSnakeX,lngSnakeY),lngSnakeColor
EndSub
'该自定义函数用于返回运动的蛇是否到达禁区而导致游戏失败
PrivateFunctionm_funMoveForbiddenZone(SnakeXAsLong,SnakeYAsLong)AsBoolean
If(SnakeX>=FZ_LEFTAndSnakeX<=FZ_RIGHT)And(SnakeY>=FZ_TOPAndSnakeY<=FZ_BOTTOM)Then
m_funMoveForbiddenZone=False
Else
m_funMoveForbiddenZone=True
EndIf
EndFunction
'该自定义函数用于返回运动的蛇是否碰到自己的身体而导致游戏失败
PrivateFunctionm_funTouchSnakeBody(SnakeXAsLong,SnakeYAsLong)AsBoolean
Form=2Tog_intSnakeLength
IfSnakeX=g_udtSnake(m).Snake_CurXAndSnakeY=g_udtSnake(m).Snake_CurYThen
m_funTouchSnakeBody=True
ExitFor
Else
m_funTouchSnakeBody=False
EndIf
Nextm
EndFunction
'该自定义函数用于返回运动的蛇是否吃到了果子
PrivateFunctionm_funEatPoint(SnakeXAsLong,SnakeYAsLong)AsBoolean
IfAbs(SnakeX-g_udtPoint.Point_X)<=SNAKEWIDTHAndAbs(SnakeY-g_udtPoint.Point_Y)<=SNAKEWIDTHThen
m_funEatPoint=True
Else
m_funEatPoint=False
EndIf
EndFunction
'(API函数调用过程_用以实现无标题窗体的拖动操作)---------------------------------
'RleaseCapture函数用以释放鼠标捕获
PublicDeclareFunctionReleaseCaptureLib"user32"()AsLong
'SendMessage函数用作向Windows发送移动窗体的消息
PublicDeclareFunctionSendMessageLib"user32"Alias"SendMessageA"(ByValhwndAs_
Long,ByValwMsgAsLong,ByValwParamAsLong,IParamAsAny)AsLong
PublicConstWM_SYSCOMMAND=&H112'声明向Windows发送消息的常量
PublicConstSC_MOVE=&HF012'声明控制移动窗体常量
'(游戏变量声明部分)-------------------------------------------------------------
'定义蛇的数据类型结构
PublicTypeSnake
Snake_OldXAsLong
Snake_OldYAsLong
Snake_CurXAsLong
Snake_CurYAsLong
Snake_ColorAsLong
EndType
'定义果子的数据类型结构
PublicTypePoint
Point_XAsLong
Point_YAsLong
Point_ColorAsLong
EndType
'定义蛇的动态数组
Publicg_udtSnake()AsSnake
'定义果子
Publicg_udtPointAsPoint
'定义蛇的长度
Publicg_intSnakeLengthAsInteger
'定义蛇的颜色
Publicg_lngSnakeColorAsLong
'定义蛇的运动方向
Publicg_intDirectionAsInteger
'定义玩家的得分
Publicg_intPlayerScoreAsInteger
'定义游戏耗费的秒数
Publicg_lngGameTimeAsLong
标签:胡冲,无倍,贪吃蛇