用VB玩小游戏的一个问题

定义蛇的移动速度的枚举值。

私有枚举速度

快速= 0

慢慢地= 1

结束枚举

定义蛇移动方向的枚举值

私有枚举tpsDirection

D_UP = 38

D_DOWN = 40

左= 37

右= 39

结束枚举

定义运动区域中四个禁区的枚举值。

私有枚举tpsForbiddenZone

FZ _托普= 30

FZ底部= 5330

FZ _左= 30

FZ右= 5730

结束枚举

定义蛇头和蛇身初始值设定项的枚举值。

私有枚举tpsSnake

SNAKEONE = 1

蛇二= 2

蛇三= 3

蛇四= 4

结束枚举

定义蛇的宽度的常数

私有Const snake width As Integer = 100

这个程序用来显示游戏信息。

私有子窗体_Load()

我。显示

Me.lblTitle = "BS Snake-(版本" &;App。专业与艺术。"."& ampApp。未成年人与未成年人。"."& ampApp。修订版& amp")"

我。Caption = Me.lblTitle.Caption

frmSplash。显示1

末端接头

此过程用于将表单恢复到其原始大小。

私有子窗体_Resize()

如果我。WindowState & lt& gt那么1

我。标题= " "

我。Height = 6405 '表单的高度是6405缇。

我。Width = 8535 '窗体的宽度是8535缇。

我。Left =(屏幕。宽度-宽度)\ 2

我。Top =(屏幕。高度-高度)\ 2

如果…就会结束

末端接头

这个过程用于重新启动游戏。

private Sub cmdGameStart _ MouseDown(Button为整数,Shift为整数,X为Single,Y为Single)

哔哔声

Msg = MsgBox("你确定要重启游戏吗?",4+32,《BS蛇》)

如果msg = 6,则调用m_subGameInitialize

末端接头

这个程序用于暂停/运行游戏。

private Sub chk pause _ MouseDown(Button为整数,Shift为整数,X为Single,Y为Single)

If Me.chkPause.Caption = "暂停& amp(&;p)“那么

Me.tmrSnakeMove.Enabled = False

Me.tmrGameTime.Enabled = False

Me.picMoveArea.Enabled = False

Me.lblPauseLab.Visible = True

Me.chkPause.Caption = "继续& amp(&;r)"

其他

Me.tmrSnakeMove.Enabled = True

Me.tmrGameTime.Enabled = True

Me.picMoveArea.Enabled = True

Me.lblPauseLab.Visible = False

Me.chkPause.Caption = "暂停& amp(&;p)"

如果…就会结束

末端接头

这个程序是用来显示游戏规则的。

private Sub cmd gamerules _ MouseDown(Button为整数,Shift为整数,X为Single,Y为Single)

哔哔声

一个有趣的游戏&用最简单的规则,你会使用键盘。Chr(13)_

屏幕上的四个方向键控制蛇的移动方向。运动过程中的蛇”&;Chr(13)_

“不能后退,蛇头不能摸到运动区域边线以外”&;Chr(13)_

“还有蛇自己的身体,否则游戏会失败。乱吃”&;Chr(13)_

“果实之后,蛇的身体会变长,越长越难缠。祝你好运!!",0+64,《游戏规则》

末端接头

这个过程用于显示游戏开发信息。

private Sub cmd about _ MouseDown(Button为整数,Shift为整数,X为Single,Y为Single)

哔哔声

MsgBox“BS蛇”&;”(V-& amp;App。专业与艺术。"."& ampApp。未成年人与未成年人。“版本)”&;Chr(13)Chr(13)_

”& ampChr(13)Chr(13)_

“PigheadPrince设计制作”&;Chr(13)_

"版权所有(c) 2002,bestsoft.tcg ",0,"关于此游戏"

末端接头

这个程序用于退出游戏。

private Sub cmdExit _ MouseDown(Button为整数,Shift为整数,X为Single,Y为Single)

哔哔声

Msg = MsgBox("你想退出这个游戏吗?",4+32,《BS蛇》)

选择案例消息

案例6

结束

案例7

Me.chkWindowButton(2)。值= 0

出口接头

结束选择

末端接头

本程序用于拖动表单_(点击图标)

private Sub imgWindowTop _ MouseDown(Button为整数,Shift为整数,X为Single,Y为Single)

释放捕获

发送消息Me.hwnd,WM_SYSCOMMAND,SC_MOVE,0

末端接头

这个通用过程用于处理表单控件按钮组的相关操作(锁定、最小化和退出)

private Sub chkWindowButton _ MouseUp(Index为整数,Button为整数,Shift为整数,X为Single,Y为Single)

If按钮& lt& gt1然后退出接头

选择案例索引

大小写为0的锁形式

If Me.chkWindowButton(0)。那么值= 1

Me.imgWindowTop.BorderStyle = 0

Me.imgWindowTop.Enabled = False

其他

me . imgwindowtop . border style = 1

Me.imgWindowTop.Enabled = True

如果…就会结束

案例1 '最小化

我。WindowState = 1

Me.chkWindowButton(1)。值= 0

我。Caption = "BS蛇-(v-" &;App。专业与艺术。"."& ampApp。未成年人与未成年人。"版本)"

案例2 '出口

哔哔声

Msg = MsgBox("你想退出这个游戏吗?",4+32,《BS蛇》)

选择案例消息

案例6

结束

案例7

Me.chkWindowButton(2)。值= 0

出口接头

结束选择

结束选择

末端接头

该程序用于设置蛇移动的速度。

私有Sub hsbGameSpeed_Change()

me . tmrsnakemove . interval = me . hsbgamespeed . value

末端接头

这个过程是用来通过键盘的方向键来改变蛇的移动方向。

private Sub picMoveArea _ KeyDown(key code为整数,Shift为整数)

选择案例g_intDirection

案例D_UP

如果KeyCode = D_DOWN,则退出Sub

案例D_DOWN

如果KeyCode = D_UP,则退出Sub

案例D _左

如果KeyCode = D_RIGHT,则退出Sub

案例D _右

如果KeyCode = D_LEFT,则退出Sub

结束选择

g_intDirection = KeyCode

末端接头

这个计时循环过程用于计算和显示游戏消耗的秒数。

私有Sub tmrGameTime_Timer()

g _ lngGameTime = g _ lngGameTime+1

me . lblgametime . caption = g _ lngGameTime & amp;"秒"

末端接头

这个定时循环过程用来控制蛇的动作轨迹。

私有Sub tmrSnakeMove_Timer()

Dim lngSnakeX一样长,lngSnakeY一样长,lngSnakeColor一样长

Dim lngPointX为Long,lngPointY为Long,lngPointColor为Long

使不规则化

Me.picMoveArea.SetFocus

Me.picMoveArea.Cls

确认蛇头的移动方向,获得新的位置。

选择案例g_intDirection

格D_UP上移。

g_udtSnake(SNAKEONE)。Snake_CurX = g_udtSnake(SNAKEONE)。Snake_OldX

g_udtSnake(SNAKEONE)。Snake_CurY = g_udtSnake(SNAKEONE)。蛇老了

g_udtSnake(SNAKEONE)。Snake_CurY = g_udtSnake(SNAKEONE)。蛇形宽度

案例D_DOWN向下移动。

g_udtSnake(SNAKEONE)。Snake_CurX = g_udtSnake(SNAKEONE)。Snake_OldX

g_udtSnake(SNAKEONE)。Snake_CurY = g_udtSnake(SNAKEONE)。蛇老了

g_udtSnake(SNAKEONE)。Snake_CurY = g_udtSnake(SNAKEONE)。Snake_CurY +蛇宽

案例D_LEFT '移动到左边。

g_udtSnake(SNAKEONE)。Snake_CurX = g_udtSnake(SNAKEONE)。Snake_OldX

g_udtSnake(SNAKEONE)。Snake_CurX = g_udtSnake(SNAKEONE)。Snake_CurX -蛇宽

g_udtSnake(SNAKEONE)。Snake_CurY = g_udtSnake(SNAKEONE)。蛇老了

“事例D_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)。蛇老了

结束选择

根据新的位置画蛇头。

lngSnakeX = g_udtSnake(SNAKEONE)。Snake_CurX

lngSnakeY = g_udtSnake(SNAKEONE)。Snake_CurY

lngSnakeColor = g _ udtSnake(snake one)。蛇的颜色

Me.picMoveArea.PSet (lngSnakeX,lngSnakeY),lngSnakeColor

移动蛇身体的其他部分。

对于i = 2到g_intSnakeLength

g_udtSnake(i)。snake _ CurX = g _ udtSnake(I-1)。Snake_OldX

g_udtSnake(i)。snake _ CurY = g _ udtSnake(I-1)。蛇老了

lngSnakeX = g_udtSnake(i)。Snake_CurX

lngSnakeY = g_udtSnake(i)。Snake_CurY

lngSnakeColor = g_udtSnake(i)。蛇的颜色

Me.picMoveArea.PSet (lngSnakeX,lngSnakeY),lngSnakeColor

接下来我

更新蛇的旧坐标位置

对于j = 1到g_intSnakeLength

g_udtSnake(j)。Snake_OldX = g_udtSnake(j)。Snake_CurX

g_udtSnake(j)。Snake_OldY = g_udtSnake(j)。Snake_CurY

下一个j

判断蛇在移动过程中是否在禁区内,导致游戏失败。

if m _ funMoveForbiddenZone(g _ udtSnake(snake one)。Snake_CurX,g_udtSnake(SNAKEONE)。Snake_CurY)那么

哔哔声

MsgBox“你的蛇移动到了禁区,游戏失败!”0+16,“BS蛇”

Me.tmrSnakeMove.Enabled = False

Me.tmrGameTime.Enabled = False

Me.picMoveArea.Visible = False

出口接头

如果…就会结束

判断蛇是否在运动中触碰到自己的身体导致游戏失败。

if m _ funTouchSnakeBody(g _ udtSnake(snake one)。Snake_CurX,g_udtSnake(SNAKEONE)。Snake_CurY)那么

哔哔声

MsgBox“你的蛇在移动的时候碰到了自己的身体,游戏失败!”0+16,“BS蛇”

Me.tmrSnakeMove.Enabled = False

Me.tmrGameTime.Enabled = False

Me.picMoveArea.Visible = False

出口接头

如果…就会结束

判断蛇是否吃了水果。

if m _ funEatPoint(g _ udtSnake(snake one)。Snake_CurX,g_udtSnake(SNAKEONE)。Snake_CurY)那么

累积玩家分数,刷新分数显示。

g _ intPlayerScore = g _ intPlayerScore+1

me . lblyourscore . caption = g _ intPlayerScore & amp;“分”

叫m_subAddSnake '加长蛇的身体。

调用m_subGetPoint '获取下一个水果的位置和颜色。

其他

画水果

lngPointX = g_udtPoint。X点

lngPointY = g_udtPoint。Y点

lngPointColor = g_udtPoint。点颜色

Me.picMoveArea.PSet (lngPointX,lngPointY),lngPointColor

如果…就会结束

末端接头

这个私有子进程用于初始化游戏。

私有Sub m_subGameInitialize()

' Erase g_udtSnake '清空蛇的结构数组。

' G_intPlayerScore = 0 '清除玩家的分数。

G_lngGameTime = 0 '秒清除游戏。

' G_intDirection = D_DOWN '设置蛇的初始移动方向为向下。

G_intSnakeLength = 4 '设置蛇的初始长度。

redim g _ udt snake(1 tog _ intsnakelength)'重新定义了蛇的长度。

定义蛇头的数据

用g_udtSnake(SNAKEONE)

。Snake_OldX = 530

。蛇老= 530

。Snake_Color = vbBlack

以…结尾

定义蛇体第2节的数据。

用g_udtSnake(SNAKETWO)

。Snake_OldX = 530

。Snake_OldY = 430

。Snake _ Color =格林

以…结尾

定义蛇体第3节的数据。

用g_udtSnake(SNAKETHREE)

。Snake_OldX = 530

。Snake_OldY = 330

。Snake _ Color =黄色

以…结尾

定义蛇体第4节的数据。

用g_udtSnake(SNAKEFOUR)

。Snake_OldX = 530

。Snake_OldY = 230

。Snake_Color = vbRed

以…结尾

Me.picMoveArea.Visible = True

me . lblyourscore . caption = g _ intPlayerScore & amp;“分”

me . lblgametime . caption = g _ lngGameTime & amp;"秒"

me . tmrsnakemove . interval = me . hsbgamespeed . value

Me.tmrSnakeMove.Enabled = True

Me.tmrGameTime.Enabled = True

调用m_subGetPoint '获取第一个水果的位置和颜色。

末端接头

这个私有子进程用于返回获得的水果的位置和颜色信息。

私有Sub m_subGetPoint()

Dim lngRedValue为长整型,lngGreenValue为长整型,lngBlueValue为长整型

Dim lngPointX为Long,lngPointY为Long,lngPointColor为Long

随机获取水果的颜色。

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 _左-FZ _右+1)* Rnd+FZ _右)

lngPointY = Int((FZ _顶-FZ _底+1)* Rnd+FZ _底)

我。PSet (lngPointX,lngPointY),lngPointColor

设置函数返回值

使用g_udtPoint

。Point_X = lngPointX

。Point_Y = lngPointY

。Point_Color = lngPointColor

以…结尾

末端接头

这个私有的子过程用于延长蛇的身体

私有Sub m_subAddSnake()

Dim udtSnakeTemp() As Snake

Dim lngSnakeX一样长,lngSnakeY一样长,lngSnakeColor一样长

备份蛇原身体的数据,加长蛇的身体

ReDim udtSnakeTemp(1到g_intSnakeLength)

对于k = 1到g_intSnakeLength

带有udtSnakeTemp(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_Color = g_udtSnake(k)。蛇的颜色

以…结尾

下一个k

g _ intSnakeLength = g _ intSnakeLength+1

ReDim g _ udtSnake(g _ intSnakeLength)

将备份蛇体的数据返回到加长蛇体数组中。

对于l = 1到g_intSnakeLength - 1

用g_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_Color = udtSnakeTemp(l)。蛇的颜色

以…结尾

下一个l

写入新添加的正文数据

选择案例g_intDirection

案例D_UP

with g _ 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。点颜色

以…结尾

案例D_DOWN

with g _ udtSnake(g _ intSnakeLength)

。snake _ OldX = g _ udtSnake(g _ intSnakeLength-1)。Snake_CurX -蛇宽

。snake _ OldY = g _ udtSnake(g _ intSnakeLength-1)。Snake_CurY

。Snake_Color = g_udtPoint。点颜色

以…结尾

案例D _左

with g _ udtSnake(g _ intSnakeLength)

。snake _ OldX = g _ udtSnake(g _ intSnakeLength-1)。Snake_CurX

。snake _ OldY = g _ udtSnake(g _ intSnakeLength-1)。Snake_CurY +蛇宽

。Snake_Color = g_udtPoint。点颜色

以…结尾