📄 vbcch.frm
字号:
For j1 = 0 To 3
If X(j1) < 4 Or X(j1) > 6 Or Y(j1) < 8 Or Y(j1) > 10 Then X(j1) = 200
Next
Else
''士只能走左斜、右斜、上斜、下斜
X(0) = i - 1: Y(0) = j - 1 ''左
X(1) = i + 1: Y(1) = j - 1 ''右
X(2) = i - 1: Y(2) = j + 1 ''上
X(3) = i + 1: Y(3) = j + 1 ''下
'原位置不能走
For j1 = 0 To 3
If X(j1) = i And Y(j1) = j Then X(j1) = 200
Next
''判断有无超格(超格范围和王一样)
For j1 = 0 To 3
If X(j1) < 4 Or X(j1) > 6 Or Y(j1) < 1 Or Y(j1) > 3 Then X(j1) = 200
Next
End If
Case 5:
''象(走田型,共有7个着点,还要判断隔子) x横y竖
xGzx = 0: xGzy = 0
If Cer = 2 Then
''Cer=2为红方
Tt = False
X(0) = 1: Y(0) = 8
''如果象走到目标x(0),y(0)的原始目标为5,3则其隔子位置在2,2
If i = 3 And j = 10 Then xGzx = 2: xGzy = 9: Tt = True
''如果象走到目标x(0),y(0)的原始目标为3,10则其隔子位置在2,7
If i = 3 And j = 6 Then xGzx = 2: xGzy = 7: Tt = True
If ChessBoard(xGzx, xGzy).Value > 0 Or Tt = False Then X(0) = 200 ''有隔子,不能通过
Tt = False
X(1) = 3: Y(1) = 10
''如果象走到目标x(1),y(1)的原始目标为5,3则其隔子位置在2,2
If i = 5 And j = 8 Then xGzx = 4: xGzy = 9: Tt = True
''如果象走到目标x(1),y(1)的原始目标为3,5则其隔子位置在2,2
If i = 1 And j = 8 Then xGzx = 2: xGzy = 9: Tt = True
If ChessBoard(xGzx, xGzy).Value > 0 Or Tt = False Then X(1) = 200 ''有隔子,不能通过
Tt = False
X(2) = 5: Y(2) = 8
''如果象走到目标x(2),y(2)的原始目标为5,3则其隔子位置在2,2
If i = 3 And j = 10 Then xGzx = 4: xGzy = 9: Tt = True
''如果象走到目标x(2),y(2)的原始目标为3,5则其隔子位置在2,2
If i = 7 And j = 10 Then xGzx = 6: xGzy = 9: Tt = True
''如果象走到目标x(2),y(2)的原始目标为5,3则其隔子位置在2,2
If i = 7 And j = 6 Then xGzx = 6: xGzy = 7: Tt = True
''如果象走到目标x(2),y(2)的原始目标为3,5则其隔子位置在2,2
If i = 3 And j = 6 Then xGzx = 4: xGzy = 7: Tt = True
If ChessBoard(xGzx, xGzy).Value > 0 Or Tt = False Then X(2) = 200 ''有隔子,不能通过
Tt = False
X(3) = 7: Y(3) = 10
''如果象走到目标x(3),y(3)的原始目标为5,3则其隔子位置在2,2
If i = 5 And j = 8 Then xGzx = 6: xGzy = 9: Tt = True
''如果象走到目标x(3),y(3)的原始目标为3,5则其隔子位置在2,2
If i = 9 And j = 8 Then xGzx = 8: xGzy = 9: Tt = True
If ChessBoard(xGzx, xGzy).Value > 0 Or Tt = False Then X(3) = 200 ''有隔子,不能通过
Tt = False
X(4) = 9: Y(4) = 8
''如果象走到目标x(4),y(4)的原始目标为5,3则其隔子位置在2,2
If i = 7 And j = 10 Then xGzx = 8: xGzy = 9: Tt = True
''如果象走到目标x(4),y(4)的原始目标为3,5则其隔子位置在2,2
If i = 7 And j = 6 Then xGzx = 8: xGzy = 7: Tt = True
If ChessBoard(xGzx, xGzy).Value > 0 Or Tt = False Then X(4) = 200 ''有隔子,不能通过
X(5) = 7: Y(5) = 6
Tt = False
''如果象走到目标x(5),y(5)的原始目标为5,3则其隔子位置在2,2
If i = 5 And j = 8 Then xGzx = 6: xGzy = 7: Tt = True
''如果象走到目标x(5),y(5)的原始目标为3,5则其隔子位置在2,2
If i = 9 And j = 8 Then xGzx = 8: xGzy = 7: Tt = True
If ChessBoard(xGzx, xGzy).Value > 0 Or Tt = False Then X(5) = 200 ''有隔子,不能通过
Tt = False
X(6) = 3: Y(6) = 6
''如果象走到目标x(6),y(6)的原始目标为5,3则其隔子位置在2,2
If i = 1 And j = 8 Then xGzx = 2: xGzy = 7: Tt = True
''如果象走到目标x(6),y(6)的原始目标为3,5则其隔子位置在2,2
If i = 5 And j = 8 Then xGzx = 4: xGzy = 7: Tt = True
If ChessBoard(xGzx, xGzy).Value > 0 Or Tt = False Then X(6) = 200 ''有隔子,不能通过
Else
Tt = False
X(0) = 1: Y(0) = 3
''如果象走到目标x(0),y(0)的原始目标为5,3则其隔子位置在2,2
If i = 1 And j = 3 Then xGzx = 2: xGzy = 2: Tt = True
''如果象走到目标x(0),y(0)的原始目标为3,5则其隔子位置在2,2
If i = 3 And j = 5 Then xGzx = 2: xGzy = 4: Tt = True
If ChessBoard(xGzx, xGzy).Value > 0 Or Tt = False Then X(0) = 200 ''有隔子,不能通过
Tt = False
X(1) = 3: Y(1) = 1
''如果象走到目标x(1),y(1)的原始目标为5,3则其隔子位置在2,2
If i = 1 And j = 3 Then xGzx = 2: xGzy = 2: Tt = True
''如果象走到目标x(1),y(1)的原始目标为3,5则其隔子位置在2,2
If i = 5 And j = 3 Then xGzx = 4: xGzy = 2: Tt = True
If ChessBoard(xGzx, xGzy).Value > 0 Or Tt = False Then X(1) = 200
Tt = False
X(2) = 5: Y(2) = 3
''如果象走到目标x(2),y(2)的原始目标为5,3则其隔子位置在2,2
If i = 7 And j = 1 Then xGzx = 6: xGzy = 2: Tt = True
''如果象走到目标x(2),y(2)的原始目标为3,5则其隔子位置在2,2
If i = 3 And j = 1 Then xGzx = 4: xGzy = 2: Tt = True
''如果象走到目标x(2),y(2)的原始目标为5,3则其隔子位置在2,2
If i = 3 And j = 5 Then xGzx = 4: xGzy = 4: Tt = True
''如果象走到目标x(2),y(2)的原始目标为3,5则其隔子位置在2,2
If i = 7 And j = 5 Then xGzx = 6: xGzy = 4: Tt = True
If ChessBoard(xGzx, xGzy).Value > 0 Or Tt = False Then X(2) = 200
Tt = False
X(3) = 7: Y(3) = 1
''如果象走到目标x(3),y(3)的原始目标为5,3则其隔子位置在2,2
If i = 9 And j = 3 Then xGzx = 8: xGzy = 2: Tt = True
''如果象走到目标x(3),y(3)的原始目标为3,5则其隔子位置在2,2
If i = 5 And j = 3 Then xGzx = 6: xGzy = 2: Tt = True
If ChessBoard(xGzx, xGzy).Value > 0 Or Tt = False Then X(3) = 200
Tt = False
X(4) = 9: Y(4) = 3
''如果象走到目标x(3),y(3)的原始目标为5,3则其隔子位置在2,2
If i = 7 And j = 5 Then xGzx = 8: xGzy = 4: Tt = True
''如果象走到目标x(3),y(3)的原始目标为3,5则其隔子位置在2,2
If i = 7 And j = 1 Then xGzx = 8: xGzy = 2: Tt = True
If ChessBoard(xGzx, xGzy).Value > 0 Or Tt = False Then X(4) = 200
Tt = False
X(5) = 7: Y(5) = 5
''如果象走到目标x(4),y(4)的原始目标为5,3则其隔子位置在2,2
If i = 9 And j = 3 Then xGzx = 8: xGzy = 4: Tt = True
''如果象走到目标x(4),y(4)的原始目标为3,5则其隔子位置在2,2
If i = 5 And j = 3 Then xGzx = 6: xGzy = 4: Tt = True
If ChessBoard(xGzx, xGzy).Value > 0 Or Tt = False Then X(5) = 200
Tt = False
X(6) = 3: Y(6) = 5
''如果象走到目标x(5),y(5)的原始目标为5,3则其隔子位置在2,2
If i = 5 And j = 3 Then xGzx = 4: xGzy = 4: Tt = True
''如果象走到目标x(5),y(5)的原始目标为3,5则其隔子位置在2,2
If i = 3 And j = 1 Then xGzx = 2: xGzy = 4: Tt = True
If ChessBoard(xGzx, xGzy).Value > 0 Or Tt = False Then X(6) = 200
End If
Case 4:
''车(除原位置外可横向或竖向任何一格直到有隔子为止)
''ChessBoard(9,10)
T1 = 0
For i1 = i + 1 To 9
If Int(ChessBoard(i1, j).Value / 100) = Cer Then
i1 = 10
Else
X(T1) = i1: Y(T1) = j: T1 = T1 + 1
If ChessBoard(i1, j).Value <> 0 Then i1 = 10
End If
Next
i1 = i - 1
Do While i1 > 0
If Int(ChessBoard(i1, j).Value / 100) = Cer Then
i1 = 1
Else
X(T1) = i1: Y(T1) = j: T1 = T1 + 1
If ChessBoard(i1, j).Value <> 0 Then i1 = 1
End If
i1 = i1 - 1
Loop
For j1 = j + 1 To 10
If Int(ChessBoard(i, j1).Value / 100) = Cer Then
j1 = 11
Else
X(T1) = i: Y(T1) = j1: T1 = T1 + 1
If ChessBoard(i, j1).Value <> 0 Then j1 = 11
End If
Next
j1 = j - 1
Do While j1 > 0
If Int(ChessBoard(i, j1).Value / 100) = Cer Then
j1 = 1
Else
X(T1) = i: Y(T1) = j1: T1 = T1 + 1
If ChessBoard(i, j1).Value <> 0 Then j1 = 1
End If
j1 = j1 - 1
Loop
Case 3:
''马(走日形,共8个落子点,落子点方向若有阻隔棋不能下) i横j竖
X(0) = i - 1: Y(0) = j - 2
If Y(0) > 0 Then
''判断有无阻隔
If ChessBoard(X(0) + 1, Y(0) + 1).Value <> 0 Then X(0) = 200
End If
X(1) = i + 1: Y(1) = j - 2
If Y(1) > 0 Then
''判断有无阻隔
If ChessBoard(X(1) - 1, Y(1) + 1).Value <> 0 Then X(1) = 200
End If
X(2) = i - 1: Y(2) = j + 2
If Y(2) <= 10 Then
''判断有无阻隔
If ChessBoard(X(2) + 1, Y(2) - 1).Value <> 0 Then X(2) = 200
End If
X(3) = i + 1: Y(3) = j + 2
If Y(3) <= 10 Then
''判断有无阻隔
If ChessBoard(X(3) - 1, Y(3) - 1).Value <> 0 Then X(3) = 200
End If
X(4) = i - 2: Y(4) = j - 1
If X(4) > 0 Then
''判断有无阻隔
If ChessBoard(X(4) + 1, Y(4) + 1).Value <> 0 Then X(4) = 200
End If
X(5) = i + 2: Y(5) = j - 1
If X(5) <= 9 Then
''判断有无阻隔
If ChessBoard(X(5) - 1, Y(5) + 1).Value <> 0 Then X(5) = 200
End If
X(6) = i - 2: Y(6) = j + 1
If X(6) > 0 Then
''判断有无阻隔
If ChessBoard(X(6) + 1, Y(6) - 1).Value <> 0 Then X(6) = 200
End If
X(7) = i + 2: Y(7) = j + 1
If X(7) <= 9 Then
''判断有无阻隔
If ChessBoard(X(7) - 1, Y(7) - 1).Value <> 0 Then X(7) = 200
End If
Case 2:
''炮(不吃子情况下走法类似车,吃子方式为隔山打牛)
''车(除原位置外可横向或竖向任何一格)
''ChessBoard(9,10)
Gzs = 0 ''判断隔子数
T1 = 0
For i1 = i + 1 To 9
''如果当前隔为空,或者隔棋后当前位置是对方的棋而形成的隔山打牛可走
If (ChessBoard(i1, j).Value = 0 And Gzs = 0) Or (Gzs = 1 And (Int(ChessBoard(i1, j).Value / 100) = NextCer(Cer))) Then
X(T1) = i1: Y(T1) = j: T1 = T1 + 1
If ChessBoard(i1, j).Value <> 0 Then Gzs = Gzs + 1
Else
''落子点非空,增加隔子数
If ChessBoard(i1, j).Value > 0 Then Gzs = Gzs + 1
End If
Next
Gzs = 0 ''判断隔子数
i1 = i - 1
Do While i1 > 0
''如果当前隔为空,或者隔棋后当前位置是对方的棋而形成的隔山打牛可走
If (ChessBoard(i1, j).Value = 0 And Gzs = 0) Or (Gzs = 1 And (Int(ChessBoard(i1, j).Value / 100) = NextCer(Cer))) Then
X(T1) = i1: Y(T1) = j: T1 = T1 + 1
If ChessBoard(i1, j).Value <> 0 Then Gzs = Gzs + 1
Else
''落子点非空,增加隔子数
If ChessBoard(i1, j).Value > 0 Then Gzs = Gzs + 1
End If
i1 = i1 - 1
Loop
Gzs = 0
For j1 = j + 1 To 10
''如果当前隔为空,或者隔棋后当前位置是对方的棋而形成的隔山打牛可走
If (ChessBoard(i, j1).Value = 0 And Gzs = 0) Or (Gzs = 1 And (Int(ChessBoard(i, j1).Value / 100) = NextCer(Cer))) Then
X(T1) = i: Y(T1) = j1: T1 = T1 + 1
If ChessBoard(i, j1).Value <> 0 Then Gzs = Gzs + 1
Else
''落子点非空,增加隔子数
If ChessBoard(i, j1).Value > 0 Then Gzs = Gzs + 1
End If
Next
Gzs = 0
j1 = j - 1
Do While j1 > 0
''如果当前隔为空,或者隔棋后当前位置是对方的棋而形成的隔山打牛可走
If (ChessBoard(i, j1).Value = 0 And Gzs = 0) Or (Gzs = 1 And (Int(ChessBoard(i, j1).Value / 100) = NextCer(Cer))) Then
X(T1) = i: Y(T1) = j1: T1 = T1 + 1
If ChessBoard(i, j1).Value <> 0 Then Gzs = Gzs + 1
Else
''落子点非空,增加隔子数
If ChessBoard(i, j1).Value > 0 Then Gzs = Gzs + 1
End If
j1 = j1 - 1
Loop
Case 1:
''卒(只可前进、过界后还可左右)
''以下x,y存储该棋的每个可落子点
If Cer = 2 Then
''Cer=2 红方
X(0) = i: Y(0) = j - 1 ''前进
If j < 6 Then
''j < 6已经过界,可以左右行走
X(1) = i - 1: Y(1) = j ''左
X(2) = i + 1: Y(2) = j ''右
End If
Else
X(0) = i: Y(0) = j + 1 ''前进
If j > 5 Then
''j>5已经过界,可以左右行走
X(1) = i - 1: Y(1) = j ''左
X(2) = i + 1: Y(2) = j ''右
End If
End If
End Select
For a = 0 To MAXDOWNPOINT
''试下当前所有可下位置进行判断分数(以下断判是否超出棋盘,x(a)=200表示无落子点)
If X(a) > 0 And Y(a) > 0 And X(a) <= 9 And Y(a) <= 10 Then
''落子点不能有自己的棋
If Int(ChessBoard(X(a), Y(a)).Value / 100) <> Cer And (X(a) <> i Or Y(a) <> j) Then
''GetLocateValue判断落子点的分数
T1 = CchessValue(Cer, ChessBoard(X(a), Y(a)).Value)
If T1 > 0 Then _
GoTo NextA ''T1>0表示该落子点为己方的棋
T3 = ChessBoard(i, j).Value ''保存(起点的棋子)
T4 = ChessBoard(X(a), Y(a)).Value ''(终点的棋子)
ChessBoard(i, j).Value = 0 ''移动棋子
ChessBoard(X(a), Y(a)).Value = T3 ''试下
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -