具体开发步骤:

1)新建一个Windows应用程序,项目命名为"象棋"如图5-7设计网络网络中国象棋界面。Visual Studio .Net集成开发环境中的【解决方案资源管理器】窗口中,双击Form1.vb文件,进入Form1.vb文件的编辑界面。

两人对战网络中国象棋3.1具体实现-编程知识网

5-7 两人对战网络中国象棋界面

2)在Form1.vb文件的开头,添加命名空间:

Imports System.Net

Imports System.Threading

Imports System.Text

Imports System.Net.Sockets

Imports System.Math

  3)如下编写代码:

两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网Public Class FrmchessClass Frmchess
两人对战网络中国象棋3.1具体实现-编程知识网    
Public Const REDPLAYER As Short = 20
两人对战网络中国象棋3.1具体实现-编程知识网    
Public Const BLACKPLAYER As Short = 0
两人对战网络中国象棋3.1具体实现-编程知识网    
'map是布局,r是棋子半径,CurSelect表示当前选中的棋子,LocalPlayer记录自己是红是黑
两人对战网络中国象棋3.1具体实现-编程知识网
    Dim Map(910As Integer
两人对战网络中国象棋3.1具体实现-编程知识网    
Dim CurSelect, r As Integer
两人对战网络中国象棋3.1具体实现-编程知识网    
Public LocalPlayer As Integer
两人对战网络中国象棋3.1具体实现-编程知识网    
'IsMyTurn判断是否该自己走了
两人对战网络中国象棋3.1具体实现-编程知识网
    Dim IsMyTurn, step_flag As Boolean
两人对战网络中国象棋3.1具体实现-编程知识网    
Public picChess(36As PictureBox   '象棋棋子图片控件
两人对战网络中国象棋3.1具体实现-编程知识网
    '网络通信部分
两人对战网络中国象棋3.1具体实现-编程知识网
    Private ReadFlag As Boolean = True  '设定侦听标示位,通过它来设定是否侦听端口号
两人对战网络中国象棋3.1具体实现-编程知识网
    Private th As Thread    '定义一个线程,在线程接收信息
两人对战网络中国象棋3.1具体实现-编程知识网
    Private remote As IPEndPoint  '定义一个远程结点,用以获取远程计算机IP地址和发送的信息
两人对战网络中国象棋3.1具体实现-编程知识网
    Private udpclient As UdpClient  '创建一个UDP网络服务
两人对战网络中国象棋3.1具体实现-编程知识网
    Private can_go As Boolean = False    '没有联机不能走棋
两人对战网络中国象棋3.1具体实现-编程知识网
    Private th_flag As Boolean = False
两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Private Sub read()Sub read()
两人对战网络中国象棋3.1具体实现-编程知识网        
'侦听本地的端口号
两人对战网络中国象棋3.1具体实现-编程知识网
        udpclient = New UdpClient(Convert.ToInt32(txt_port.Text))
两人对战网络中国象棋3.1具体实现-编程知识网        
'remote = System.DBNull
两人对战网络中国象棋3.1具体实现-编程知识网
        '设定编码类型
两人对战网络中国象棋3.1具体实现-编程知识网
        Dim enc As Encoding
两人对战网络中国象棋3.1具体实现-编程知识网        enc 
= Encoding.Unicode
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim idx As Long, x As Long, y As Integer
两人对战网络中国象棋3.1具体实现-编程知识网        
While ReadFlag = True
两人对战网络中国象棋3.1具体实现-编程知识网            
Dim data As Byte() = udpclient.Receive(remote)   '得到对方发送来的信息
两人对战网络中国象棋3.1具体实现-编程知识网
            'Encoding.Unicode.GetBytes(Message)
两人对战网络中国象棋3.1具体实现-编程知识网
            Dim strData As String = enc.GetString(data)
两人对战网络中国象棋3.1具体实现-编程知识网            
Dim a(5As String
两人对战网络中国象棋3.1具体实现-编程知识网            a 
= strData.Split("|")
两人对战网络中国象棋3.1具体实现-编程知识网            
Select Case a(0)
两人对战网络中国象棋3.1具体实现-编程知识网                
Case "join"
两人对战网络中国象棋3.1具体实现-编程知识网                    
'获取传送信息到本地端口号的远程计算机IP地址
两人对战网络中国象棋3.1具体实现-编程知识网
                    Dim remoteIP As String = remote.Address.ToString()
两人对战网络中国象棋3.1具体实现-编程知识网                    
'显示接收信息以及传送信息的计算机IP地址
两人对战网络中国象棋3.1具体实现-编程知识网
                    ToolStripStatusLabel1.Text = remoteIP + "已经有人加入,你是红方请走先棋"
两人对战网络中国象棋3.1具体实现-编程知识网                    can_go 
= True '能走棋
两人对战网络中国象棋3.1具体实现-编程知识网
                    LocalPlayer = REDPLAYER
两人对战网络中国象棋3.1具体实现-编程知识网                    
Call Draw_qizi()        '显示棋子
两人对战网络中国象棋3.1具体实现-编程知识网
                    SetMyTurn(True)
两人对战网络中国象棋3.1具体实现-编程知识网                    Button1.Enabled 
= False
两人对战网络中国象棋3.1具体实现-编程知识网                
Case "succ"
两人对战网络中国象棋3.1具体实现-编程知识网                    
'获取传送信息到本地端口号的远程计算机IP地址
两人对战网络中国象棋3.1具体实现-编程知识网
                    If a(1= "黑方赢了" Then
两人对战网络中国象棋3.1具体实现-编程知识网                        MessageBox.Show(
"黑方赢了,你可以重新开始了!""你输了")
两人对战网络中国象棋3.1具体实现-编程知识网                    
End If
两人对战网络中国象棋3.1具体实现-编程知识网                    
If a(1= "红方赢了" Then
两人对战网络中国象棋3.1具体实现-编程知识网                        MessageBox.Show(
"红方赢了,你可以重新开始了!""你输了")
两人对战网络中国象棋3.1具体实现-编程知识网                    
End If
两人对战网络中国象棋3.1具体实现-编程知识网                    ToolStripStatusLabel1.Text 
= "你可以重新开局!"
两人对战网络中国象棋3.1具体实现-编程知识网                    Button2.Enabled 
= True
两人对战网络中国象棋3.1具体实现-编程知识网                
Case "move"   '对方的走棋信息,move|图片索引号|X|Y
两人对战网络中国象棋3.1具体实现-编程知识网
                    If can_go = False Then
两人对战网络中国象棋3.1具体实现-编程知识网                        can_go 
= True           '可以开始走棋了
两人对战网络中国象棋3.1具体实现-编程知识网
                        'LocalPlayer = BLACKPLAYER
两人对战网络中国象棋3.1具体实现-编程知识网
                        Call Draw_qizi()        '显示棋子
两人对战网络中国象棋3.1具体实现-编程知识网
                    End If
两人对战网络中国象棋3.1具体实现-编程知识网                    idx 
= Convert.ToInt16(a(1))
两人对战网络中国象棋3.1具体实现-编程知识网                    x 
= Convert.ToInt16(a(2))
两人对战网络中国象棋3.1具体实现-编程知识网                    y 
= Convert.ToInt16(a(3))
两人对战网络中国象棋3.1具体实现-编程知识网                    ToolStripStatusLabel1.Text 
= x & y
两人对战网络中国象棋3.1具体实现-编程知识网                    Map(GetChessX(idx), GetChessY(idx)) 
= 0
两人对战网络中国象棋3.1具体实现-编程知识网                    MoveChessTo(idx, x, y)
两人对战网络中国象棋3.1具体实现-编程知识网                    
If Map(x, y) <> 0 Then
两人对战网络中国象棋3.1具体实现-编程知识网                        picChess(Map(x, y)).Visible 
= False
两人对战网络中国象棋3.1具体实现-编程知识网                    
End If
两人对战网络中国象棋3.1具体实现-编程知识网                    Map(x, y) 
= idx
两人对战网络中国象棋3.1具体实现-编程知识网                    ListBox1.Items.Add(
"对方" + picChess(idx).Tag.ToString() + "走到x" + x.ToString + "y" + y.ToString)
两人对战网络中国象棋3.1具体实现-编程知识网                    MoveChess(idx, x, y)
两人对战网络中国象棋3.1具体实现-编程知识网                    
'Call DrawBoard()
两人对战网络中国象棋3.1具体实现-编程知识网
                    SetMyTurn(True)
两人对战网络中国象棋3.1具体实现-编程知识网                
Case "exit"
两人对战网络中国象棋3.1具体实现-编程知识网                    MessageBox.Show(
"对方退出了,游戏结束!""提示")
两人对战网络中国象棋3.1具体实现-编程知识网                    ToolStripStatusLabel1.Text 
= "对方退出了,游戏结束!"
两人对战网络中国象棋3.1具体实现-编程知识网                    
Exit While
两人对战网络中国象棋3.1具体实现-编程知识网            
End Select
两人对战网络中国象棋3.1具体实现-编程知识网        
End While
两人对战网络中国象棋3.1具体实现-编程知识网        th.Abort()
两人对战网络中国象棋3.1具体实现-编程知识网    
End Sub

两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Private Sub send()Sub send(ByVal info As String)      '创建UDP网络服务
两人对战网络中国象棋3.1具体实现-编程知识网
        Dim SendUdp As UdpClient = New UdpClient
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim remoteIP As IPAddress
两人对战网络中国象棋3.1具体实现-编程知识网        
'判断IP地址的正确性()
两人对战网络中国象棋3.1具体实现-编程知识网
        Try
两人对战网络中国象棋3.1具体实现-编程知识网            remoteIP 
= IPAddress.Parse(txt_IP.Text)
两人对战网络中国象棋3.1具体实现-编程知识网        
Catch
两人对战网络中国象棋3.1具体实现-编程知识网            MessageBox.Show(
"请输入正确的IP地址!""错误")
两人对战网络中国象棋3.1具体实现-编程知识网            
Exit Sub
两人对战网络中国象棋3.1具体实现-编程知识网        
End Try
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim remoteep As IPEndPoint = New IPEndPoint(remoteIP, Convert.ToInt32(txt_remoteport.Text))
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim buffer() As Byte       
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim enc As Encoding
两人对战网络中国象棋3.1具体实现-编程知识网        enc 
= Encoding.Unicode '设定编码类型
两人对战网络中国象棋3.1具体实现-编程知识网
        Dim str As String = info
两人对战网络中国象棋3.1具体实现-编程知识网        buffer 
= enc.GetBytes(str.ToCharArray())
两人对战网络中国象棋3.1具体实现-编程知识网        
'传送信息到指定计算机的txt_remoteport端口号
两人对战网络中国象棋3.1具体实现-编程知识网
        SendUdp.Send(buffer, buffer.Length, remoteep)
两人对战网络中国象棋3.1具体实现-编程知识网        
'关闭UDP网络服务()
两人对战网络中国象棋3.1具体实现-编程知识网
        SendUdp.Close()
两人对战网络中国象棋3.1具体实现-编程知识网    
End Sub

两人对战网络中国象棋3.1具体实现-编程知识网    
'设置是否该自己走
两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网
    Private Sub SetMyTurn()Sub SetMyTurn(ByVal bolIsMyTurn As Boolean)
两人对战网络中国象棋3.1具体实现-编程知识网        IsMyTurn 
= bolIsMyTurn
两人对战网络中国象棋3.1具体实现-编程知识网        
If bolIsMyTurn Then
两人对战网络中国象棋3.1具体实现-编程知识网            ToolStripStatusLabel1.Text 
= "请您开始走棋"
两人对战网络中国象棋3.1具体实现-编程知识网        
Else
两人对战网络中国象棋3.1具体实现-编程知识网            ToolStripStatusLabel1.Text 
= "对方正在思考…"
两人对战网络中国象棋3.1具体实现-编程知识网        
End If
两人对战网络中国象棋3.1具体实现-编程知识网    
End Sub

两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Public Function GetGraphicsObject()Function GetGraphicsObject(ByRef pic As PictureBox) As Graphics
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim g As System.Drawing.Graphics
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim bmp As Bitmap = New Bitmap(pic.Width, pic.Height)
两人对战网络中国象棋3.1具体实现-编程知识网        pic.Image 
= bmp
两人对战网络中国象棋3.1具体实现-编程知识网        g 
= Graphics.FromImage(bmp)
两人对战网络中国象棋3.1具体实现-编程知识网        
Return g
两人对战网络中国象棋3.1具体实现-编程知识网    
End Function

两人对战网络中国象棋3.1具体实现-编程知识网    
'绘制棋盘。如果愿意,可以用漂亮的棋盘图片代替
两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网
    Private Sub DrawBoard()Sub DrawBoard()
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim i As Integer
两人对战网络中国象棋3.1具体实现-编程知识网        
'获取将用于绘图的图形对象的引用创建图形图像。 
两人对战网络中国象棋3.1具体实现-编程知识网
        'Dim g As Graphics = picBoard.CreateGraphics
两人对战网络中国象棋3.1具体实现-编程知识网
        '获取将用于绘图的位图图形对象的,使用这个GetGraphicsObject函数
两人对战网络中国象棋3.1具体实现-编程知识网
        Dim g As Graphics = GetGraphicsObject(picBoard)
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim myPen As New Pen(Color.Red)
两人对战网络中国象棋3.1具体实现-编程知识网        myPen.Width 
= 1
两人对战网络中国象棋3.1具体实现-编程知识网        
'r = picBoard.ClientRectangle.Width / 18
两人对战网络中国象棋3.1具体实现-编程知识网
        r = 18
两人对战网络中国象棋3.1具体实现-编程知识网        picBoard.Height 
= r * 20
两人对战网络中国象棋3.1具体实现-编程知识网        
For i = 0 To 8 '竖线
两人对战网络中国象棋3.1具体实现-编程知识网
            If i = 0 Or i = 8 Then
两人对战网络中国象棋3.1具体实现-编程知识网                myPen.Width 
= 2
两人对战网络中国象棋3.1具体实现-编程知识网            
Else
两人对战网络中国象棋3.1具体实现-编程知识网                myPen.Width 
= 1
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网            g.DrawLine(myPen, r 
+ i * 2 * r, r, r + i * 2 * r, r * 2 * 10  r + 1)
两人对战网络中国象棋3.1具体实现-编程知识网        
Next
两人对战网络中国象棋3.1具体实现-编程知识网        
For i = 0 To 9 '横线
两人对战网络中国象棋3.1具体实现-编程知识网
            If i = 0 Or i = 9 Then
两人对战网络中国象棋3.1具体实现-编程知识网                myPen.Width 
= 2
两人对战网络中国象棋3.1具体实现-编程知识网            
Else
两人对战网络中国象棋3.1具体实现-编程知识网                myPen.Width 
= 1
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网            g.DrawLine(myPen, r, r 
+ i * 2 * r, r * 2 * 9  r, r + i * 2 * r)
两人对战网络中国象棋3.1具体实现-编程知识网        
Next
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim rectangle As New System.Drawing.Rectangle(r + 1, r + r * 8 + 1, r * 9 * 2  2 * r  22 * r  2)
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim brush1 As New System.Drawing.SolidBrush(Color.Brown)
两人对战网络中国象棋3.1具体实现-编程知识网        g.DrawEllipse(System.Drawing.Pens.Black, rectangle)
两人对战网络中国象棋3.1具体实现-编程知识网        g.DrawRectangle(System.Drawing.Pens.Blue, rectangle)
两人对战网络中国象棋3.1具体实现-编程知识网        g.FillRectangle(brush1, rectangle)
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim font1 As Font = New System.Drawing.Font("Arial"20)
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim brush2 As New System.Drawing.SolidBrush(Color.Yellow)
两人对战网络中国象棋3.1具体实现-编程知识网        g.DrawString(
"   汉界             楚河", font1, brush2, (r + 1), (r + r * 8 + 1))
两人对战网络中国象棋3.1具体实现-编程知识网        
'g.DrawLine(myPen, r + 1, r + r * 8 + 1, r * 9 * 2 – r – 1, r + r * 8 + r * 2 – 1)
两人对战网络中国象棋3.1具体实现-编程知识网
        '画九宫斜线
两人对战网络中国象棋3.1具体实现-编程知识网
        g.DrawLine(myPen, r + r * 6 + 1, r + 1, r + r * 6 + r * 4  1, r + r * 4  1)
两人对战网络中国象棋3.1具体实现-编程知识网        g.DrawLine(myPen, r 
+ r * 6 + 1, r + r * 4  1, r + r * 6 + r * 4  1, r + 1)
两人对战网络中国象棋3.1具体实现-编程知识网        g.DrawLine(myPen, r 
+ r * 6 + 1, r * 14 + r + 1, r + r * 6 + r * 4  1, r * 14 + r + r * 4  1)
两人对战网络中国象棋3.1具体实现-编程知识网        g.DrawLine(myPen, r 
+ r * 6 + 1, r * 14 + r + r * 4  1, r + r * 6 + r * 4  1, r * 14 + r + 1)
两人对战网络中国象棋3.1具体实现-编程知识网    
End Sub

两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Private Sub LoadChess()Sub LoadChess()
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim str As String
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim path As String
两人对战网络中国象棋3.1具体实现-编程知识网        path 
= System.Windows.Forms.Application.StartupPath ' bin路径
两人对战网络中国象棋3.1具体实现-编程知识网
        Dim i As Integer
两人对战网络中国象棋3.1具体实现-编程知识网        
For i = 1 To 36  '黑方对应的是 1至16,红方对应的是21至36
两人对战网络中国象棋3.1具体实现-编程知识网
            picChess(i) = New PictureBox
两人对战网络中国象棋3.1具体实现-编程知识网            
Me.Controls.Add(picChess(i))
两人对战网络中国象棋3.1具体实现-编程知识网            picChess(i).SetBounds(
00, (r  1* 2, (r  1* 2)
两人对战网络中国象棋3.1具体实现-编程知识网            picChess(i).BackColor 
= System.Drawing.SystemColors.GrayText
两人对战网络中国象棋3.1具体实现-编程知识网            picChess(i).Name 
= "MyPic" & i.ToString
两人对战网络中国象棋3.1具体实现-编程知识网            
'picChess(i).SizeMode = PictureBoxSizeMode.AutoSize
两人对战网络中国象棋3.1具体实现-编程知识网
            picChess(i).Width = 35
两人对战网络中国象棋3.1具体实现-编程知识网            picChess(i).Height 
= 35
两人对战网络中国象棋3.1具体实现-编程知识网            
str = path & "..imageq" & i.ToString & ".jpg"
两人对战网络中国象棋3.1具体实现-编程知识网            
If i < 13 And i > 0 Then picChess(i).Image = Image.FromFile(str)
两人对战网络中国象棋3.1具体实现-编程知识网            
If i < 33 And i > 20 Then picChess(i).Image = Image.FromFile(str)
两人对战网络中国象棋3.1具体实现-编程知识网            picChess(i).Text 
= i.ToString
两人对战网络中国象棋3.1具体实现-编程知识网            picChess(i).Visible 
= False
两人对战网络中国象棋3.1具体实现-编程知识网            picChess(i).BringToFront()
两人对战网络中国象棋3.1具体实现-编程知识网            
'AddHandler CType(picChess(i), PictureBox).Click, AddressOf pic_click
两人对战网络中国象棋3.1具体实现-编程知识网
            AddHandler picChess(i).Click, AddressOf pic_click
两人对战网络中国象棋3.1具体实现-编程知识网        
Next
两人对战网络中国象棋3.1具体实现-编程知识网    
End Sub

两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Private Sub Draw_qizi()Sub Draw_qizi() '显示棋盘上的棋子
两人对战网络中国象棋3.1具体实现-编程知识网
        Dim str As String
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim path As String
两人对战网络中国象棋3.1具体实现-编程知识网        path 
= System.Windows.Forms.Application.StartupPath ' bin路径
两人对战网络中国象棋3.1具体实现-编程知识网
        Dim i As Integer
两人对战网络中国象棋3.1具体实现-编程知识网        
'默认红方棋子在下方,黑方棋子在上方
两人对战网络中国象棋3.1具体实现-编程知识网
        picChess(1).Tag = "" : picChess(21).Tag = ""
两人对战网络中国象棋3.1具体实现-编程知识网        MoveChess(
151) : MoveChess(21510)
两人对战网络中国象棋3.1具体实现-编程知识网        picChess(
2).Tag = "" : picChess(22).Tag = ""
两人对战网络中国象棋3.1具体实现-编程知识网        MoveChess(
241) : MoveChess(22410)
两人对战网络中国象棋3.1具体实现-编程知识网        picChess(
3).Tag = "" : picChess(23).Tag = ""
两人对战网络中国象棋3.1具体实现-编程知识网        MoveChess(
361) : MoveChess(23610)
两人对战网络中国象棋3.1具体实现-编程知识网        picChess(
4).Tag = "" : picChess(24).Tag = ""
两人对战网络中国象棋3.1具体实现-编程知识网        MoveChess(
431) : MoveChess(24310)
两人对战网络中国象棋3.1具体实现-编程知识网        picChess(
5).Tag = "" : picChess(25).Tag = ""
两人对战网络中国象棋3.1具体实现-编程知识网        MoveChess(
571) : MoveChess(25710)
两人对战网络中国象棋3.1具体实现-编程知识网        picChess(
6).Tag = "" : picChess(26).Tag = ""
两人对战网络中国象棋3.1具体实现-编程知识网        MoveChess(
621) : MoveChess(26210)
两人对战网络中国象棋3.1具体实现-编程知识网        picChess(
7).Tag = "" : picChess(27).Tag = ""
两人对战网络中国象棋3.1具体实现-编程知识网        MoveChess(
781) : MoveChess(27810)
两人对战网络中国象棋3.1具体实现-编程知识网        picChess(
8).Tag = "" : picChess(28).Tag = ""
两人对战网络中国象棋3.1具体实现-编程知识网        MoveChess(
811) : MoveChess(28110)
两人对战网络中国象棋3.1具体实现-编程知识网        picChess(
9).Tag = "" : picChess(29).Tag = ""
两人对战网络中国象棋3.1具体实现-编程知识网        MoveChess(
991) : MoveChess(29910)
两人对战网络中国象棋3.1具体实现-编程知识网        picChess(
10).Tag = "" : picChess(30).Tag = ""
两人对战网络中国象棋3.1具体实现-编程知识网        MoveChess(
1023) : MoveChess(3028)
两人对战网络中国象棋3.1具体实现-编程知识网        picChess(
11).Tag = "" : picChess(31).Tag = ""
两人对战网络中国象棋3.1具体实现-编程知识网        MoveChess(
1183) : MoveChess(3188)
两人对战网络中国象棋3.1具体实现-编程知识网        
For i = 12 To 16
两人对战网络中国象棋3.1具体实现-编程知识网            picChess(i).Tag 
= ""
两人对战网络中国象棋3.1具体实现-编程知识网            MoveChess(i, (i 
 12* 2 + 14)
两人对战网络中国象棋3.1具体实现-编程知识网            
str = path & "..imageq12.jpg"
两人对战网络中国象棋3.1具体实现-编程知识网            picChess(i).Image 
= Image.FromFile(str)
两人对战网络中国象棋3.1具体实现-编程知识网            picChess(
20 + i).Tag = ""
两人对战网络中国象棋3.1具体实现-编程知识网            MoveChess(
20 + i, (i  12* 2 + 17)
两人对战网络中国象棋3.1具体实现-编程知识网            
str = path & "..imageq32.jpg"
两人对战网络中国象棋3.1具体实现-编程知识网            picChess(
20 + i).Image = Image.FromFile(str)
两人对战网络中国象棋3.1具体实现-编程知识网        
Next
两人对战网络中国象棋3.1具体实现-编程知识网        
For i = 1 To 16
两人对战网络中国象棋3.1具体实现-编程知识网            picChess(i).Visible 
= True
两人对战网络中国象棋3.1具体实现-编程知识网            picChess(
20 + i).Visible = True
两人对战网络中国象棋3.1具体实现-编程知识网        
Next
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim j, c As Integer
两人对战网络中国象棋3.1具体实现-编程知识网        
'当游戏者是黑方BLACKPLAYER时,需要将棋子对调一下
两人对战网络中国象棋3.1具体实现-编程知识网
        If LocalPlayer = BLACKPLAYER Then
两人对战网络中国象棋3.1具体实现-编程知识网            
For i = 1 To 9
两人对战网络中国象棋3.1具体实现-编程知识网                
For j = 1 To 5
两人对战网络中国象棋3.1具体实现-编程知识网                    
If Map(i, j) <> 0 Then
两人对战网络中国象棋3.1具体实现-编程知识网                        c 
= Map(i, 11  j)
两人对战网络中国象棋3.1具体实现-编程知识网                        MoveChess(Map(i, j), i, 
11  j)
两人对战网络中国象棋3.1具体实现-编程知识网                        MoveChess(c, i, j)
两人对战网络中国象棋3.1具体实现-编程知识网                    
End If
两人对战网络中国象棋3.1具体实现-编程知识网                
Next
两人对战网络中国象棋3.1具体实现-编程知识网            
Next
两人对战网络中国象棋3.1具体实现-编程知识网            SetMyTurn(
False)
两人对战网络中国象棋3.1具体实现-编程知识网        
End If
两人对战网络中国象棋3.1具体实现-编程知识网    
End Sub

两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Private Function GetPointX()Function GetPointX(ByVal x As IntegerAs Integer
两人对战网络中国象棋3.1具体实现-编程知识网        
'屏幕像素坐标转换成在棋盘中坐标值
两人对战网络中国象棋3.1具体实现-编程知识网
        GetPointX = (x)  (2 * r) + 1
两人对战网络中国象棋3.1具体实现-编程知识网    
End Function

两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Private Function GetPointY()Function GetPointY(ByVal y As IntegerAs Integer
两人对战网络中国象棋3.1具体实现-编程知识网        GetPointY 
= (y)  (2 * r) + 1
两人对战网络中国象棋3.1具体实现-编程知识网    
End Function

两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Private Function GetChessX()Function GetChessX(ByVal idx As IntegerAs Integer
两人对战网络中国象棋3.1具体实现-编程知识网        
'棋子在棋盘中坐标值
两人对战网络中国象棋3.1具体实现-编程知识网
        GetChessX = (picChess(idx).Left)  (2 * r) + 1
两人对战网络中国象棋3.1具体实现-编程知识网    
End Function

两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Private Function GetChessY()Function GetChessY(ByVal idx As IntegerAs Integer
两人对战网络中国象棋3.1具体实现-编程知识网        GetChessY 
= (picChess(idx).Top)  (2 * r) + 1
两人对战网络中国象棋3.1具体实现-编程知识网    
End Function

两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Private Function IsMyChess()Function IsMyChess(ByVal idx As IntegerAs Boolean
两人对战网络中国象棋3.1具体实现-编程知识网        
If 0 < idx  LocalPlayer And idx  LocalPlayer < 20 Then
两人对战网络中国象棋3.1具体实现-编程知识网            IsMyChess 
= True
两人对战网络中国象棋3.1具体实现-编程知识网        
Else
两人对战网络中国象棋3.1具体实现-编程知识网            IsMyChess 
= False
两人对战网络中国象棋3.1具体实现-编程知识网        
End If
两人对战网络中国象棋3.1具体实现-编程知识网    
End Function

两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Private Sub pic_click()Sub pic_click(ByVal sender As System.Object, ByVal e As System.EventArgs)
两人对战网络中国象棋3.1具体实现-编程知识网        
'这里处理公共事件 
两人对战网络中国象棋3.1具体实现-编程知识网
        If IsMyTurn = False Then Exit Sub
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim x, y, idx As Integer
两人对战网络中国象棋3.1具体实现-编程知识网        x 
= GetChessX(CInt(CType(sender, PictureBox).Text))
两人对战网络中国象棋3.1具体实现-编程知识网        y 
= GetChessY(CInt(CType(sender, PictureBox).Text))
两人对战网络中国象棋3.1具体实现-编程知识网        
If CurSelect = 0 Then '第一次棋子
两人对战网络中国象棋3.1具体实现-编程知识网
            If Not IsMyChess(Map(x, y)) Then
两人对战网络中国象棋3.1具体实现-编程知识网                Label1.Text 
= "错误!,单击成对方棋子了!"
两人对战网络中国象棋3.1具体实现-编程知识网            
Else
两人对战网络中国象棋3.1具体实现-编程知识网                CurSelect 
= CInt(CType(sender, PictureBox).Text)
两人对战网络中国象棋3.1具体实现-编程知识网                picChess(CurSelect).BackColor 
= System.Drawing.Color.Blue
两人对战网络中国象棋3.1具体实现-编程知识网                step_flag 
= True
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网        
Else '第2次棋子
两人对战网络中国象棋3.1具体实现-编程知识网
            '如果是自己的棋子,则换上次选择的棋子
两人对战网络中国象棋3.1具体实现-编程知识网
            If IsMyChess(Map(x, y)) Then
两人对战网络中国象棋3.1具体实现-编程知识网                
'取消上次选择的棋子,颜色恢复
两人对战网络中国象棋3.1具体实现-编程知识网
                picChess(CurSelect).BackColor = System.Drawing.SystemColors.GrayText
两人对战网络中国象棋3.1具体实现-编程知识网                CurSelect 
= CInt(CType(sender, PictureBox).Text)
两人对战网络中国象棋3.1具体实现-编程知识网                
'设置选择的棋子颜色
两人对战网络中国象棋3.1具体实现-编程知识网
                picChess(CurSelect).BackColor = System.Drawing.Color.Blue
两人对战网络中国象棋3.1具体实现-编程知识网                step_flag 
= True
两人对战网络中国象棋3.1具体实现-编程知识网                
Exit Sub
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网            
If IsAbleToPut(CurSelect, x, y) Then '可以吃子
两人对战网络中国象棋3.1具体实现-编程知识网
                '在map取掉原CurSelect棋子
两人对战网络中国象棋3.1具体实现-编程知识网
                Map(GetChessX(CurSelect), GetChessY(CurSelect)) = 0
两人对战网络中国象棋3.1具体实现-编程知识网                idx 
= CInt(CType(sender, PictureBox).Text)
两人对战网络中国象棋3.1具体实现-编程知识网                picChess(idx).Visible 
= False
两人对战网络中国象棋3.1具体实现-编程知识网                MoveChess(CurSelect, x, y)
两人对战网络中国象棋3.1具体实现-编程知识网                Map(x, y) 
= CurSelect
两人对战网络中国象棋3.1具体实现-编程知识网                
If idx = 1 Then
两人对战网络中国象棋3.1具体实现-编程知识网                    ToolStripStatusLabel1.Text 
= "红方赢了"
两人对战网络中国象棋3.1具体实现-编程知识网                    MessageBox.Show(
"红方赢了""提示")
两人对战网络中国象棋3.1具体实现-编程知识网                    send(
"move" + "|" + Format(CurSelect) + "|" + Format(x) + "|" + Format(11  y))
两人对战网络中国象棋3.1具体实现-编程知识网                    send(
"succ" + "|" + "红方赢了")
两人对战网络中国象棋3.1具体实现-编程知识网                    Button2.Enabled 
= True    '可以重新开始
两人对战网络中国象棋3.1具体实现-编程知识网
                    Exit Sub
两人对战网络中国象棋3.1具体实现-编程知识网                
End If
两人对战网络中国象棋3.1具体实现-编程知识网                
If idx = 21 Then
两人对战网络中国象棋3.1具体实现-编程知识网                    ToolStripStatusLabel1.Text 
= "黑方赢了"
两人对战网络中国象棋3.1具体实现-编程知识网                    MessageBox.Show(
"黑方赢了""提示")
两人对战网络中国象棋3.1具体实现-编程知识网                    send(
"move" + "|" + Format(CurSelect) + "|" + Format(x) + "|" + Format(11  y))
两人对战网络中国象棋3.1具体实现-编程知识网                    send(
"succ" + "|" + "黑方赢了")
两人对战网络中国象棋3.1具体实现-编程知识网                    Button2.Enabled 
= True   '可以重新开始
两人对战网络中国象棋3.1具体实现-编程知识网
                    Exit Sub
两人对战网络中国象棋3.1具体实现-编程知识网                
End If
两人对战网络中国象棋3.1具体实现-编程知识网                ListBox1.Items.Add(
"己方" + CType(sender, PictureBox).Tag.ToString + "走到x" + x.ToString + "y" + y.ToString)
两人对战网络中国象棋3.1具体实现-编程知识网                send(
"move" + "|" + Format(CurSelect) + "|" + Format(x) + "|" + Format(11  y))
两人对战网络中国象棋3.1具体实现-编程知识网                CurSelect 
= 0
两人对战网络中国象棋3.1具体实现-编程知识网                
'该对方了
两人对战网络中国象棋3.1具体实现-编程知识网
                SetMyTurn(False)
两人对战网络中国象棋3.1具体实现-编程知识网                Label1.Text 
= ""
两人对战网络中国象棋3.1具体实现-编程知识网            
Else '不能走棋
两人对战网络中国象棋3.1具体实现-编程知识网
                picChess(CurSelect).BackColor = System.Drawing.SystemColors.GrayText
两人对战网络中国象棋3.1具体实现-编程知识网                Label1.Text 
= "不能走棋"
两人对战网络中国象棋3.1具体实现-编程知识网                CurSelect 
= 0
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网            step_flag 
= False
两人对战网络中国象棋3.1具体实现-编程知识网        
End If
两人对战网络中国象棋3.1具体实现-编程知识网    
End Sub

两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Private Sub picBoard_MouseDown()Sub picBoard_MouseDown(ByVal sender As ObjectByVal e As System.Windows.Forms.MouseEventArgs) Handles picBoard.MouseDown
两人对战网络中国象棋3.1具体实现-编程知识网        
'没有吃子的走棋
两人对战网络中国象棋3.1具体实现-编程知识网
        Dim x, y As Integer
两人对战网络中国象棋3.1具体实现-编程知识网        
If IsMyTurn = False Then Exit Sub
两人对战网络中国象棋3.1具体实现-编程知识网        
If step_flag = True Then
两人对战网络中国象棋3.1具体实现-编程知识网            
'获取鼠标位置
两人对战网络中国象棋3.1具体实现-编程知识网
            x = GetPointX(e.X)
两人对战网络中国象棋3.1具体实现-编程知识网            y 
= GetPointY(e.Y)
两人对战网络中国象棋3.1具体实现-编程知识网            
If IsAbleToPut(CurSelect, x, y) Then
两人对战网络中国象棋3.1具体实现-编程知识网                
'在map取掉原CurSelect棋子
两人对战网络中国象棋3.1具体实现-编程知识网
                Map(GetChessX(CurSelect), GetChessY(CurSelect)) = 0
两人对战网络中国象棋3.1具体实现-编程知识网                MoveChess(CurSelect, x, y)
两人对战网络中国象棋3.1具体实现-编程知识网                Map(x, y) 
= CurSelect
两人对战网络中国象棋3.1具体实现-编程知识网                ListBox1.Items.Add(
"己方" + picChess(CurSelect).Tag.ToString + "走到x" + x.ToString + "y" + y.ToString)
两人对战网络中国象棋3.1具体实现-编程知识网                send(
"move" + "|" + Format(CurSelect) + "|" + Format(x) + "|" + Format(11  y))
两人对战网络中国象棋3.1具体实现-编程知识网                CurSelect 
= 0
两人对战网络中国象棋3.1具体实现-编程知识网                
'该对方了
两人对战网络中国象棋3.1具体实现-编程知识网
                SetMyTurn(False)
两人对战网络中国象棋3.1具体实现-编程知识网                Label1.Text 
= ""
两人对战网络中国象棋3.1具体实现-编程知识网            
Else '错误走棋
两人对战网络中国象棋3.1具体实现-编程知识网
                Label1.Text = "不符合走棋规则"
两人对战网络中国象棋3.1具体实现-编程知识网                picChess(CurSelect).BackColor 
= System.Drawing.SystemColors.GrayText
两人对战网络中国象棋3.1具体实现-编程知识网                CurSelect 
= 0
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网        
End If
两人对战网络中国象棋3.1具体实现-编程知识网        step_flag 
= False
两人对战网络中国象棋3.1具体实现-编程知识网    
End Sub

两人对战网络中国象棋3.1具体实现-编程知识网    
'判断是否能走棋,这代码最难写!
两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网
    Private Function IsAbleToPut()Function IsAbleToPut(ByVal idx As IntegerByVal x As IntegerByVal y As IntegerAs Boolean
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim j, i, c As Integer
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim oldx As Integer, oldy As Integer '原在棋盘坐标
两人对战网络中国象棋3.1具体实现-编程知识网
        oldx = GetChessX(idx)
两人对战网络中国象棋3.1具体实现-编程知识网        oldy 
= GetChessY(idx)
两人对战网络中国象棋3.1具体实现-编程知识网        
If IsMyChess(Map(x, y)) Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网        
If picChess(idx).Tag = "" Or picChess(idx).Tag = "" Then
两人对战网络中国象棋3.1具体实现-编程知识网            
If (x  oldx) * (y  oldy) <> 0 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            
If Abs(x  oldx) > 1 Or Abs(y  oldy) > 1 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            
If x < 4 Or x > 6 Or (y > 3 And y < 8Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            IsAbleToPut 
= True
两人对战网络中国象棋3.1具体实现-编程知识网            
Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网        
End If
两人对战网络中国象棋3.1具体实现-编程知识网        
If picChess(idx).Tag = "" Or picChess(idx).Tag = "" Then
两人对战网络中国象棋3.1具体实现-编程知识网            
If (x  oldx) * (y  oldy) = 0 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            
If Abs(x  oldx) > 1 Or Abs(y  oldy) > 1 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            
If x < 4 Or x > 6 Or (y > 3 And y < 8Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            IsAbleToPut 
= True
两人对战网络中国象棋3.1具体实现-编程知识网            
Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网        
End If
两人对战网络中国象棋3.1具体实现-编程知识网        
If picChess(idx).Tag = "" Or picChess(idx).Tag = "" Then
两人对战网络中国象棋3.1具体实现-编程知识网            
If (x  oldx) * (y  oldy) = 0 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            
If Abs(x  oldx) <> 2 Or Abs(y  oldy) <> 2 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            
If y < 6 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            
If x  oldx = 2 Then
两人对战网络中国象棋3.1具体实现-编程知识网                i 
= x  1
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网            
If x  oldx = 2 Then
两人对战网络中国象棋3.1具体实现-编程知识网                i 
= x + 1
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网            
If y  oldy = 2 Then
两人对战网络中国象棋3.1具体实现-编程知识网                j 
= y  1
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网            
If y  oldy = 2 Then
两人对战网络中国象棋3.1具体实现-编程知识网                j 
= y + 1
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网            
If Map(i, j) <> 0 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            IsAbleToPut 
= True
两人对战网络中国象棋3.1具体实现-编程知识网            
Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网        
End If
两人对战网络中国象棋3.1具体实现-编程知识网        
If picChess(idx).Tag = "" Or picChess(idx).Tag = "" Then
两人对战网络中国象棋3.1具体实现-编程知识网            
If Abs(x  oldx) * Abs(y  oldy) <> 2 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            
If x  oldx = 2 Then
两人对战网络中国象棋3.1具体实现-编程知识网                
If Map(x  1, oldy) <> 0 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网            
If x  oldx = 2 Then
两人对战网络中国象棋3.1具体实现-编程知识网                
If Map(x + 1, oldy) <> 0 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网            
If y  oldy = 2 Then
两人对战网络中国象棋3.1具体实现-编程知识网                
If Map(oldx, y  1<> 0 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网            
If y  oldy = 2 Then
两人对战网络中国象棋3.1具体实现-编程知识网                
If Map(oldx, y + 1<> 0 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网            IsAbleToPut 
= True
两人对战网络中国象棋3.1具体实现-编程知识网            
Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网        
End If
两人对战网络中国象棋3.1具体实现-编程知识网        
If picChess(idx).Tag = "" Or picChess(idx).Tag = "" Then
两人对战网络中国象棋3.1具体实现-编程知识网            
If (x  oldx) * (y  oldy) <> 0 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            
If x <> oldx Then
两人对战网络中国象棋3.1具体实现-编程知识网                
For i = oldx To x Step Abs(x  oldx) / (x  oldx)
两人对战网络中国象棋3.1具体实现-编程知识网                    
If i <> x And i <> oldx Then
两人对战网络中国象棋3.1具体实现-编程知识网                        
If Map(i, y) <> 0 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网                    
End If
两人对战网络中国象棋3.1具体实现-编程知识网                
Next
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网            
If y <> oldy Then
两人对战网络中国象棋3.1具体实现-编程知识网                
For j = oldy To y Step Abs(y  oldy) / (y  oldy)
两人对战网络中国象棋3.1具体实现-编程知识网                    
If j <> y And j <> oldy Then
两人对战网络中国象棋3.1具体实现-编程知识网                        
If Map(x, j) <> 0 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网                    
End If
两人对战网络中国象棋3.1具体实现-编程知识网                
Next
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网            IsAbleToPut 
= True
两人对战网络中国象棋3.1具体实现-编程知识网            
Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网        
End If
两人对战网络中国象棋3.1具体实现-编程知识网        
If picChess(idx).Tag = "" Or picChess(idx).Tag = "" Then
两人对战网络中国象棋3.1具体实现-编程知识网            
If (x  oldx) * (y  oldy) <> 0 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            c 
= 0
两人对战网络中国象棋3.1具体实现-编程知识网            
If x <> oldx Then
两人对战网络中国象棋3.1具体实现-编程知识网                
For i = oldx To x Step Abs(x  oldx) / (x  oldx)
两人对战网络中国象棋3.1具体实现-编程知识网                    
If i <> x And i <> oldx Then
两人对战网络中国象棋3.1具体实现-编程知识网                        
If Map(i, y) <> 0 Then c = c + 1 'IsAbleToPut = False: Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网
                    End If
两人对战网络中国象棋3.1具体实现-编程知识网                
Next
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网            
If y <> oldy Then
两人对战网络中国象棋3.1具体实现-编程知识网                
For j = oldy To y Step Abs(y  oldy) / (y  oldy)
两人对战网络中国象棋3.1具体实现-编程知识网                    
If j <> y And j <> oldy Then
两人对战网络中国象棋3.1具体实现-编程知识网                        
If Map(x, j) <> 0 Then c = c + 1 'IsAbleToPut = False: Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网
                    End If
两人对战网络中国象棋3.1具体实现-编程知识网                
Next
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网            
If c > 1 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            
If c = 0 Then If Map(x, y) <> 0 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            
If c = 1 Then If (IsMyChess(Map(x, y)) Or Map(x, y) = 0Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            IsAbleToPut 
= True
两人对战网络中国象棋3.1具体实现-编程知识网            
Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网        
End If
两人对战网络中国象棋3.1具体实现-编程知识网        
If picChess(idx).Tag = "" Or picChess(idx).Tag = "" Then
两人对战网络中国象棋3.1具体实现-编程知识网            
If (x  oldx) * (y  oldy) <> 0 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            
If Abs(x  oldx) > 1 Or Abs(y  oldy) > 1 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            
If y >= 6 And (x  oldx) <> 0 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            
If y  oldy > 0 Then IsAbleToPut = False : Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网            IsAbleToPut 
= True
两人对战网络中国象棋3.1具体实现-编程知识网            
Exit Function
两人对战网络中国象棋3.1具体实现-编程知识网        
End If
两人对战网络中国象棋3.1具体实现-编程知识网        IsAbleToPut 
= True
两人对战网络中国象棋3.1具体实现-编程知识网    
End Function

两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Private Sub MoveChess()Sub MoveChess(ByVal idx As LongByVal x As LongByVal y As Long)
两人对战网络中国象棋3.1具体实现-编程知识网        picChess(idx).Parent 
= picBoard
两人对战网络中国象棋3.1具体实现-编程知识网        picChess(idx).Left 
= r + (x  1* 2 * r  r + 1
两人对战网络中国象棋3.1具体实现-编程知识网        picChess(idx).Top 
= r + (y  1* 2 * r  r + 1
两人对战网络中国象棋3.1具体实现-编程知识网        picChess(idx).BackColor 
= System.Drawing.SystemColors.GrayText
两人对战网络中国象棋3.1具体实现-编程知识网        Map(x, y) 
= idx
两人对战网络中国象棋3.1具体实现-编程知识网    
End Sub

两人对战网络中国象棋3.1具体实现-编程知识网    
'动画效果移动棋子
两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网
    Private Sub MoveChessTo()Sub MoveChessTo(ByVal idx As LongByVal x As LongByVal y As Long)
两人对战网络中国象棋3.1具体实现-编程知识网        x 
= x * 2 * r  2 * r
两人对战网络中国象棋3.1具体实现-编程知识网        y 
= y * 2 * r  2 * r
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim step1 As Long
两人对战网络中国象棋3.1具体实现-编程知识网        step1 
= Int(Sqrt((x  picChess(idx).Left) ^ 2 + (y  picChess(idx).Top) ^ 2)) / 50
两人对战网络中国象棋3.1具体实现-编程知识网        
If step1 = 0 Then step1 = 1
两人对战网络中国象棋3.1具体实现-编程知识网        
While Abs(picChess(idx).Left  x) > step1 Or Abs(picChess(idx).Top  y) > step1
两人对战网络中国象棋3.1具体实现-编程知识网            
If x <> picChess(idx).Left Then
两人对战网络中国象棋3.1具体实现-编程知识网                picChess(idx).Left 
= picChess(idx).Left + step1 * Abs(picChess(idx).Left  x) / (x  picChess(idx).Left)
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网            
If y <> picChess(idx).Top Then
两人对战网络中国象棋3.1具体实现-编程知识网                picChess(idx).Top 
= picChess(idx).Top + step1 * Abs(picChess(idx).Top  y) / (y  picChess(idx).Top)
两人对战网络中国象棋3.1具体实现-编程知识网            
End If
两人对战网络中国象棋3.1具体实现-编程知识网            System.Windows.Forms.Application.DoEvents()
两人对战网络中国象棋3.1具体实现-编程知识网        
End While
两人对战网络中国象棋3.1具体实现-编程知识网    
End Sub

两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Private Sub cls_map()Sub cls_map()
两人对战网络中国象棋3.1具体实现-编程知识网        
Dim i As Integer, j As Integer
两人对战网络中国象棋3.1具体实现-编程知识网        
For i = 1 To 9
两人对战网络中国象棋3.1具体实现-编程知识网            
For j = 1 To 10
两人对战网络中国象棋3.1具体实现-编程知识网                Map(i, j) 
= 0
两人对战网络中国象棋3.1具体实现-编程知识网            
Next
两人对战网络中国象棋3.1具体实现-编程知识网        
Next
两人对战网络中国象棋3.1具体实现-编程知识网    
End Sub

两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Private Sub Frmchess_Load()Sub Frmchess_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
两人对战网络中国象棋3.1具体实现-编程知识网        step_flag 
= False
两人对战网络中国象棋3.1具体实现-编程知识网        cls_map()
两人对战网络中国象棋3.1具体实现-编程知识网        LoadChess()
两人对战网络中国象棋3.1具体实现-编程知识网    
End Sub

两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Private Sub Button1_Click()Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
两人对战网络中国象棋3.1具体实现-编程知识网        send(
"join|")
两人对战网络中国象棋3.1具体实现-编程知识网        
' 创建一个线程()
两人对战网络中国象棋3.1具体实现-编程知识网
        th = New Thread(AddressOf read)
两人对战网络中国象棋3.1具体实现-编程知识网        th_flag 
= True
两人对战网络中国象棋3.1具体实现-编程知识网        
'启动线程
两人对战网络中国象棋3.1具体实现-编程知识网
        th.Start()
两人对战网络中国象棋3.1具体实现-编程知识网        ToolStripStatusLabel1.Text 
= "程序处于等待联机状态!"
两人对战网络中国象棋3.1具体实现-编程知识网        Button1.Enabled 
= False
两人对战网络中国象棋3.1具体实现-编程知识网        
Call DrawBoard()
两人对战网络中国象棋3.1具体实现-编程知识网        LocalPlayer 
= BLACKPLAYER
两人对战网络中国象棋3.1具体实现-编程知识网    
End Sub

两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Private Sub Button2_Click()Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
两人对战网络中国象棋3.1具体实现-编程知识网        
'重新开始
两人对战网络中国象棋3.1具体实现-编程知识网
        cls_map()
两人对战网络中国象棋3.1具体实现-编程知识网        
If LocalPlayer = REDPLAYER Then '游戏者角色改变
两人对战网络中国象棋3.1具体实现-编程知识网
            LocalPlayer = BLACKPLAYER
两人对战网络中国象棋3.1具体实现-编程知识网        
Else
两人对战网络中国象棋3.1具体实现-编程知识网            LocalPlayer 
= REDPLAYER
两人对战网络中国象棋3.1具体实现-编程知识网            SetMyTurn(
True)
两人对战网络中国象棋3.1具体实现-编程知识网        
End If
两人对战网络中国象棋3.1具体实现-编程知识网        
Call Draw_qizi()
两人对战网络中国象棋3.1具体实现-编程知识网    
End Sub

两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Private Sub Button3_Click()Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
两人对战网络中国象棋3.1具体实现-编程知识网        send(
"exit|")
两人对战网络中国象棋3.1具体实现-编程知识网        Application.Exit()
两人对战网络中国象棋3.1具体实现-编程知识网    
End Sub

两人对战网络中国象棋3.1具体实现-编程知识网
End Class

两人对战网络中国象棋3.1具体实现-编程知识网注意:由于窗体关闭时,线程没有被结束,所以需要重写窗体Dispose事件。
两人对战网络中国象棋3.1具体实现-编程知识网两人对战网络中国象棋3.1具体实现-编程知识网    
Protected Overrides Sub Dispose()Sub Dispose(ByVal disposing As Boolean)
两人对战网络中国象棋3.1具体实现-编程知识网        
Try
两人对战网络中国象棋3.1具体实现-编程知识网            ReadFlag 
= False
两人对战网络中国象棋3.1具体实现-编程知识网            
If Not IsDBNull(udpclient) Then udpclient.Close()
两人对战网络中国象棋3.1具体实现-编程知识网            
If Not IsDBNull(th) Then th.Abort()
两人对战网络中国象棋3.1具体实现-编程知识网            th 
= Nothing
两人对战网络中国象棋3.1具体实现-编程知识网        
Catch
两人对战网络中国象棋3.1具体实现-编程知识网        
End Try
两人对战网络中国象棋3.1具体实现-编程知识网        
If disposing AndAlso components IsNot Nothing Then
两人对战网络中国象棋3.1具体实现-编程知识网            components.Dispose()
两人对战网络中国象棋3.1具体实现-编程知识网        
End If
两人对战网络中国象棋3.1具体实现-编程知识网        
MyBase.Dispose(disposing)
两人对战网络中国象棋3.1具体实现-编程知识网    
End Sub

两人对战网络中国象棋3.1具体实现-编程知识网如果你只有一台电脑,可以把这个项目编译成EXE文件,并且运行两个实例,可以将地址填写为:
127.0.0.1,这样一个作为红方,另一个作为黑方,便可以和自己对弈了。运行效果如图58所示。
两人对战网络中国象棋3.1具体实现-编程知识网 
两人对战网络中国象棋3.1具体实现-编程知识网图5
8  两人对战象棋运行界面
两人对战网络中国象棋3.1具体实现-编程知识网

 

两人对战网络中国象棋3.1具体实现-编程知识网 具题解释请见我即将出版的VB2005.net应用书!!