Option Explicit
Dim i As Byte, II As Byte, PP As Byte
Dim Tmp As String
Public Sub JS_Move1()
Dim KK As Boolean
'S_x = i: S_y = II '起点 '都是以左侧为起点
'横向 20 个,纵向 15 个
Next_x = S_x: Next_y = S_y '初始的坐标
i = 0: PP = 0
Dim ForkWay As Byte 'Fork way 叉道
SaveWay = 0 '记录有分道扬镖的点 '分支号记帐器
'//*_ 开头 Save_Map(S_x , S_y)
Move_XY(0, 0) = (S_x & "," & S_y)
On Error Resume Next
Start_0:
Tmp_x = Next_x: Tmp_y = Next_y
If Next_x < 0 Or Next_y < 0 Then GoTo Start_1
If Next_x > 19 Or Next_y > 14 Then GoTo Start_1
ForkWay = 0 '初始化记数器
If Tmp_x > 0 Then
If Save_Map(Tmp_x - 1, Tmp_y) = True Then
ForkWay = ForkWay + 1 '目标判断 左 '有通路
Else
Save_Map(Tmp_x - 1, Tmp_y) = False
End If '------------------
End If
If Tmp_y > 0 Then
If Save_Map(Tmp_x, Tmp_y - 1) = True Then
ForkWay = ForkWay + 1 '目标判断 上 '有通路
Else
Save_Map(Tmp_x, Tmp_y - 1) = False
End If '-------------------
End If
If Tmp_x < 19 Then
If Save_Map(Tmp_x + 1, Tmp_y) = True Then
ForkWay = ForkWay + 1 '目标判断 右 '有通路
Else
Save_Map(Tmp_x + 1, Tmp_y) = False
End If '------------------
End If
If Tmp_y < 14 Then
If Save_Map(Tmp_x, Tmp_y + 1) = True Then
ForkWay = ForkWay + 1 '目标判断 下 '有通路
Else
Save_Map(Tmp_x, Tmp_y + 1) = False
End If '-----------------------------------------------
End If
KK = False
If ForkWay > 1 Then
For II = 0 To 255
If Save_ForkWay(II) = (Tmp_x & "," & Tmp_y) Then KK = True
Next II
If KK = False Then
Save_ForkWay(SaveWay) = Tmp_x & "," & Tmp_y '是有 记录 叉道 坐标
Move_XY(SaveWay, PP) = Tmp_x & "," & Tmp_y
SaveWay = SaveWay + 1 '多个分支
PP = 0
Move_XY(SaveWay, PP) = Tmp_x & "," & Tmp_y
End If
ElseIf ForkWay = 0 Then
GoTo Start_1
End If '记完了接着走
'--------------------------------------
'无通路
Dim CurrentColor As Byte
Dim Current As String
Current = ""
sRnd_O:
Randomize
CurrentColor = Int((4 * Rnd) + 1)
If Len(Current) = 4 Then GoTo Start_1
If CurrentColor = 1 Then
If InStr(1, Current, "L") > 0 Then GoTo sRnd_O
GoTo sRnd_L
ElseIf CurrentColor = 2 Then
If InStr(1, Current, "R") > 0 Then GoTo sRnd_O
GoTo sRnd_R
ElseIf CurrentColor = 3 Then
If InStr(1, Current, "U") > 0 Then GoTo sRnd_O
GoTo sRnd_U
ElseIf CurrentColor = 4 Then
If InStr(1, Current, "D") > 0 Then GoTo sRnd_O
GoTo sRnd_D
End If
'下一个位,是否通行
'
sRnd_L:
Current = "L" & Current
If Save_Map(Tmp_x - 1, Tmp_y) = True Then '左
Next_x = Tmp_x - 1: Next_y = Tmp_y
Save_Map(Tmp_x, Tmp_y) = False
Save_Map(Tmp_x - 1, Next_y) = False
Move_XY(SaveWay, PP) = Next_x & "," & Next_y
PP = PP + 1
'frmGoTo.PaintPicture frmGoTo.Image5, Next_x * 32, Next_y * 32
If Next_x = D_x And Next_y = D_y Then Exit Sub
GoTo Start_0
End If
GoTo sRnd_O
sRnd_U:
Current = "U" & Current
If Save_Map(Tmp_x, Tmp_y - 1) = True Then '上
Next_x = Tmp_x: Next_y = Tmp_y - 1
Save_Map(Tmp_x, Tmp_y) = False
Save_Map(Next_x, Next_y) = False
Move_XY(SaveWay, PP) = Next_x & "," & Next_y
PP = PP + 1
'frmGoTo.PaintPicture frmGoTo.Image5, Next_x * 32, Next_y * 32
If Next_x = D_x And Next_y = D_y Then Exit Sub
GoTo Start_0
End If
GoTo sRnd_O
sRnd_R:
Current = "R" & Current
If Save_Map(Tmp_x + 1, Tmp_y) = True Then '右
Next_x = Tmp_x + 1: Next_y = Tmp_y
Save_Map(Tmp_x, Tmp_y) = False
Save_Map(Next_x, Next_y) = False
Move_XY(SaveWay, PP) = Next_x & "," & Next_y
PP = PP + 1
'frmGoTo.PaintPicture frmGoTo.Image5, Next_x * 32, Next_y * 32
If Next_x = D_x And Next_y = D_y Then Exit Sub
GoTo Start_0
End If
GoTo sRnd_O
sRnd_D:
Current = "D" & Current
If Save_Map(Tmp_x, Tmp_y + 1) = True Then '下
Next_x = Tmp_x: Next_y = Tmp_y + 1
Save_Map(Tmp_x, Tmp_y) = False
Save_Map(Next_x, Next_y) = False
Move_XY(SaveWay, PP) = Next_x & "," & Next_y
PP = PP + 1
'frmGoTo.PaintPicture frmGoTo.Image5, Next_x * 32, Next_y * 32
If Next_x = D_x And Next_y = D_y Then Exit Sub
GoTo Start_0
End If
GoTo sRnd_O
Start_1:
Current = ""
If SaveWay > 0 Then
'Next_x , Next_y
II = InStr(1, Save_ForkWay(SaveWay - 1), ",")
Next_x = Mid(Save_ForkWay(SaveWay - 1), 1, (II - 1))
Next_y = Mid(Save_ForkWay(SaveWay - 1), (II + 1))
For i = 0 To 255
Move_XY(SaveWay, i) = ""
Move_XY(SaveWay - 1, i) = ""
Next i
PP = 0: i = 0: II = 0
SaveWay = SaveWay - 1
GoTo Start_0
Else
Exit Sub
End If '记完了接着走
End Sub
Public Me_W As String, Me_H As String
Public Me_WX As Byte, Me_HY As Byte
Public Map(40, 29) As Byte
Public JJ As Byte
Public yIcon As Byte
'-------------------------------------------------
Public Tmp_x As Long, Tmp_y As Long ' 临时(点)
Public Next_x As Long, Next_y As Long ' 临时(点)
' Dim ForkWay_XY As Long
Public S_x As Long, S_y As Long ' '源点 (起点) X Y 坐标
Public D_x As Long, D_y As Long '‘目标点 (要到达的点) X Y坐标
Public Save_ForkWay(255) As String '记录有分道扬镖的点
Public SaveWay As Byte '记录有分道扬镖的点 '分支号记帐器
Public Save_Map(255, 255) As Boolean ''记录地图,临时用
Public Move_XY(255, 255) As String '走过的路
'-------------------------------------------
Dim i As Byte, II As Byte, PP As Byte
Dim Tmp As String
Public Sub JS_Move()
'S_x = i: S_y = II '起点 '都是以左侧为起点
'横向 20 个,纵向 15 个
Next_x = S_x: Next_y = S_y '初始的坐标
i = 0
Dim ForkWay As Byte 'Fork way 叉道
SaveWay = 0 '记录有分道扬镖的点 '分支号记帐器
'//*_ 开头 Save_Map(S_x , S_y)
On Error Resume Next
Start_0:
Tmp_x = Next_x: Tmp_y = Next_y
ForkWay = 0 '初始化记数器
If Tmp_x > 0 Then
If Save_Map(Tmp_x - 1, Tmp_y) = True Then
ForkWay = ForkWay + 1 '目标判断 左 '有通路
Else
Save_Map(Tmp_x - 1, Tmp_y) = False
End If '------------------
End If
If Tmp_y > 0 Then
If Save_Map(Tmp_x, Tmp_y - 1) = True Then
ForkWay = ForkWay + 1 '目标判断 上 '有通路
Else
Save_Map(Tmp_x, Tmp_y - 1) = False
End If '-------------------
End If
If Tmp_x < 19 Then
If Save_Map(Tmp_x + 1, Tmp_y) = True Then
ForkWay = ForkWay + 1 '目标判断 右 '有通路
Else
Save_Map(Tmp_x + 1, Tmp_y) = False
End If '------------------
End If
If Tmp_y < 14 Then
If Save_Map(Tmp_x, Tmp_y + 1) = True Then
ForkWay = ForkWay + 1 '目标判断 下 '有通路
Else
Save_Map(Tmp_x, Tmp_y + 1) = False
End If '-----------------------------------------------
End If
If ForkWay > 1 Then
Save_ForkWay(SaveWay) = Tmp_x & "," & Tmp_y '是有 记录 叉道 坐标
SaveWay = SaveWay + 1 '多个分支
ElseIf ForkWay = 0 Then
GoTo Start_1
End If '记完了接着走