需用VB实现,代码山樱或如下
'定义蛇的运动速度枚举值
PrivateEnumtpsSpeed
QUICKLY=0
SLOWLY=1
EndEnum
'定义蛇的运动方向枚举值
PrivateEnumtpsDirection
D_UP=38
D_DOWN=40
D_LEFT=37
D_RIGHT=39
EndEnum
'定义运动区域4个禁区的枚举值
PrivateEnumtpsForbiddenZ色使生呼乎委端句one
FZ_TOP=30
FZ_BOTTOM=5330
FZ_LEFT=30
FZ_RIGHT=5730
EndEnum
'定义蛇头及身体初始化数枚举值
PrivateEnumtpsSnake
SNAKEONE=1
SNAKETWO=2
SNAKETHREE=3
SNAKEFOUR=4
EndEnum
'定义蛇宽度的常量
PrivateConstSNAKEWIDTHAsInteger=100
'该过程用于显示游戏信息
PrivateSubForm_Load()
***八思群降频曲包岩翻肥.show
***.lbl&***.major&"."&***.minor&"."&***.revision&")"
***.cap360问答tion=me.***.ca往冷创用征析岁菜ption
***.show1
EndSub
'该过程视根层补难讨地减现地用于使窗体恢复原始大小
PrivateSubForm_Resize()
If***才重根冷.windows密免吧清鱼主底tate<>1Then
**镇亲明案名各*.caption=""
***.height=6405'窗体高度为6405船握缇
***.width=8535'窗体宽度为8535缇
***.left=(***.width-Width)\2
***.top=(*现要步氢下露作谈**.height-Height)\2
EndIf
EndSub
'该过程用于逗伍重新开始开始游戏
Private击三输源调女乎附婷杆剂SubcmdGameStart_MouseDown(ButtonAsInteger,ShiftAsI细示看后测劳nteger,XAsSingle,YAsSingle)
Beep
msg=MsgBox("您确认要重新开始游戏吗?",4+32,"BS贪食蛇")
Ifmsg=6ThenCallm_subGameInitialize
EndSub
'该过程用于暂停/运行游戏
PrivateSubchkPause_Mo态交即却命兴照病文useDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Ifme.***.caption="暂停游戏(&P)"Then
me.***.e那食奏万候选答nabled=False
me.角毫决色入构检当降***.enabled=False
me.***.enabled=False
me眼原罪材子职态肉市煤.***.visib误受头室学领突le=True
me.***.caption="继续游戏颂凳(&R)"
Else
me.***.enabled=True
me.***.enabled=True
me.***.en喜际屋剧限abled=True
me.***.visible=False
me.***.caption="暂停游戏(&P)"
EndIf
EndSub
'该过程用于显示游戏规则
PrivateSubcmdGameRules_MouseDown(ButtonAs呢连内行联石意镇Integer,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-"&***.major&"."&***.minor&"版本)"&Chr(13)&Chr(13)&_
""&Chr(13)&Chr(13)&_
"由PigheadPrince设计制作"&Chr(13)&_
"CopyRight(C)2002,***.tcg",0,"关于本游戏"
EndSub
'该过程用于退出游戏
PrivateSubcmdExit_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Beep
msg=MsgBox("您要退出本游戏吗?",4+32,"BS贪食蛇")
SelectCasemsg
Case6
End
Case7
***.chkwindowbutton(2).Value=0
ExitSub
EndSelect
EndSub
'该过程用于拖动窗体_(点击图标)
PrivateSubimgWindowTop_MouseDown(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
ReleaseCapture
SendMessage***.hwnd,WM_SYSCOMMAND,SC_MOVE,0
EndSub
'该共用过程用于处理窗体控制按钮组的相关操作_(锁定、最小化、退出)
PrivateSubchkWindowButton_MouseUp(IndexAsInteger,ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
IfButton<>1ThenExitSub
SelectCaseIndex
Case0'锁定窗体
If***.chkwindowbutton(0).Value=1Then
me.***.borderstyle=0
me.***.enabled=False
Else
me.***.borderstyle=1
me.***.enabled=True
EndIf
Case1'最小化
***.windowstate=1
***.chkwindowbutton(1).Value=0
***.caption="BS贪食蛇—(V-"&***.major&"."&***.minor&"版本)"
Case2'退出
Beep
msg=MsgBox("您要退出本游戏吗?",4+32,"BS贪食蛇")
SelectCasemsg
Case6
End
Case7
***.chkwindowbutton(2).Value=0
ExitSub
EndSelect
EndSelect
EndSub
'该过程用于设置蛇运动速度的快慢
PrivateSubhsbGameSpeed_Change()
me.***.interval=me.***.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.***.caption=g_lngGameTime&"秒"
EndSub
'该计时循环过程用于控制蛇的行动轨迹
PrivateSubtmrSnakeMove_Timer()
DimlngSnakeXAsLong,lngSnakeYAsLong,lngSnakeColorAsLong
DimlngPointXAsLong,lngPointYAsLong,lngPointColorAsLong
Randomize
me.***.setfocus
me.***.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.***.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.***.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.***.enabled=False
me.***.enabled=False
me.***.visible=False
ExitSub
EndIf
'判断蛇在移动中是否碰到了自己的身体而导致游戏失败
Ifm_funTouchSnakeBody(g_udtSnake(SNAKEONE).Snake_CurX,g_udtSnake(SNAKEONE).Snake_CurY)Then
Beep
MsgBox"您的蛇在移动中碰到了自己的身体,游戏失败!",0+16,"BS贪食蛇"
me.***.enabled=False
me.***.enabled=False
me.***.visible=False
ExitSub
EndIf
'判断蛇是否吃到了果子
Ifm_funEatPoint(g_udtSnake(SNAKEONE).Snake_CurX,g_udtSnake(SNAKEONE).Snake_CurY)Then
'累加玩家的得分并刷新得分显示
g_intPlayerScore=g_intPlayerScore+1
me.***.caption=g_intPlayerScore&"分"
Callm_subAddSnake'加长蛇的身体
Callm_subGetPoint'获取下一个果子的位置和颜色
Else
'绘制果子
lngPointX=g_***.point_X
lngPointY=g_***.point_Y
lngPointColor=g_***.point_Color
me.***.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.***.visible=True
me.***.caption=g_intPlayerScore&"分"
me.***.caption=g_lngGameTime&"秒"
me.***.interval=me.***.value
me.***.enabled=True
me.***.enabled=True
Callm_subGetPoint'获取第一个果子的位置和颜色
EndSub
接下面的