本文收集整理关于用vb编写简单小游戏的相关议题,使用内容导航快速到达。
内容导航:
Q1:怎样用VB编写打字小游戏?
我2年前写的,有点幼稚。别见笑
VERSION 5.00
Begin VB.Form Form1
AutoRedraw=-1True
Caption="打字游戏 小游戏而已"
ClientHeight=4800
ClientLeft=60
ClientTop=750
ClientWidth=5610、LinkTopic="Form1"
ScaleHeight=4800
ScaleWidth=5610、StartUpPosition =1所有者中心
Begin VB.Timer Timer1
Left=0
Top=3600
End
Begin VB.Label Label1
Caption="Label1"
Height=735、Index=0
Left=1320
TabIndex=0
Top=600
Width=855、End
Begin VB.Menu MenuGame
Caption="数量 (&N)"
Index=0
End
Begin VB.Menu MenuGame
Caption="速度 (&P)"
Index=1、End
Begin VB.Menu MenuGame
Caption="重置 (&R)"
Index=2、End
Begin VB.Menu MenuGame
Caption="开始 (&S)"
Index=3、End
Begin VB.Menu MenuGame
Caption="输赢 (&W)"
Index=4、End
Begin VB.Menu MenuGame
Caption="帮助 (&H)"
Index=5、End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim StartPause As Boolean
Dim n As Integer
Dim Speed As Integer
Dim Down As Integer, Hit As Integer
Dim DownLost As Integer, HitWin As IntegerRem 自定义函数效率不高啊。。。
Private Sub Form_Initialize()
Speed = 10、DownLost = 100
HitWin = 100
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
Randomize
For Index = 0 To n
If Chr(KeyCode) = Label1(Index).Caption Then
With Label1(Index)
.Top = Me.ScaleTop
.Caption = Chr(Int(Rnd * 26) + 65)
.Left = Rnd * (Me.ScaleWidth - Label1(Index).Width)
.ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
End With
Hit = Hit + 1、Me.Caption = "打字游戏" & "掉落: " & Down & "命中: " & Hit
End If
Next Index
End Sub
Private Sub Form_Load()
On Error Resume Next
Timer1.Interval = 10、Timer1.Enabled = False
Randomize
With Label1(0)
.Top = Me.ScaleTop
.Caption = Chr(Int(Rnd * 26) + 65)
.ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
.Left = Rnd * (Me.ScaleWidth - Label1(0).Width)
.FontSize = 30
.BackStyle = 0
End With
For Index = 1 To n
Load Label1(Index)
With Label1(Index)
.Visible = True
.FontSize = 30
.BackStyle = 0
.Top = Me.ScaleTop
.Caption = Chr(Int(Rnd * 26) + 65)
.Left = Rnd * (Me.ScaleWidth - Label1(Index).Width)
.ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
End With
Next Index
End Sub
Private Sub MenuGame_Click(Index As Integer)
On Error Resume Next
Select Case Index
Case 0
n = Int(InputBox("输入数量,建议输入1至5,如果输入0或者按取消,将会去缺省值1", "输入数量") - 1)
Form_Load
StartPause = False: MenuGame(3).Caption = "开始 (&S)"
Case 1、Speed = Int(Val(InputBox("输入速度参数,建议5-20,如果输入0或按取消,将会取缺省值0,就是不会移动", "输入速度参数")))
Timer1.Enabled = False
StartPause = False: MenuGame(3).Caption = "开始 (&S)"
Case 2、Hit = 0
Down = 0
Form_Load
StartPause = False: MenuGame(3).Caption = "开始 (&S)"
Case 3、StartPause = Not StartPause
If StartPause = True Then
MenuGame(3).Caption = "暂停 (&P)"
Timer1.Enabled = True
ElseIf StartPause = False Then
MenuGame(3).Caption = "开始 (&S)"
Timer1.Enabled = False
End If
Case 4、HitWin = Int(InputBox("输入数字,当命中数等于该数时即为胜利。", "输入数字"))
DownLost = Int(InputBox("输入数字,当掉落数等于该数时即为胜利。", "输入数字"))
Case 5、MsgBox "目前没有编辑帮助"
End Select
End Sub
Private Sub Timer1_Timer()
Randomize
For Index = 0 To n
Label1(Index).Top = Label1(Index).Top + Speed
If Label1(Index).Top >= Me.ScaleHeight Then
With Label1(Index)
.Top = Me.ScaleTop
.Caption = Chr(Int(Rnd * 26) + 65)
.Left = Rnd * (Me.ScaleWidth - Label1(Index).Width)
.ForeColor = RGB(Rnd * 255, Rnd * 255, Rnd * 255)
End With
Down = Down + 1、Me.Caption = "打字游戏" & "掉落 " & Down & "命中 " & Hit
End If
Next Index
If Down >= DownLost Then MsgBox "你输啦!", vbOKOnly, "You lost": End
If Hit >= HitWin Then MsgBox "你赢啦!", vbOKOnly, "You Win": End
End Sub
Q2:求大神用vb帮忙编写一个简单的弹球小游戏
这个简单,就是
1:无偿懒得做;2:即使写了也可能是无视不采纳,早没积极性了。
Q3:用Vb做一个小游戏
定义蛇的运动速度枚举值
Private Enum tpsSpeed
QUICKLY = 0
SLOWLY = 1、End Enum
定义蛇的运动方向枚举值
Private Enum tpsDirection
D_UP = 38、D_DOWN = 40
D_LEFT = 37、D_RIGHT = 39、End Enum
定义运动区域4个禁区的枚举值
Private Enum tpsForbiddenZone
FZ_TOP = 30
FZ_BOTTOM = 5330
FZ_LEFT = 30
FZ_RIGHT = 5730
End Enum
定义蛇头及身体初始化数枚举值
Private Enum tpsSnake
SNAKEONE = 1、SNAKETWO = 2、SNAKETHREE = 3、SNAKEFOUR = 4、End Enum
定义蛇宽度的常量
Private Const SNAKEWIDTH As Integer = 100
该过程用于显示游戏信息
Private Sub Form_Load()
Me.Show
Me.lblTitle = "BS贪食蛇 — (版本 " & App.Major & "." & App.Minor & "." & App.Revision & ")"
Me.Caption = Me.lblTitle.Caption
frmSplash.Show 1、End Sub
该过程用于使窗体恢复原始大小
Private Sub Form_Resize()
If Me.WindowState <> 1 Then
Me.Caption = ""
Me.Height = 6405 窗体高度为 6405 缇
Me.Width = 8535 窗体宽度为 8535 缇
Me.Left = (Screen.Width - Width) \ 2、Me.Top = (Screen.Height - Height) \ 2、End If
End Sub
该过程用于重新开始开始游戏
Private Sub cmdGameStart_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Beep
msg = MsgBox("您确认要重新开始游戏吗?", 4 + 32, "BS贪食蛇")
If msg = 6 Then Call m_subGameInitialize
End Sub
该过程用于暂停/运行游戏
Private Sub chkPause_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Me.chkPause.Caption = "暂停游戏(&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)"
End If
End Sub
该过程用于显示游戏规则
Private Sub cmdGameRules_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Beep
MsgBox " BS贪食蛇:一个规则最简单的趣味游戏,您将用键盘" & Chr(13) & _
"上的4个方向键来控制蛇的运动方向。在运动过程中蛇" & Chr(13) & _
"不能后退,蛇的头部也不能接触到运动区域的边线以外" & Chr(13) & _
"和蛇自己的身体,否则就游戏失败。在吃掉随机出现的" & Chr(13) & _
"果子后,蛇的身体会变长,越长难度越大。祝您好运!!", 0 + 64, "游戏规则"
End Sub
该过程用于显示游戏开发信息
Private Sub cmdAbout_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
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, "关于本游戏"
End Sub
该过程用于退出游戏
Private Sub cmdExit_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Beep
msg = MsgBox("您要退出本游戏吗?", 4 + 32, "BS贪食蛇")
Select Case msg
Case 6、End
Case 7、Me.chkWindowButton(2).Value = https://www.yijitao.com/aldyjtapi/0
Exit Sub
End Select
End Sub
该过程用于拖动窗体_(点击图标)
Private Sub imgWindowTop_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
ReleaseCapture
SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MOVE, 0
End Sub
该共用过程用于处理窗体控制按钮组的相关操作_(锁定、最小化、退出)
Private Sub chkWindowButton_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button <> 1 Then Exit Sub
Select Case Index
Case 0 锁定窗体
If Me.chkWindowButton(0).Value = https://www.yijitao.com/aldyjtapi/1 Then
Me.imgWindowTop.BorderStyle = 0
Me.imgWindowTop.Enabled = False
Else
Me.imgWindowTop.BorderStyle = 1、Me.imgWindowTop.Enabled = True
End If
Case 1 最小化
Me.WindowState = 1、Me.chkWindowButton(1).Value = https://www.yijitao.com/aldyjtapi/0
Me.Caption = "BS贪食蛇 — (V-" & App.Major & "." & App.Minor & "版本)"
Case 2 退出
Beep
msg = MsgBox("您要退出本游戏吗?", 4 + 32, "BS贪食蛇")
Select Case msg
Case 6、End
Case 7、Me.chkWindowButton(2).Value = https://www.yijitao.com/aldyjtapi/0
Exit Sub
End Select
End Select
End Sub
该过程用于设置蛇运动速度的快慢
Private Sub hsbGameSpeed_Change()
Me.tmrSnakeMove.Interval = Me.hsbGameSpeed.Value
End Sub
该过程用于通过键盘的方向键改变蛇的运动方向
Private Sub picMoveArea_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case g_intDirection
Case D_UP
If KeyCode = D_DOWN Then Exit Sub
Case D_DOWN
If KeyCode = D_UP Then Exit Sub
Case D_LEFT
If KeyCode = D_RIGHT Then Exit Sub
Case D_RIGHT
If KeyCode = D_LEFT Then Exit Sub
End Select
g_intDirection = KeyCode
End Sub
该计时循环过程用于计算游戏耗费的秒数并显示
Private Sub tmrGameTime_Timer()
g_lngGameTime = g_lngGameTime + 1、Me.lblGameTime.Caption = g_lngGameTime & "秒"
End Sub
该计时循环过程用于控制蛇的行动轨迹
Private Sub tmrSnakeMove_Timer()
Dim lngSnakeX As Long, lngSnakeY As Long, lngSnakeColor As Long
Dim lngPointX As Long, lngPointY As Long, lngPointColor As Long
Randomize
Me.picMoveArea.SetFocus
Me.picMoveArea.Cls
确认蛇头的运动方向并获取新的位置
Select Case g_intDirection
Case D_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
Case D_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
Case D_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
Case 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).Snake_OldY
End Select
根据新的位置绘制蛇头
lngSnakeX = g_udtSnake(SNAKEONE).Snake_CurX
lngSnakeY = g_udtSnake(SNAKEONE).Snake_CurY
lngSnakeColor = g_udtSnake(SNAKEONE).Snake_Color
Me.picMoveArea.PSet (lngSnakeX, lngSnakeY), lngSnakeColor
移动蛇身体其他部分的位置
For i = 2 To g_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
Next i
更新蛇旧的坐标位置
For j = 1 To g_intSnakeLength
g_udtSnake(j).Snake_OldX = g_udtSnake(j).Snake_CurX
g_udtSnake(j).Snake_OldY = g_udtSnake(j).Snake_CurY
Next j
判断蛇在移动中是否到了禁区而导致游戏失败
If m_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
Exit Sub
End If
判断蛇在移动中是否碰到了自己的身体而导致游戏失败
If m_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
Exit Sub
End If
判断蛇是否吃到了果子
If m_funEatPoint(g_udtSnake(SNAKEONE).Snake_CurX, g_udtSnake(SNAKEONE).Snake_CurY) Then
累加玩家的得分并刷新得分显示
g_intPlayerScore = g_intPlayerScore + 1、Me.lblYourScore.Caption = g_intPlayerScore & "分"
Call m_subAddSnake 加长蛇的身体
Call m_subGetPoint 获取下一个果子的位置和颜色
Else
绘制果子
lngPointX = g_udtPoint.Point_X
lngPointY = g_udtPoint.Point_Y
lngPointColor = g_udtPoint.Point_Color
Me.picMoveArea.PSet (lngPointX, lngPointY), lngPointColor
End If
End Sub
该私有子过程用于初始化游戏
Private Sub m_subGameInitialize()
Erase g_udtSnake 清空蛇的结构数组
g_intPlayerScore = 0 清空玩家的得分
g_lngGameTime = 0 清空游戏耗费的秒数
g_intDirection = D_DOWN 设定蛇的初始运动方向为下
g_intSnakeLength = 4 设定蛇的初始长度
ReDim g_udtSnake(1 To g_intSnakeLength) 重新定义蛇的长度
定义蛇头部的数据
With g_udtSnake(SNAKEONE)
.Snake_OldX = 530
.Snake_OldY = 530
.Snake_Color = vbBlack
End With
定义蛇身第2节的数据
With g_udtSnake(SNAKETWO)
.Snake_OldX = 530
.Snake_OldY = 430
.Snake_Color = vbGreen
End With
定义蛇身第3节的数据
With g_udtSnake(SNAKETHREE)
.Snake_OldX = 530
.Snake_OldY = 330
.Snake_Color = vbYellow
End With
定义蛇身第4节的数据
With g_udtSnake(SNAKEFOUR)
.Snake_OldX = 530
.Snake_OldY = 230
.Snake_Color = vbRed
End With
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
Call m_subGetPoint 获取第一个果子的位置和颜色
End Sub
该私有子过程用于返回获取的果子的位置和颜色信息
Private Sub m_subGetPoint()
Dim lngRedValue As Long, lngGreenValue As Long, lngBlueValue As Long
Dim lngPointX As Long, lngPointY As Long, lngPointColor As Long
随机获取果子的颜色
lngRedValue = https://www.yijitao.com/aldyjtapi/Int((255 - 0 + 1) * Rnd + 0)
lngGreenValue = https://www.yijitao.com/aldyjtapi/Int((255 - 0 + 1) * Rnd + 0)
lngBlueValue = https://www.yijitao.com/aldyjtapi/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
设置函数返回值
With g_udtPoint
.Point_X = lngPointX
.Point_Y = lngPointY
.Point_Color = lngPointColor
End With
End Sub