⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pong.frm

📁 vb课程设计:对对碰游戏 非常不错的游戏
💻 FRM
字号:
VERSION 5.00
Begin VB.Form Form1 
   BackColor       =   &H00000000&
   Caption         =   "对对碰1.0                                                  远征工作室"
   ClientHeight    =   7035
   ClientLeft      =   780
   ClientTop       =   1200
   ClientWidth     =   7380
   ForeColor       =   &H0011E8FD&
   Icon            =   "pong.frx":0000
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   Picture         =   "pong.frx":0902
   ScaleHeight     =   469
   ScaleMode       =   3  'Pixel
   ScaleWidth      =   492
   Begin VB.Label lblMsg 
      Appearance      =   0  'Flat
      AutoSize        =   -1  'True
      BackColor       =   &H00162332&
      BackStyle       =   0  'Transparent
      ForeColor       =   &H001DD9E2&
      Height          =   180
      Left            =   600
      TabIndex        =   5
      Top             =   2040
      Width           =   90
   End
   Begin VB.Image Image3 
      Height          =   510
      Left            =   3180
      Picture         =   "pong.frx":D7D7
      Top             =   6495
      Width           =   990
   End
   Begin VB.Label lblScore 
      BackStyle       =   0  'Transparent
      ForeColor       =   &H0011E8FD&
      Height          =   165
      Left            =   3270
      TabIndex        =   4
      Top             =   6750
      Width           =   810
   End
   Begin VB.Label lblLink 
      BackStyle       =   0  'Transparent
      ForeColor       =   &H0011E8FD&
      Height          =   165
      Left            =   3270
      TabIndex        =   3
      Top             =   6570
      Width           =   810
   End
   Begin VB.Label lblNextScore 
      Alignment       =   2  'Center
      BackStyle       =   0  'Transparent
      ForeColor       =   &H0011E8FD&
      Height          =   255
      Left            =   4890
      TabIndex        =   2
      Top             =   915
      Width           =   1605
   End
   Begin VB.Label lblNowScore 
      Alignment       =   2  'Center
      BackStyle       =   0  'Transparent
      ForeColor       =   &H0011E8FD&
      Height          =   255
      Left            =   915
      TabIndex        =   1
      Top             =   915
      Width           =   1590
   End
   Begin VB.Label lblLevel 
      Alignment       =   2  'Center
      BackStyle       =   0  'Transparent
      ForeColor       =   &H0011E8FD&
      Height          =   495
      Left            =   3300
      TabIndex        =   0
      Top             =   495
      Width           =   735
   End
   Begin VB.Image Image2 
      Height          =   480
      Index           =   0
      Left            =   60
      Picture         =   "pong.frx":E1EF
      Top             =   1380
      Visible         =   0   'False
      Width           =   480
   End
   Begin VB.Image Image1 
      Height          =   480
      Index           =   9
      Left            =   9120
      Picture         =   "pong.frx":E86B
      Top             =   6000
      Width           =   480
   End
   Begin VB.Image Image1 
      Height          =   480
      Index           =   8
      Left            =   9120
      Picture         =   "pong.frx":EF08
      Top             =   5400
      Width           =   480
   End
   Begin VB.Image Image1 
      Height          =   480
      Index           =   7
      Left            =   9120
      Picture         =   "pong.frx":F5B3
      Top             =   4800
      Width           =   480
   End
   Begin VB.Image Image1 
      Height          =   480
      Index           =   6
      Left            =   9120
      Picture         =   "pong.frx":FC2F
      Top             =   4200
      Width           =   480
   End
   Begin VB.Image Image1 
      Height          =   480
      Index           =   5
      Left            =   9120
      Picture         =   "pong.frx":102C9
      Top             =   3600
      Width           =   480
   End
   Begin VB.Image Image1 
      Height          =   480
      Index           =   4
      Left            =   9120
      Picture         =   "pong.frx":1093D
      Top             =   3000
      Width           =   480
   End
   Begin VB.Image Image1 
      Height          =   480
      Index           =   3
      Left            =   9120
      Picture         =   "pong.frx":10FE2
      Top             =   2400
      Width           =   480
   End
   Begin VB.Image Image1 
      Height          =   480
      Index           =   2
      Left            =   9120
      Picture         =   "pong.frx":11695
      Top             =   1800
      Width           =   480
   End
   Begin VB.Image Image1 
      Height          =   480
      Index           =   1
      Left            =   9120
      Picture         =   "pong.frx":11D19
      Top             =   1200
      Width           =   480
   End
   Begin VB.Image Image1 
      Height          =   480
      Index           =   0
      Left            =   9120
      Picture         =   "pong.frx":123BB
      Top             =   600
      Width           =   480
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim Level As Long
Dim Score As Long
Dim picNothing As Image
Dim pic(149) As Long
Dim sel(149) As Boolean
Dim selected As Boolean
Dim NowLink() As Long
Dim High(14) As Long
Dim Row As Long
Dim CountLink As Long

'开始游戏
Private Sub Image3_Click()
AutoRedraw = 0
Image3.Visible = False
init
End Sub

'规划窗体,物件数组从上往下,从左往右布置
Private Sub Form_Load()
Dim i As Long
'Show
'Image2(0).Visible = True
For i = 1 To 149
Load Image2(i)
Image2(i).Left = 4 + (i \ 10) * 32
Image2(i).Top = 92 + (i Mod 10) * 32
Next
showhelp
End Sub

'显示帮助
Sub showhelp()
   ' 创建信息。
   lblMsg = "                          【游戏简单说明】" & vbNewLine & vbNewLine _
     & vbNewLine & vbNewLine & "●鼠标点击任一物件,自动选中相连的同种物件.再次点击选中的物件,便可消除." _
     & vbNewLine & vbNewLine & "●聚集更多的物件一次性消除后可以得到更多的分数." _
     & vbNewLine & vbNewLine & "●消除时上部的物件会往下填补空缺." _
     & vbNewLine & vbNewLine & "●当某列全部为空时,右侧的物件会整体往左移动一列填补." _
     & vbNewLine & vbNewLine & "●当物件不再有相连时,会根据剩余个数考虑是否加分.剩余越少,加分越多." _
     & vbNewLine & vbNewLine & "●目前分数不少于过关分数时,会进入下一级别继续游戏,否则游戏结束重新开始."
End Sub

'初始化随机排列物件
Sub init()
Level = 0
Score = 0
lblNowScore = Score
NewLever
End Sub

'进入新关
Sub NewLever()
Dim i As Long
lblMsg.Visible = False
Level = Level + 1
Randomize
For i = 0 To 149
   pic(i) = Int(Rnd * 5)
   Image2(i) = Image1(pic(i))
   Image2(i).Visible = True
Next
Row = 14
For i = 0 To 14
High(i) = 9
Next
CountLink = 0
lblLevel = "级别" & vbCrLf & Level
lblNowScore = "目前得分:" & Format(Score, "@@@@@@")
lblNextScore = "过关分数:" & Format(Level * (Level + 4) * 500, "@@@@@@")
selected = False
End Sub

'选取物件并作相应处理
Private Sub Image2_Click(Index As Integer)
If pic(Index) = -1 Then Exit Sub
If selected Then
   If sel(Index) Then dele Else Reset Index
Else
   ReDim NowLink(0)
   CountLink = 0
   linked Index
   selected = True
End If
End Sub

'消除物件
Sub dele()
Dim i As Long
Dim j As Long
Dim k As Long
If CountLink = 1 Then Exit Sub
For i = 0 To UBound(NowLink)
   sel(NowLink(i)) = False
   pic(NowLink(i)) = -1
Next
For i = 0 To Row
   For j = 9 - High(i) To 9
      If pic(i * 10 + j) = -1 Then
         For k = j To 10 - High(i) Step -1
            pic(i * 10 + k) = pic(i * 10 + k - 1)
         Next
         pic(i * 10 + 9 - High(i)) = -1
         High(i) = High(i) - 1
      End If
   Next
Next
For i = Row To 0 Step -1
   If High(i) = -1 Then
      For j = i To Row - 1
         For k = 0 To 9
            pic(j * 10 + k) = pic(j * 10 + k + 10)
         Next
         High(j) = High(j + 1)
      Next
      For j = Row * 10 To Row * 10 + 9
         pic(j) = -1
      Next
      Row = Row - 1
   End If
Next
For i = 0 To 149
If pic(i) = -1 Then
   Image2(i) = picNothing
Else
   Image2(i) = Image1(pic(i))
End If
Next
Score = Score + CountLink * (CountLink + 2) * 5
lblNowScore = "目前得分:" & Format(Score, "@@@@@@")
selected = False
lblLink = "连接:"
lblScore = "分数:"
isLink
End Sub

'重新选取物件
Sub Reset(Index As Integer)
Dim i As Long
For i = 0 To UBound(NowLink)
   sel(NowLink(i)) = False
   Image2(NowLink(i)) = Image1(pic(NowLink(i)))
Next
ReDim NowLink(0)
CountLink = 0
linked Index
End Sub

'标记相连的物件
Sub linked(Index As Integer)
CountLink = CountLink + 1
sel(Index) = True
NowLink(UBound(NowLink)) = Index
Image2(Index) = Image1(pic(Index) + 5)
If Index \ 10 > 0 Then
   If pic(Index - 10) = pic(Index) And Not sel(Index - 10) Then
      ReDim Preserve NowLink(UBound(NowLink) + 1)
      linked Index - 10
   End If
End If
If Index \ 10 < 14 Then
   If pic(Index + 10) = pic(Index) And Not sel(Index + 10) Then
      ReDim Preserve NowLink(UBound(NowLink) + 1)
      linked Index + 10
   End If
End If
If Index Mod 10 > 0 Then
   If pic(Index - 1) = pic(Index) And Not sel(Index - 1) Then
      ReDim Preserve NowLink(UBound(NowLink) + 1)
      linked Index - 1
   End If
End If
If Index Mod 10 < 9 Then
   If pic(Index + 1) = pic(Index) And Not sel(Index + 1) Then
      ReDim Preserve NowLink(UBound(NowLink) + 1)
      linked Index + 1
   End If
End If
lblLink = "连接:" & Format(CountLink, "@@@@")
lblScore = "分数:" & Format(CountLink * (CountLink + 2) * 5 - IIf(CountLink > 1, 0, 15), "@@@@")
End Sub
 
'是否还有连接物件
Sub isLink()
Dim i As Long
Dim j As Long
Dim bonus As Long
Dim ys As Single
For i = 0 To Row
   For j = 9 - High(i) To 8
      If pic(i * 10 + j) = pic(i * 10 + j + 1) Then Exit Sub
   Next
Next
For i = 1 To Row Step 2
   For j = 9 - High(i) To 9
      If pic(i * 10 + j) = pic(i * 10 + j - 10) Then Exit Sub
      If pic(i * 10 + j) = pic(i * 10 + j + 10) Then Exit Sub
   Next
Next
j = 0
For i = 0 To Row
j = j + High(i) + 1
Next
bonus = IIf(j < 25, (25 - j) * (25 - j) * 25, 0)
lblMsg = "剩余个数:" & Format(j, "@@@") & "个" & "    加分:" & Format(bonus, "@@@@@") & "分"
lblMsg.FontSize = 16   ' 设置字体大小。
lblMsg.Left = (ScaleWidth - lblMsg.Width) / 2
lblMsg.BackStyle = 1
lblMsg.Visible = True
Score = Score + bonus
lblNowScore = "目前得分:" & Score
ys = Timer
Do While Timer - ys < 2
DoEvents
Loop
If Score < Level * (Level + 4) * 500 Then
   lblMsg = "游戏失败,再来吧!"
   lblMsg.Left = (ScaleWidth - lblMsg.Width) / 2
   ys = Timer
   Do While Timer - ys < 2
   DoEvents
   Loop
   init
Else
   lblMsg = "恭喜进入下一关!"
   lblMsg.Left = (ScaleWidth - lblMsg.Width) / 2
   ys = Timer
   Do While Timer - ys < 2
   DoEvents
   Loop
   NewLever
End If
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -