这并不是什么天方夜谈,我以前做过的:
Function IsRight(Index As Image, Ya As Single, Yb As Single, Xa As Single, Xb As Single, Optional Flag As Boolean = True) As Boolean
If WeiZhi.Fang((Xa - 30) / 900 + 1, (Xb - 30) / 900 + 1) = Hong And Flag Then IsRight = False: Exit Function
Select Case Index.Tag
    Case "车"
        If Xb <> Yb And Xa <> Ya Then
            IsRight = False: Exit Function
        ElseIf Xb = Yb Then
            For c = (IIf(Xa > Ya, Ya, Xa) - 30) / 900 + 1 To (IIf(Xa > Ya, Xa, Ya) - 30) / 900 - 1
                If WeiZhi.Fang(c + 1, (Yb - 30) / 900 + 1) <> wu Then IsRight = False: Exit Function
            Next
        Else
            For c = (IIf(Xb > Yb, Yb, Xb) - 30) / 900 + 1 To (IIf(Xb > Yb, Xb, Yb) - 30) / 900 - 1
                If WeiZhi.Fang((Ya - 30) / 900 + 1, c + 1) <> wu Then IsRight = False: Exit Function
            Next
        End If
    Case "马"
        If Not (Abs(Xb - Yb) = 900 And Abs(Xa - Ya) = 1800) And Not (Abs(Xb - Yb) = 1800 And Abs(Xa - Ya) = 900) Then
            IsRight = False: Exit Function
        ElseIf Abs(Xb - Yb) = 900 Then
            If WeiZhi.Fang((Ya - 30) / 900 + IIf(Xa > Ya, 2, 0), (Yb - 30) / 900 + 1) <> wu Then IsRight = False: Exit Function
        Else
            If WeiZhi.Fang((Ya - 30) / 900 + 1, (Yb - 30) / 900 + IIf(Xb > Yb, 2, 0)) <> wu Then IsRight = False: Exit Function
        End If
    Case "相"
        If Xb < 4530 Then IsRight = False: Exit Function
        If Not (Abs(Xb - Yb) = 1800 And Abs(Xa - Ya) = 1800) Then
            IsRight = False: Exit Function
        Else
            If WeiZhi.Fang((Ya - 30) / 900 + IIf(Xa > Ya, 2, 0), (Yb - 30) / 900 + IIf(Xb > Yb, 2, 0)) <> wu Then IsRight = False: Exit Function
        End If
    Case "士"
        If Xb < 6330 Or Xa < 2730 Or Xa > 4530 Then IsRight = False: Exit Function
        If Not (Abs(Xb - Yb) = 900 And Abs(Xa - Ya) = 900) Then IsRight = False: Exit Function
    Case "帅"
        If Xa = Ya And WeiZhi.Fang((Xa - 30) / 900 + 1, (Xb - 30) / 900 + 1) <> wu And WeiZhi.Zi((Xa - 30) / 900 + 1, (Xb - 30) / 900 + 1) = 4 Then
            For c = (IIf(Xb > Yb, Yb, Xb) - 30) / 900 + 1 To (IIf(Xb > Yb, Xb, Yb) - 30) / 900 - 1
                If WeiZhi.Fang((Ya - 30) / 900 + 1, c + 1) <> wu Then IsRight = False: Exit Function
            Next
            IsRight = True
            Exit Function
        End If
        If Xb < 6330 Or Xa < 2730 Or Xa > 4530 Then IsRight = False: Exit Function
        If Not (Abs(Xb - Yb) = 900 And Abs(Xa - Ya) = 0) And Not (Abs(Xb - Yb) = 0 And Abs(Xa - Ya) = 900) Then IsRight = False: Exit Function
    Case "炮"
        Dim You As Boolean
        If Xb <> Yb And Xa <> Ya Then
            IsRight = False: Exit Function
        ElseIf Xb = Yb Then
            If WeiZhi.Fang((Xa - 30) / 900 + 1, (Xb - 30) / 900 + 1) = Hei Or Not Flag Then
                For c = (IIf(Xa > Ya, Ya, Xa) - 30) / 900 + 1 To (IIf(Xa > Ya, Xa, Ya) - 30) / 900 - 1
                    If WeiZhi.Fang(c + 1, (Yb - 30) / 900 + 1) <> wu Then
                        If You Then IsRight = False: Exit Function Else You = True
                    End If
                Next
                If You = False Then IsRight = False: Exit Function
            Else
                For c = (IIf(Xa > Ya, Ya, Xa) - 30) / 900 + 1 To (IIf(Xa > Ya, Xa, Ya) - 30) / 900 - 1
                    If WeiZhi.Fang(c + 1, (Yb - 30) / 900 + 1) <> wu Then IsRight = False: Exit Function
                Next
            End If
        Else
            If WeiZhi.Fang((Xa - 30) / 900 + 1, (Xb - 30) / 900 + 1) = Hei Or Not Flag Then
                For c = (IIf(Xb > Yb, Yb, Xb) - 30) / 900 + 1 To (IIf(Xb > Yb, Xb, Yb) - 30) / 900 - 1
                    If WeiZhi.Fang((Ya - 30) / 900 + 1, c + 1) <> wu Then
                        If You Then IsRight = False: Exit Function Else You = True
                    End If
                Next
                If You = False Then IsRight = False: Exit Function
            Else
                For c = (IIf(Xb > Yb, Yb, Xb) - 30) / 900 + 1 To (IIf(Xb > Yb, Xb, Yb) - 30) / 900 - 1
                    If WeiZhi.Fang((Ya - 30) / 900 + 1, c + 1) <> wu Then IsRight = False: Exit Function
                Next
            End If
        End If
    Case "兵"
        If Yb > 3630 Then
            If Not (Yb - Xb = 900 And Xa = Ya) Then IsRight = False: Exit Function
        Else
            If Not (Yb - Xb = 900 And Xa = Ya) And Not (Yb = Xb And Abs(Xa - Ya) = 900) Then IsRight = False: Exit Function
        End If
        
End Select
IsRight = True
End Function