⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.frm

📁 一个不错的游戏程序
💻 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 + -