Imports System.Math Imports Microsoft.VisualBasic.Strings PublicClass Form1Class Form1 Private x1 AsInteger Private y1 AsInteger Private Map(9, 9) AsInteger Private MyColor AsInteger Dim Info(20) AsString PrivateSub Show_Can_Position()Sub Show_Can_Position() Dim i, j AsInteger Dim g As Graphics =Me.PictureBox1.CreateGraphics() Dim bitmap AsNew Bitmap("Info2.png") Dim n AsInteger=0 For i =1To8 For j =1To8 If Map(i, j) =0And Can_go(i, j) Then Info(n) = i &"|"& j n = n +1 g.DrawImage(bitmap, (i -1) *45+26, (j -1) *45+26, 30, 30) EndIf Next Next End Sub PrivateFunction Show_Can_Num()Function Show_Can_Num() AsInteger Dim i, j AsInteger Dim n AsInteger=0 For i =1To8 For j =1To8 If Can_go(i, j) Then Info(n) = i &"|"& j n = n +1 EndIf Next Next Return n End Function PrivateSub Cls_Can_Position()Sub Cls_Can_Position() Dim n AsInteger Dim a, b AsString Dim x, y AsInteger Dim s AsString Dim g As Graphics =Me.PictureBox1.CreateGraphics() Dim bitmap AsNew Bitmap("BackColor.png") For n =0To20 s = Info(n) If s =""ThenExitFor a = s.Substring(0, 1) b = s.Substring(InStr(s, "|"), 1) x = Convert.ToInt16(a) y = Convert.ToInt16(b) If Map(x, y) =0Then g.DrawImage(bitmap, (x -1) *45+26, (y -1) *45+26, 30, 30) EndIf 'Me.Text = CInt(x) & y Next End Sub PrivateSub Button2_Click()Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Show_Can_Position() End Sub PrivateSub Button3_Click()Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click Cls_Can_Position() End Sub PrivateFunction Can_go()Function Can_go(ByVal x1 AsInteger, ByVal y1 AsInteger) AsBoolean Dim x, y AsInteger Dim flag AsBoolean '(1) flag =False x = x1 y = y1 For x = x1 -1To1Step-1 If Map(x, y) =0ThenExitFor If Ismychess(x, y1) Then flag =True ExitFor EndIf Next If flag =TrueAndAbs(x - x1) >1ThenReturnTrue '(2) flag =False x = x1 y = y1 For x = x1 -1To1Step-1 y = y -1 If Map(x, y) =0ThenExitFor If y <1Then ExitFor EndIf If Ismychess(x, y) Then flag =True ExitFor EndIf Next If flag =TrueAndAbs(x - x1) >1ThenReturnTrue '(3) flag =False x = x1 y = y1 For y = y1 -1To1Step-1 If Map(x, y) =0ThenExitFor If Ismychess(x1, y) Then flag =True ExitFor EndIf Next If flag =TrueAndAbs(y - y1) >1ThenReturnTrue '(4) flag =False x = x1 y = y1 For x = x1 +1To8 y = y -1 If Map(x, y) =0ThenExitFor If y <1Then ExitFor EndIf If Ismychess(x, y) Then flag =True ExitFor EndIf Next If flag =TrueAndAbs(x - x1) >1ThenReturnTrue '(5) flag =False x = x1 y = y1 For x = x1 +1To8 If Map(x, y) =0ThenExitFor If Ismychess(x, y1) Then flag =True ExitFor EndIf Next If flag =TrueAndAbs(x - x1) >1ThenReturnTrue '(6) flag =False x = x1 y = y1 For x = x1 +1To8 y = y +1 If Map(x, y) =0ThenExitFor If y >8Then ExitFor EndIf If Ismychess(x, y) Then flag =True ExitFor EndIf Next If flag =TrueAndAbs(x - x1) >1ThenReturnTrue '(7) flag =False x = x1 y = y1 For y = y1 +1To8 If Map(x, y) =0ThenExitFor If Ismychess(x1, y) Then flag =True ExitFor EndIf Next If flag =TrueAndAbs(y - y1) >1ThenReturnTrue '(8) flag =False x = x1 y = y1 For x = x1 -1To1Step-1 y = y +1 If Map(x, y) =0ThenExitFor If y >8Then ExitFor EndIf If Ismychess(x, y) Then flag =True ExitFor EndIf Next If flag =TrueAndAbs(x - x1) >1ThenReturnTrue ReturnFalse End Function PrivateSub PictureBox1_MouseDown()Sub PictureBox1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseDown Dim x, y AsInteger Dim flag AsBoolean x1 = (e.X -22) 45+1 y1 = (e.Y -22) 45+1 IfNot Can_go(x1, y1) Then ToolStripStatusLabel1.Text ="此处不能走棋子" Exit Sub EndIf Me.Text = e.X &""& e.Y &""& x1 &""& y1 '(1) flag =False x = x1 y = y1 For x = x1 -1To1Step-1 If Map(x, y) =0ThenExitFor If Ismychess(x, y1) Then flag =True ExitFor EndIf Next If flag =TrueThen Reverse(x, y) '(2) flag =False x = x1 y = y1 For x = x1 -1To1Step-1 y = y -1 If Map(x, y) =0ThenExitFor If y <1Then ExitFor EndIf If Ismychess(x, y) Then flag =True ExitFor EndIf Next If flag =TrueThen Reverse(x, y) '(3) flag =False x = x1 y = y1 For y = y1 -1To1Step-1 If Map(x, y) =0ThenExitFor If Ismychess(x1, y) Then flag =True ExitFor EndIf Next If flag =TrueThen Reverse(x, y) '(4) flag =False x = x1 y = y1 For x = x1 +1To8 y = y -1 If Map(x, y) =0ThenExitFor If y <1Then ExitFor EndIf If Ismychess(x, y) Then flag =True ExitFor EndIf Next If flag =TrueThen Reverse(x, y) '(5) flag =False x = x1 y = y1 For x = x1 +1To8 If Map(x, y) =0ThenExitFor If Ismychess(x, y1) Then flag =True ExitFor EndIf Next If flag =TrueThen Reverse(x, y) '(6) flag =False x = x1 y = y1 For x = x1 +1To8 y = y +1 If Map(x, y) =0ThenExitFor If y >8Then ExitFor EndIf If Ismychess(x, y) Then flag =True ExitFor EndIf Next If flag =TrueThen Reverse(x, y) '(7) flag =False x = x1 y = y1 For y = y1 +1To8 If Map(x, y) =0ThenExitFor If Ismychess(x1, y) Then flag =True ExitFor EndIf Next If flag =TrueThen Reverse(x, y) '(8) flag =False x = x1 y = y1 For x = x1 -1To1Step-1 y = y +1 If Map(x, y) =0ThenExitFor If y >8Then ExitFor EndIf If Ismychess(x, y) Then flag =True ExitFor EndIf Next If flag =TrueThen Reverse(x, y) '清除提示 Cls_Can_Position() '该对方走棋 If MyColor =1Then MyColor =2 ToolStripStatusLabel1.Text ="白色棋子走" Else MyColor =1 ToolStripStatusLabel1.Text ="黑色棋子走" EndIf '显示提示 Show_Can_Position() End Sub PrivateSub FanQi()Sub FanQi(ByVal x AsInteger, ByVal y AsInteger) Dim g As Graphics =Me.PictureBox1.CreateGraphics() Dim bitmap AsNew Bitmap("WhiteStone.png") '(x1,y1)处原色处理 If x = x1 And y = y1 Then If MyColor =2Then Map(x, y) =2 g.DrawImage(bitmap, (x -1) *45+22, (y -1) *45+22, 45, 45) EndIf If MyColor =1Then Map(x, y) =1 bitmap =New Bitmap("BlackStone.png") g.DrawImage(bitmap, (x -1) *45+22, (y -1) *45+22, 45, 45) EndIf Exit Sub EndIf 'If Map(x, y) = 0 Then ' Exit Sub 'End If '1黑色 2白色 If Map(x, y) =1Then Map(x, y) =2 g.DrawImage(bitmap, (x -1) *45+22, (y -1) *45+22, 45, 45) Else Map(x, y) =1 bitmap =New Bitmap("BlackStone.png") g.DrawImage(bitmap, (x -1) *45+22, (y -1) *45+22, 45, 45) EndIf ListBox1.Items.Add(x &""& y) End Sub PrivateSub Reverse()Sub Reverse(ByVal x AsInteger, ByVal y AsInteger) Dim a, b, i AsInteger If (x - x1) * (y1 - y) =0Then'直线方向翻转棋子 '直线x方向 If x1 <> x Then IfAbs(x1 - x) =1Then Exit Sub EndIf If x1 < x Then a = x1 : b = x EndIf If x1 > x Then a = x : b = x1 EndIf For i = a To b If i <> x Then FanQi(i, y1) '(x,y)处不需要翻转 Next EndIf '直线y方向 If y1 <> y Then IfAbs(y1 - y) =1Then Exit Sub EndIf If y1 < y Then a = y1 : b = y EndIf If y1 > y Then a = y : b = y1 EndIf For i = a To b If i <> y Then FanQi(x1, i) '(x,y)处不需要翻转 'FanQi(x1, i) Next EndIf Else'斜线方向翻转棋子 If (x - x1) = (y - y1) Then '45度正斜线 IfAbs(x1 - x) =1Then Exit Sub EndIf If x1 < x Then a = x1 : b = x y = y1 EndIf If x1 > x Then a = x : b = x1 EndIf For i = a To b If i <> x Then FanQi(i, y) '(x,y)处不需要翻转 y = y +1 'FanQi(i, i) Next EndIf If (x - x1) =-(y - y1) Then '45度反斜线 IfAbs(x1 - x) =1Then Exit Sub EndIf If x1 < x Then a = x1 : b = x y = y1 EndIf If x1 > x Then a = x : b = x1 EndIf For i = a To b If i <> x Then FanQi(i, y) '(x,y)处不需要翻转 y = y -1 'FanQi(i, 9 - i) Next EndIf EndIf End Sub PrivateFunction Ismychess()Function Ismychess(ByVal x AsInteger, ByVal y AsInteger) AsBoolean If Map(x, y) = MyColor Then ReturnTrue Else ReturnFalse EndIf End Function PrivateSub Form1_Load()Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load Map(4, 4) =2'0无子 1黑色 2白色 Map(5, 5) =2 Map(4, 5) =1 Map(5, 4) =1 MyColor =1'自己棋子颜色--黑色 ToolStripStatusLabel1.Text ="黑色棋子走" End Sub PrivateSub Button1_Click()Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim x, y AsInteger Dim g As Graphics =Me.PictureBox1.CreateGraphics() Dim bitmap AsNew Bitmap("WhiteStone.png") x =4 : y =4 g.DrawImage(bitmap, (x -1) *45+22, (y -1) *45+22, 45, 45) x =5 : y =5 g.DrawImage(bitmap, (x -1) *45+22, (y -1) *45+22, 45, 45) bitmap =New Bitmap("BlackStone.png") x =5 : y =4 g.DrawImage(bitmap, (x -1) *45+22, (y -1) *45+22, 45, 45) x =4 : y =5 g.DrawImage(bitmap, (x -1) *45+22, (y -1) *45+22, 45, 45) Me.Text ="begin" Show_Can_Position() End Sub End Class