📄 form1.frm
字号:
VERSION 5.00
Object = "{6B7E6392-850A-101B-AFC0-4210102A8DA7}#1.3#0"; "COMCTL32.OCX"
Object = "{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "MSCOMM32.OCX"
Begin VB.Form Form1
BorderStyle = 4 'Fixed ToolWindow
Caption = "五子棋擂台"
ClientHeight = 4080
ClientLeft = 150
ClientTop = 660
ClientWidth = 3855
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ScaleHeight = 4080
ScaleWidth = 3855
ShowInTaskbar = 0 'False
StartUpPosition = 3 '窗口缺省
Begin VB.Timer Timer1
Interval = 50
Left = 1920
Top = 600
End
Begin MSCommLib.MSComm MSComm1
Left = 960
Top = 480
_ExtentX = 1005
_ExtentY = 1005
_Version = 393216
DTREnable = -1 'True
End
Begin ComctlLib.StatusBar Status1
Align = 2 'Align Bottom
Height = 375
Left = 0
TabIndex = 1
Top = 3705
Width = 3855
_ExtentX = 6800
_ExtentY = 661
Style = 1
SimpleText = ""
_Version = 327682
BeginProperty Panels {0713E89E-850A-101B-AFC0-4210102A8DA7}
NumPanels = 1
BeginProperty Panel1 {0713E89F-850A-101B-AFC0-4210102A8DA7}
Key = ""
Object.Tag = ""
EndProperty
EndProperty
End
Begin VB.PictureBox Picture1
AutoRedraw = -1 'True
BackColor = &H8000000E&
FillStyle = 0 'Solid
Height = 975
Left = 600
ScaleHeight = 61
ScaleMode = 3 'Pixel
ScaleWidth = 93
TabIndex = 0
Top = 1920
Width = 1455
End
Begin VB.Menu File
Caption = "文件"
Begin VB.Menu Game
Caption = "新游戏"
End
Begin VB.Menu Separate
Caption = "-"
End
Begin VB.Menu Exit
Caption = "退出"
End
End
Begin VB.Menu Link
Caption = "连接"
Begin VB.Menu new_Link
Caption = "新建连接"
End
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim DataArray(10, 10) As Integer
Dim Link_T As Integer
Dim Other_T As Integer
Dim Drawing As Boolean
Dim Buffer As String
Dim ErrorCode As Integer
Const SubWidth As Integer = 20
Private Sub Exit_Click()
Unload Me
End Sub
Private Sub Form_Load()
Dim X As Integer
Dim Y As Integer
Dim Port As Integer
'获得屏幕的大小
X = Screen.Width
Y = Screen.Height
'计算屏幕左上角的坐标
X = (X - Me.Width) / 2
Y = (Y - Me.Height) / 2
Me.Move X, Y
'初始化数据
Link_T = 1
Other_T = 2
Drawing = False
'打开串口1
MSComm1.CommPort = 1
MSComm1.PortOpen = True
End Sub
Private Sub Form_Resize()
'调整绘图区大小 , 使用Move方法比直接设置属性效率较高
Picture1.Move ScaleLeft, ScaleTop, _
ScaleWidth, ScaleHeight
'绘制棋盘
For i = 1 To 10
Picture1.Line (SubWidth, SubWidth * i)-(SubWidth * 10, SubWidth * i)
Picture1.Line (SubWidth * i, SubWidth)-(SubWidth * i, SubWidth * 10)
Next i
End Sub
Private Sub Game_Click()
Call NewGame
'发送开始新游戏的命令
MSComm1.Output = "NEW" + Chr(26)
End Sub
Private Sub Timer1_Timer()
'定时查询串口的状态
If MSComm1.InBufferCount Then
Buffer = Buffer + MSComm1.Input
End If
If InStr(1, Buffer, Chr(26)) Then
'收到一个完整命令,Chr(26)在本程序中定义为命令行结束符
RemoteControl
End If
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim X1 As Integer
Dim Y1 As Integer
If Not Drawing Then
Exit Sub
End If
'计算棋格位置
X = X + SubWidth / 2
Y = Y + SubWidth / 2
X1 = X \ SubWidth
Y1 = Y \ SubWidth
If DataArray(X1, Y1) Then
'当前位置已经有棋子
Exit Sub
End If
DataArray(X1, Y1) = Link_T '记录当前走棋
'绘棋子
If Link_T = 1 Then
Picture1.FillColor = &HFFFFFF
Else
Picture1.FillColor = 0
End If
Picture1.Circle (X1 * SubWidth, Y1 * SubWidth), SubWidth / 3
Drawing = False '停止我方走棋
Status1.SimpleText = "对方走,请稍候 ..."
'发送走棋位置
MSComm1.Output = "DATA" + Str(X1) + "," + Str(Y1) + "," + Chr(26) + Chr(13)
End Sub
Private Sub new_Link_Click()
'申请连接
Dim Wait As String
MSComm1.Output = "Linking" + Chr(26) '发送连接申请
Wait = Waiting("CONNECTED", 5) '等待响应
If ErrorCode Then
Status1.SimpleText = "连接失败,请查看端口是否连接。"
Else
'连接已成功
Link_T = 2
Other_T = 1
Drawing = True
Status1.SimpleText = "连接成功,你先走"
End If
End Sub
Private Function Waiting(Strings As String, WaitTime As Integer) As String
Dim EndTime As Long
EndTime = Timer + WaitTime
'初始化变量
Buffer = ""
ErrorCode = 0
Do
DoEvents
If MSComm1.InBufferCount Then
'接收数据
Buffer = Buffer + MSComm1.Input
If InStr(1, Buffer, Strings) Then
'接收到等待的字符串
Exit Do
End If
End If
If Timer >= EndTime Or ErrorCode Then
'等待超时
ErrorCode = 1
Exit Do
End If
Loop
'返回接收的字符串
Waiting = Buffer
End Function
Private Sub NewGame()
Dim i As Integer
Dim j As Integer
'清空数据区
For i = 0 To 10
For j = 0 To 10
DataArray(i, j) = 0
Next j, i
If Link_T = 2 Then
Drawing = True
End If
Picture1.Cls
Form_Resize
End Sub
'远程数据处理函数
Private Sub RemoteControl()
Dim TempStart As Integer
Dim TempEnd As Integer
Dim X0 As Integer
Dim Y0 As Integer
'判断是否有连接申请
'Buffer字符串由定时器处理生成
TempStart = InStr(1, Buffer, "Linking")
If TempStart Then
Call NewGame
MSComm1.Output = "CONNECTED" + Chr(26)
Buffer = ""
Exit Sub
End If
'判断是否收到重新开始命令
TempStart = InStr(1, Buffer, "NEW")
If TempStart Then
Call NewGame
Buffer = ""
End If
'判断是否收到对方走棋数据
TempStart = InStr(1, Buffer, "DATA")
If TempStart Then
'解码走棋位置,该位置的信息是通过一定的编码( Picture1_MouseDown 程序),以字符串形式传送
TempEnd = InStr(1, Buffer, ",")
X0 = Val(Mid(Buffer, TempStart + 4, TempEnd - TempStart - 4))
TempStart = TempEnd + 1
TempEnd = InStr(TempStart, Buffer, ",")
Y0 = Val(Mid(Buffer, TempStart, TempEnd - TempStart))
DataArray(X0, Y0) = Other_T
'设置棋子颜色
If Other_T = 1 Then
Picture1.FillColor = &HFFFFFF
Else
Picture1.FillColor = 0
End If
'绘制棋子
Picture1.Circle (X0 * SubWidth, Y0 * SubWidth), SubWidth / 3
Drawing = True
Status1.SimpleText = "你走 !"
Buffer = ""
Exit Sub
End If
TempStart = InStr(1, Buffer, "LOSS")
If TempStart Then
Status1.SimpleText = "你已经输了 !"
Buffer = ""
Exit Sub
End If
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -