这两天开始做俄罗斯方块,算是这几天来比较复杂的一个了,分了几步来实现
这里用VB实现方块的几种变形,用方向键控制方块的移动
Sub new_block(intType As Integer)
Select Case intType
Case 1
block(0).Left = block(0).Width * 0
block(0).Top = block(0).Height * 0
block(1).Left = block(0).Width * 1
block(1).Top = block(0).Height * 0
block(2).Left = block(0).Width * 2
block(2).Top = block(0).Height * 0
block(3).Left = block(0).Width * 3
block(3).Top = block(0).Height * 0
Case 2
block(0).Left = block(0).Width * 0
block(0).Top = block(0).Height * 0
block(1).Left = block(0).Width * 1
block(1).Top = block(0).Height * 0
block(2).Left = block(0).Width * 0
block(2).Top = block(0).Height * 1
block(3).Left = block(0).Width * 1
block(3).Top = block(0).Height * 1
Case 3
block(0).Left = block(0).Width * 1
block(0).Top = block(0).Height * 0
block(1).Left = block(0).Width * 0
block(1).Top = block(0).Height * 1
block(2).Left = block(0).Width * 1
block(2).Top = block(0).Height * 1
block(3).Left = block(0).Width * 2
block(3).Top = block(0).Height * 1
Case Else
block(0).Left = block(0).Width * 0
block(0).Top = block(0).Height * 0
block(1).Left = block(0).Width * 1
block(1).Top = block(0).Height * 0
block(2).Left = block(0).Width * 2
block(2).Top = block(0).Height * 0
block(3).Left = block(0).Width * 3
block(3).Top = block(0).Height * 0
End Select
Dim i As Integer
For i = 0 To 3
block(i).Visible = True
Next
End Sub
_________________________________________________
Sub block_move(fx As Integer)
Dim i As Integer
Dim x As Integer
Dim y As Integer
If can_move(fx) = False Then
Exit Sub
End If
For i = 0 To 3
x = block(i).Left / block(i).Width
y = block(i).Top / block(i).Height
Select Case fx
Case 1
x = x - 1
Case 2
y = y - 1
Case 3
x = x + 1
Case 4
y = y + 1
End Select
block(i).Left = block(i).Width * x
block(i).Top = block(i).Height * y
Next
End Sub
_________________________________________________
Private Sub Command1_Click()
If IsNumeric(Text1.Text) Then
new_block CInt(Text1.Text)
End If
End Sub
_________________________________________________
Private Sub file_KeyDown(KeyCode As Integer, Shift As Integer)
block_move KeyCode - 36
End Sub
_________________________________________________
Function can_move(fx As Integer) As Boolean
Dim i As Integer
Dim x As Integer
Dim y As Integer
can_move = True
For i = 0 To 3
x = block(i).Left / block(i).Width
y = block(i).Top / block(i).Height
Select Case fx
Case 1
x = x - 1
Case 2
y = y - 1
Case 3
x = x + 1
Case 4
y = y + 1
End Select
If x < 0 Or x > 9 Or y < 0 Or y > 14 Then
can_move = False
Exit Function
End If
Next
End Function