2048是比较流行的一款数字游戏,每次可以选择上下左右其中一个方向去滑动,每滑动一次,所有的数字方块都会往滑动的方向靠拢外,系统也会在空白的地方乱数出现一个数字方块,相同数字的方块在靠拢、相撞时会相加。不断的叠加最终拼凑出2048这个数字就算成功。
根据Gabriele Cirulli大神的源代码和参考网上大神的源码制作了这个VB版的2048。
好像从开始玩到现在从来都没有玩到过2048,(好吧,我的游戏技术不好),但是有了源代码...4096都不是梦,悄悄地改一个变量积分就刷刷的。
基于大量的函数制作,颜色用了VB的填充,因为不会dll动态数据库的使用,所有没有声音,没有精美的背景。
游戏玩法很简单:
上下左右移动键盘即可,点击New Game开始新一轮的游戏。
游戏代码:
Option Explicit
Dim BoxValue(3, 3) As Integer '格子的数量
Dim Score As Long '得分
Dim fWidth As Single
Dim mLeft As Integer, mTop As Integer
Dim mSize As Integer
'按键部分
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
scorel.Caption = "Score:" & Score
KeyPreview = True
Select Case KeyCode
Case vbKeyLeft
Call MoveBox(1)
Case vbKeyRight
Call MoveBox(2)
Case vbKeyUp
Call MoveBox(3)
Case vbKeyDown
Call MoveBox(4)
'Case vbKeySpace
' Call NewGame 按下空格新建游戏
End Select
End Sub
Private Sub Form_Load()
KeyPreview = True
Me.Width = 7000
Me.Height = 8000
Me.Caption = "2048"
Me.KeyPreview = True
Me.AutoRedraw = True
Me.ScaleMode = 3
Me.FontSize = 32
fWidth = TextWidth("0")
mSize = 450
mLeft = (Me.ScaleWidth - mSize) / 2
mTop = (Me.ScaleHeight - mSize - mLeft)
Call NewGame
End Sub
'开始游戏
Private Sub NewGame()
Dim R As Integer, C As Integer
Line (mLeft, mTop)-(mLeft + 450, mTop + 450), RGB(128, 128, 128), BF
Line (mLeft + 1, mTop + 1)-(Me.ScaleWidth - mLeft, Me.ScaleHeight - mLeft - 1), RGB(40, 40, 40), B
For R = 0 To 3
For C = 0 To 3
DrawBox 0, R, C
Next
Next
Score = 0
Call NewBox
Call NewBox
End Sub
'画出格子
Private Sub DrawBox(ByVal N As Integer, ByVal R As Integer, ByVal C As Integer)
Dim L As Integer, T As Integer
Dim tmpStr As String
L = C * 110 + 10 + mLeft
T = R * 110 + 10 + mTop
If N = 0 Then
Line (L + 1, T + 1)-(L + 102, T + 102), RGB(100, 100, 100), BF
Line (L, T)-(L + 100, T + 100), RGB(203, 192, 177), BF
Else
Line (L, T)-(L + 100, T + 100), BoxColor(N), BF
Line (L + 2, T + 2)-(L + 99, T + 99), RGB(100, 100, 100), B
Line (L + 1, T + 1)-(L + 98, T + 98), RGB(216, 216, 216), B
tmpStr = Trim(Str(N))
CurrentX = L + (100 - TextWidth(tmpStr)) / 2 - fWidth
CurrentY = T + (100 - TextHeight(tmpStr)) / 2
Print N
End If
BoxValue(R, C) = N
End Sub
'移动格子
Private Sub MoveBox(ByVal Fx As Integer)
Dim B As Integer, N As Integer, S As Integer
Dim R As Integer, C As Integer, K As Integer
Dim bMove As Boolean
If Fx < 3 Then '左右移动
If Fx = 1 Then
B = 1: N = 3: S = 1
Else
B = 2: N = 0: S = -1
End If
For R = 0 To 3
K = IIf(Fx = 1, 0, 3)
For C = B To N Step S
If BoxValue(R, C) > 0 Then
If (BoxValue(R, C) = BoxValue(R, K)) Then
DrawBox BoxValue(R, C) * 2, R, K
DrawBox 0, R, C
Score = Score + BoxValue(R, K)
If BoxValue(R, K) = 2048 Then
MsgBox "You Win!", vbInformation
End If
bMove = True
Else
If BoxValue(R, K) > 0 Then
K = K + S
If K <> C Then
DrawBox BoxValue(R, C), R, K
DrawBox 0, R, C
bMove = True
End If
Else
DrawBox BoxValue(R, C), R, K
DrawBox 0, R, C
bMove = True
End If
End If
End If
Next C
Next R
Else '上下移动
If Fx = 3 Then
B = 1: N = 3: S = 1
Else
B = 2: N = 0: S = -1
End If
For C = 0 To 3
K = IIf(Fx = 3, 0, 3)
For R = B To N Step S
If BoxValue(R, C) > 0 Then
If BoxValue(R, C) = BoxValue(K, C) Then
DrawBox BoxValue(R, C) * 2, K, C
DrawBox 0, R, C
Score = Score + BoxValue(K, C)
If BoxValue(R, K) = 2048 Then
MsgBox "You Win!", vbInformation
End If
bMove = True
Else
If BoxValue(K, C) > 0 Then
K = K + S
If K <> R Then
DrawBox BoxValue(R, C), K, C
DrawBox 0, R, C
bMove = True
End If
Else
DrawBox BoxValue(R, C), K, C
DrawBox 0, R, C
bMove = True
End If
End If
End If
Next R
Next C
End If
If bMove Then
' Call PrintScore
Call NewBox
' 检查死局
For R = 0 To 3
For C = 0 To 3
If BoxValue(R, C) = 0 Then Exit Sub
If R < 3 Then If BoxValue(R, C) = BoxValue(R + 1, C) Then Exit Sub
If C < 3 Then If BoxValue(R, C) = BoxValue(R, C + 1) Then Exit Sub
Next
Next
MsgBox "Game Over!", vbInformation
Call NewGame
End If
End Sub
'产生新方格
Private Sub NewBox()
Dim R As Integer, C As Integer
Randomize
R = Int(Rnd * 4)
C = Int(Rnd * 4)
Do While BoxValue(R, C) > 0
R = Int(Rnd * 4)
C = Int(Rnd * 4)
Loop
BoxValue(R, C) = 2
DrawBox 2, R, C
End Sub
'方格颜色
Private Function BoxColor(ByVal N As Integer) As Long
Select Case N
Case 2
BoxColor = &H80FFFF
Case 4
BoxColor = &H80C0FF
Case 8
BoxColor = &H8080FF
Case 16
BoxColor = &HFFFF&
Case 32
BoxColor = &H80FF&
Case 64
BoxColor = &H40C0&
Case 128
BoxColor = &HFF00FF
Case 256
BoxColor = &HFF8080
Case 512
BoxColor = &HC000&
Case 1024
BoxColor = &H808000
Case 2048
BoxColor = &HFF&
End Select
End Function
Private Sub newgamel_Click()
Call NewGame
End Sub
点击下载
密码:t54s
@ Mayuko