哪里错了?
fs87 2004-07-30 11:56:14 求四个格到各格沿纵横方向走最短路
Option Explicit
Dim v1 As Long, v2 As Long, v3 As Long, v4 As Long
Dim currentvn As Long
Dim wind As Long
Dim firespd As Long
Function spreadSpd(ByVal wind1 As Long, ByVal firespd1 As Long) As Long
spreadSpd = wind1 * firespd1
End Function
Function damage(ByVal t1 As Long) As Single
damage = CSng(t1) / 72
'damage = Sqr(CSng(t1) / 72)
End Function
Function sigma() As Single
Dim i As Long
Dim s As Single
Dim d As Single
Dim itX As Long, itY As Long
Dim v1x As Long, v1y As Long, v2x As Long, v2y As Long, v3x As Long, v3y As Long, v4x As Long, v4y As Long
s = 0
v1x = getX(v1)
v1y = getY(v1)
v2x = getX(v2)
v2y = getY(v2)
v3x = getX(v3)
v3y = getY(v3)
v4x = getX(v4)
v4y = getY(v4)
For i = 0 To 288
itX = getX(i)
itY = getY(i)
d = damage(min4(calcD(v1x, v1y, itX, itY), calcD(v2x, v2y, itX, itY), calcD(v3x, v3y, itX, itY), calcD(v4x, v4y, itX, itY)))
Debug.Print Str(i) & " " & Str(d)
s = s + d
Next
sigma = s
End Function
Function min4(ByVal value1 As Long, ByVal value2 As Long, ByVal value3 As Long, ByVal value4 As Long)
If value1 >= value2 And value1 >= value3 And value1 >= value4 Then min4 = value1
If value2 >= value1 And value2 >= value3 And value2 >= value4 Then min4 = value2
If value3 >= value1 And value3 >= value2 And value3 >= value4 Then min4 = value3
If value4 >= value1 And value4 >= value2 And value4 >= value3 Then min4 = value4
End Function
Function getX(ByVal idx As Long) As Long
getX = idx Mod 17
End Function
Function getY(ByVal idx As Long) As Long
getY = idx \ 17
End Function
Function calcD(ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long) As Long
calcD = Abs(x1 - x2) + Abs(y1 - y2)
End Function
Private Sub cP_Click(Index As Integer)
Dim inp As String
Dim markasn As Long
If cP(Index).Caption <> "" Then Exit Sub
If currentvn < 5 Then
If MsgBox("mark as v" & Str(currentvn) & " ?", vbOKCancel, "Confirm") = vbCancel Then Exit Sub
cP(Index).Caption = Str(currentvn)
markasn = currentvn
currentvn = currentvn + 1
Else
If cP(Index).Caption <> "" Then Exit Sub
inp = InputBox("mark as vn? Enter n(1-4)", "mark", "1")
If Not (inp = "1" Or inp = "2" Or inp = "3" Or inp = "4") Then Exit Sub
markasn = CLng(Val(inp))
cP(Index).Caption = inp
End If
Select Case markasn
Case 1
cP(v1).Caption = ""
v1 = Index
Case 2
cP(v2).Caption = ""
v2 = Index
Case 3
cP(v3).Caption = ""
v3 = Index
Case 4
cP(v4).Caption = ""
v4 = Index
End Select
End Sub
Private Sub Form_DblClick()
Dim i As Long
Dim choose As Long
choose = MsgBox("Yes for calc, No for Clear All", vbYesNoCancel, "Choose")
Select Case choose
Case vbYes
Text3 = Str(sigma())
Case vbNo
For i = 0 To 288
With cP(i)
.ToolTipText = Str(getX(i)) & "," & Str(getY(i))
.Caption = ""
.Left = getX(i) * 375
.Top = getY(i) * 375
End With
Next
currentvn = 1
End Select
End Sub
Private Sub Form_Load()
Dim i As Long
For i = 1 To 288
Load cP(i)
With cP(i)
.ToolTipText = Str(getX(i)) & "," & Str(getY(i))
.Left = getX(i) * 375
.Top = getY(i) * 375
.Visible = True
End With
Next
currentvn = 1
End Sub
Private Sub Text1_LostFocus()
If Not (Text1 = "1" Or Text1 = "2" Or Text1 = "3") Then
MsgBox "Must be 1 or 2 or 3", vbCritical, "Wrong value"
Text1.SetFocus
End If
End Sub
Private Sub Text2_LostFocus()
If Not (Text2 = "1" Or Text2 = "3") Then
MsgBox "Must be 1 or 3", vbCritical, "Wrong value"
Text2.SetFocus
End If
End Sub