如何用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。点颜色
以…结尾
案例D _右
with g _ udtSnake(g _ intSnakeLength)
。snake _ OldX = g _ udtSnake(g _ intSnakeLength-1)。Snake_CurX
。snake _ OldY = g _ udtSnake(g _ intSnakeLength-1)。蛇形宽度
。Snake_Color = g_udtPoint。点颜色
以…结尾
结束选择
lngSnakeX = g _ udtSnake(g _ intSnakeLength)。Snake_CurX
lngSnakeY = g _ udtSnake(g _ intSnakeLength)。Snake_CurY
lngSnakeColor = g _ udtSnake(g _ intSnakeLength)。蛇的颜色
Me.picMoveArea.PSet (lngSnakeX,lngSnakeY),lngSnakeColor
末端接头
这个自定义函数用于返回移动的蛇是否到达禁区,游戏是否失败。
私有函数m _ funMoveForbiddenZone(SnakeX As Long,SnakeY As Long)为布尔值
如果(SnakeX & gt= FZ _左和SnakeX & lt= FZ _右)和(蛇& gt= FZ _托普和蛇& lt= FZ _底部)然后
m_funMoveForbiddenZone = False
其他
m_funMoveForbiddenZone = True
如果…就会结束
结束功能
这个自定义函数用于返回移动的蛇是否触碰到自己的身体,游戏失败。
私有函数m _ funTouchSnakeBody(SnakeX As Long,SnakeY As Long)为布尔值
对于m = 2到g_intSnakeLength
如果SnakeX = g_udtSnake(m)。Snake_CurX和SnakeY = g_udtSnake(m)。那么Snake_CurY
m_funTouchSnakeBody = True
为...退出
其他
m_funTouchSnakeBody = False
如果…就会结束
下一个m
结束功能
这个自定义函数用于返回移动的蛇是否吃了水果。
私有函数m_funEatPoint(SnakeX As Long,SnakeY As Long)为布尔值
如果Abs(SnakeX - g_udtPoint。point _ X)& lt;= SNAKEWIDTH和Abs(SnakeY - g_udtPoint。point _ Y)& lt;=那么蛇的宽度
m_funEatPoint = True
其他
m_funEatPoint = False
如果…就会结束
结束功能
(API函数调用过程_用于实现无标题表单的拖动操作)-。
RleaseCapture函数用于释放鼠标捕获。
公共声明函数ReleaseCapture Lib "user32 "()为Long
“SendMessage”函数用于发送消息,将表单移动到Windows。
公共声明函数SendMessage Lib“user 32”别名“SendMessage a”(ByVal hwnd As _
Long、ByVal wMsg一样长、ByVal wParam一样长、IParam一样长)
公共Const WM _ SYSCOMMAND = & amp“H112”声明了一个用于向Windows发送消息的常数。
公共Const SC _ MOVE = & amp“HF012”声明了控制移动窗体的常数。
(游戏变量声明部分)-。
定义snakes的数据类型结构。
公共型蛇
Snake_OldX一样长
蛇一样长
Snake_CurX一样长
Snake_CurY一样长
蛇_颜色一样长
结束类型
定义水果的数据类型结构。
公共类型点
点X一样长
点Y一样长
点颜色一样长
结束类型
定义一个动态蛇数组
Public g_udtSnake() As Snake
定义水果
公共g_udtPoint作为点
定义蛇的长度。
Public g_intSnakeLength为整数
定义蛇的颜色
Public g_lngSnakeColor As Long
定义蛇移动的方向
Public g_intDirection为整数
定义玩家的分数
Public g_intPlayerScore为整数
定义游戏花费的秒数。
Public g_lngGameTime As Long