這是設計思路2048游戲的代碼 請大神幫我翻譯下 就是說一下哪一部分是用來做什么的 分幾個模塊這樣子 謝謝
Option Explicit
Dim BoxValue(3, 3) As Integer '格子的數值
Dim Score As Long '得分
'按鍵
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
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()
Me.Width = 8000
Me.Height = 9000
Me.Caption = "2048"
Picture1.Move (Me.ScaleWidth - 6810) / 2, 1200, 6810, 6810
Picture1.Appearance = 0
Picture1.BackColor = RGB(128, 128, 128)
Picture1.FontSize = 32
Picture1.AutoRedraw = True
FontSize = Picture1.FontSize
Label1.AutoSize = True
Label1.Move Picture1.Left, Picture1.Left
Label1.FontSize = 24
Label1.BorderStyle = 0
Label1 = "得分:0"
Call NewGame
End Sub
'開始游戲
Private Sub NewGame()
Dim R As Integer, C As Integer
Dim L As Integer, T As Integer
For R = 1 To 4
For C = 1 To 4
L = (C - 1) * 110 + 10
T = (R - 1) * 110 + 10
Picture1.Line (L, T)-(L + 100, T + 100), RGB(200, 200, 200), BF
BoxValue(R - 1, C - 1) = 0
Next
Next
NewBox
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
Dim W As Integer
L = C * 110 + 10
T = R * 110 + 10
If N = 0 Then
Picture1.Line (L, T)-(L + 100, T + 100), RGB(200, 200, 200), BF
Else
Picture1.Line (L, T)-(L + 100, T + 100), BoxColor(N), BF
tmpStr = Trim(Str(N))
W = TextWidth("0") / Screen.TwipsPerPixelX
Picture1.CurrentX = L + (100 - TextWidth(tmpStr) / Screen.TwipsPerPixelX) / 2 - W
Picture1.CurrentY = T + (100 - TextHeight(tmpStr) / Screen.TwipsPerPixelY) / 2
Picture1.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 "哇塞!太厲害了!佩服佩服~", 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 "哇塞!太厲害了!佩服佩服~", 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
Label1 = "得分:" & Score
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 "無路可走了~~~下次好運!", 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 = &HC0E0FF
Case 4
BoxColor = &H80C0FF
Case 8
BoxColor = &H80FFFF
Case 16
BoxColor = &HC0FFC0
Case 32
BoxColor = &HFFFF80
Case 64
BoxColor = &HFFC0C0
Case 128
BoxColor = &HFF8080
Case 256
BoxColor = &HFFC0FF
Case 512
BoxColor = &HFF80FF
Case 1024
BoxColor = &HC0C0FF
Case 2048
BoxColor = &H8080FF
End Select
End Function
uj5u.com熱心網友回復:
在你看不懂的地方加一個斷點,然后程式跑起來,玩這個游戲,玩到某一個操作的時候觸發斷點,這時候單步繼續,觀察各個變數以及界面展示情況,基本上就能搞明白。看人家的代碼是最基本的既能。花點時間能學到很多東西。
uj5u.com熱心網友回復:
這不都有注釋了么,還有什么不懂的。uj5u.com熱心網友回復:
拿來主義,估計就沒想搞明白什么回事,只想著怎么改就是自己的了轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/31871.html
標籤:VB基礎類
