基于 VB6的猜拳游戏

基于 VB6的猜拳游戏

1 欢迎页的制作

  • welcomeFrom

    在这里插入图片描述
    在这里插入图片描述
    添加一个定时器
    在这里插入图片描述

代码如下:

	Private Sub Form_Load()'定时器Timer1的时间间隔设置为1000毫秒Timer1.Interval = 1000Timer1.Enabled = TrueEnd SubPrivate Sub Timer1_Timer()'关闭当前窗体Unload MeReadyFrom.ShowEnd Sub

2 准备页的制作

  • 放Image数组 组件在这里插入图片描述
    在这里插入图片描述

  • 下面再放一个Image,以便拖动选择头像
    在这里插入图片描述

  • 如下
    在这里插入图片描述

  • 设置图片拖动图标属性DragIcon

  • 拖动头像代码如下

Public intIndex As Integer ' 当前图片索引
Public intFlag As Integer ' 标记变量,用于判断是否选择了图片
' 图片控件的鼠标按下事件
Private Sub Image1_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)Image1(Index).Drag vbBeginDrag ' 开始拖动图片intIndex = Index ' 记录当前图片的索引
End Sub
' 图片控件的放下事件
Private Sub Image2_DragDrop(Source As Control, X As Single, Y As Single)Image2.Picture = Image1(intIndex).Picture ' 将拖动的图片设置为目标图片intFlag = 1 ' 设置标记变量为1,表示已选择了图片
End Sub
  • 加入一个按钮和文本框
    在这里插入图片描述
  • 代码如下
Private Sub nameEdit_KeyDown(KeyCode As Integer, Shift As Integer)' 按下Enter键时触发事件If KeyCode = 13 ThenCall playGameEnd If
End SubPrivate Sub playBtn_Click()Call playGame
End SubPrivate Sub playGame()' 游戏开始逻辑If nameEdit.Text = "" ThenMsgBox "お名前をご入力ください!" ' 提示输入用户名ElseIf intFlag = 0 ThenMsgBox "アバターを選択してください" ' 提示选择一张图片ElsestrUserName = nameEdit.Text ' 获取用户输入的用户名' 显示游戏主界面并关闭当前窗体gameFrom.ShowUnload MeEnd If
End Sub

3 游戏页的制作

  • 页面图
    在这里插入图片描述
1 显示选择的头像和用户名

在这里插入图片描述
代码如下:

Dim strMyName As String ' 玩家名称
Private Sub Form_Load()Call pageInit' 初始化界面控件状态'历史聊天框historyEdit.Locked = True'连接IP按钮connectBtn.Enabled = False'发送信息按钮sendBtn.Enabled = False'发送信息文本区textEdit.Enabled = False'选择石头剪刀按钮myChoiceBtn.Enabled = FalseEnd Sub' 页面初始化函数
Private Sub pageInit()If ReadyFrom.intIndex = 0 ThenstrImgPath = "\img\img0.jpg"ElseIf ReadyFrom.intIndex = 1 ThenstrImgPath = "\img\img1.jpg"ElseIf ReadyFrom.intIndex = 2 ThenstrImgPath = "\img\img2.jpeg"ElseIf ReadyFrom.intIndex = 3 ThenstrImgPath = "\img\img3.jpg"ElseIf ReadyFrom.intIndex = 4 ThenstrImgPath = "\img\img4.jpg"End If' 加载图片到界面myImg.Picture = LoadPicture(App.Path & strImgPath)' 设置玩家名称myNameLable.Caption = ReadyFrom.strUserNamestrMyName = ReadyFrom.strUserName
End Sub
2 石头剪刀布显示在我的选择框中

在这里插入图片描述代码如下:

Dim strChoosedImgPath As String ' 选择的图片路径
Dim boolImgFlag As Boolean ' 是否可以选择图片
Dim boolMePunches As Boolean ' 我的出拳情况'单机imgGame组件事件
Private Sub imgGame_Click(Index As Integer)If boolImgFlag Or boolMePunches = False Then' 显示对手选择的默认图片FriChoiceImg.Picture = LoadPicture(App.Path & "\img\img5.jpg")If Index = 0 ThenstrChoosed = 1 ' 石头strChoosedImgPath = "\img\shi.jpg"ElseIf Index = 1 ThenstrChoosed = 2 ' 剪刀strChoosedImgPath = "\img\jian.jpg"ElseIf Index = 2 ThenstrChoosed = 3 ' 布strChoosedImgPath = "\img\bu.jpg"End If' 启用确认按钮myChoiceBtn.Enabled = TrueMyChoiceImg.Picture = LoadPicture(App.Path & strChoosedImgPath)ElseMsgBox "当前不能选择手势或已经出拳,请等待对手出拳完成后再操作"End If
End Sub
3 ip是否正确地址的检验,及利用Winsock进行udp连接作成简单聊天
  • 引入Winsock,并设置protocol
    在这里插入图片描述
    在这里插入图片描述

  • 检验文本框ip是否正确
    在这里插入图片描述

Dim strIpAddress As String ' IP地址
'校验IP地址
Private Sub friendIpEdit_Change()connectBtn.Enabled = False  ' 禁用连接按钮' 获取用户输入的IP地址strIpAddress = friendIpEdit.Text' 检查IP地址是否合法If IsValidstrIpAddress(strIpAddress) ThenconnectBtn.Enabled = True  ' 若IP地址合法,则启用连接按钮End If
End Sub
' 校验IP地址是否合法的函数
Public Function IsValidstrIpAddress(ByVal strIpAddress As String) As Boolean' 声明变量Dim parts() As String  ' 用于存储IP地址各部分的数组Dim i As Integer  ' 循环计数器Dim temp As Integer  ' 临时存储转换后的IP地址部分值' 使用"."分割IP地址字符串并存入数组partsparts = Split(strIpAddress, ".")' 判断IP地址部分数量是否为4If UBound(parts) <> 3 ThenIsValidstrIpAddress = False  ' 返回FalseExit Function  ' 退出函数End If' 遍历IP地址的各个部分For i = LBound(parts) To UBound(parts)' 判断是否为数字If Not IsNumeric(parts(i)) ThenIsValidstrIpAddress = False  ' 返回FalseExit Function  ' 退出函数End If' 将IP地址部分转换为整数并判断是否在0~255范围内temp = CInt(parts(i))If temp < 0 Or temp > 255 ThenIsValidstrIpAddress = False  ' 返回FalseExit Function  ' 退出函数End IfNext i' 若通过上述检查,则IP地址合法,返回TrueIsValidstrIpAddress = True
End Function
  • udp的连接及聊天和状态显示
    在这里插入图片描述

代码如下

Dim strImgPath As String ' 图片路径
Dim strDataName As String ' 数据名称
Dim boolConnectFlag As Boolean ' 是否连接状态
Dim boolImgFlag As Boolean ' 是否可以选择图片
' 发起连接按钮点击事件
Private Sub Form_Load()Dim ipname As StringDim Bind() As String' 获取本地IP地址ipname = Winsock.LocalIP' 将IP地址按点分割成数组Bind = Split(ipname, ".")' 绑定本地IP和端口号,端口号为1000 + IP地址的最后一位Winsock.Bind (1000 + Bind(3))boolImgFlag = TrueboolConnectFlag = True
End Sub
Private Sub connectBtn_Click()On Error Resume Next' 设置远程主机IP和端口号With Winsock.RemoteHost = strIpAddressDim RemotePort() As StringRemotePort = Split(strIpAddress, ".").RemotePort = (1000 + RemotePort(3))End With' 发送初始化消息包括玩家名称和图片路径Winsock.SendData "#InitSend#" & strMyName & "#" & strImgPathIf Err.Number <> 0 ThenMsgBox (Err.Description)Err.ClearEnd If
End SubPrivate Sub sendBtn_Click()' 检查文本编辑框是否有内容If textEdit.Text <> "" ThenhistoryEdit.Text = historyEdit.Text & "---mine---" & vbCrLf  ' 在历史记录中添加发送消息标识historyEdit.Text = historyEdit.Text & textEdit.Text & vbCrLf  ' 在历史记录中添加发送的文本内容' 发送消息包括玩家名称和文本内容Winsock.SendData "@MsgSend@" & strMyName & "@" & textEdit.Text  ' 发送消息数据textEdit.Text = ""  ' 清空文本编辑框内容ElseMsgBox "请输入要发送的消息内容"  ' 如果文本编辑框内容为空,弹出提示框End If
End Sub'接受数据处理
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)Dim strData As String  ' 定义字符串变量用于存储接收的数据Dim strDatas() As String  ' 定义字符串数组用于存储分割后的数据Dim strDataTxt As String  ' 定义字符串变量用于存储文本数据Dim strDataImgPath As String  ' 定义字符串变量用于存储图片路径' 接收数据Winsock.GetData strDataIf InStr(strData, "#InitSend#") Then' 如果接收到初始化数据strDatas = Split(strData, "#")  ' 使用#符号分割数据strDataName = strDatas(2)  ' 获取对方名称strDataImgPath = strDatas(3)  ' 获取对方头像路径friendNameLable.Caption = strDataName  ' 设置对方名称标签显示内容Print (strDataImgPath)'friendImg.Picture = LoadPicture(App.Path & strDataImgPath)  ' 加载对方头像图片' 如果是刚连接上,则回复初始化消息If boolConnectFlag ThenWinsock.SendData "#InitSend#" & strMyName & "#" & strImgPath  ' 回复初始化消息boolConnectFlag = False  ' 将连接标志设为FalseEnd IfsendBtn.Enabled = True  ' 启用发送按钮textEdit.Enabled = True  ' 启用文本编辑框ElseIf InStr(strData, "#MsgSend#") Then' 如果接收到消息数据strDatas = Split(strData, "#")  ' 使用#符号分割数据strDataName = strDatas(2)  ' 获取对方名称strDataTxt = strDatas(3)  ' 获取消息内容historyEdit.Text = historyEdit.Text & "---" & strDataName & "---" & vbCrLf  ' 在历史记录中添加对方名称historyEdit.Text = historyEdit.Text & strDataTxt & vbCrLf  ' 在历史记录中添加消息内容historyEdit.SelStart = Len(historyEdit.Text)  ' 将光标定位到文本末尾End If
End Sub
  • 猜拳游戏的完成
    代码如下:
Dim strChoosed As String ' 选择的手势
Dim strMyName As String ' 玩家名称
Dim IntGameNumber As Integer ' 游戏局数
Dim strDataChoPath As String ' 数据路径
Dim strDataFriChoe As String ' 对手选择
Dim strGame As String ' 我和对手的选择Dim boolFriPunches As Boolean ' 对手的出拳情况Private Sub Form_Load()boolMePunches = FalseboolFriPunches = False
End SubPrivate Sub myChoiceBtn_Click()' 禁用确认按钮myChoiceBtn.Enabled = FalseboolMePunches = True' 发送游戏出拳消息包括玩家名称和选择的手势Winsock.SendData "@GameSend@" & strMyName & "@" & strChoosed & "@" & strChoosedImgPathhistoryEdit.Text = historyEdit.Text & "等待对手出拳..." & vbCrLf' 如果双方都已出拳,则判断胜负If boolMePunches And boolFriPunches ThenWinOrLoseEnd IfboolImgFlag = False
End SubPrivate Sub Winsock_DataArrival(ByVal bytesTotal As Long)Dim strData As String  ' 定义字符串变量用于存储接收的数据Dim strDatas() As String  ' 定义字符串数组用于存储分割后的数据Dim strDataTxt As String  ' 定义字符串变量用于存储文本数据Dim strDatastrImgPath As String  ' 定义字符串变量用于存储图片路径' 接收数据Winsock.GetData strDataIf InStr(strData, "@InitSend@") Then' 如果接收到初始化数据strDatas = Split(strData, "@")  ' 使用@符号分割数据strDataName = strDatas(2)  ' 获取对方名称strDatastrImgPath = strDatas(3)  ' 获取对方头像路径friendNameLable.Caption = strDataName  ' 设置对方名称标签显示内容friendImg.Picture = LoadPicture(App.Path & strDatastrImgPath)  ' 加载对方头像图片' 如果是刚连接上,则回复初始化消息If boolConnectFlag ThenWinsock.SendData "@InitSend@" & strMyName & "@" & strImgPath  ' 回复初始化消息boolConnectFlag = False  ' 将连接标志设为FalseEnd IfsendBtn.Enabled = True  ' 启用发送按钮textEdit.Enabled = True  ' 启用文本编辑框ElseIf InStr(strData, "@GameSend@") Then' 如果接收到游戏数据strDatas = Split(strData, "@")  ' 使用@符号分割数据strDataName = strDatas(2)  ' 获取对方名称strDataFriChoe = strDatas(3)  ' 获取对方选择strDataChoPath = strDatas(4)  ' 获取对方选择图片路径boolFriPunches = True  ' 对方已出拳标志设为True' 如果双方都已出拳,则判断胜负If boolMePunches And boolFriPunches ThenWinOrLose  ' 调用判断胜负函数End If   ElseIf InStr(strData, "@MsgSend@") Then' 如果接收到消息数据strDatas = Split(strData, "@")  ' 使用@符号分割数据strDataName = strDatas(2)  ' 获取对方名称strDataTxt = strDatas(3)  ' 获取消息内容historyEdit.Text = historyEdit.Text & "---" & strDataName & "---" & vbCrLf  ' 在历史记录中添加对方名称historyEdit.Text = historyEdit.Text & strDataTxt & vbCrLf  ' 在历史记录中添加消息内容historyEdit.SelStart = Len(historyEdit.Text)  ' 将光标定位到文本末尾ElseIf InStr(strData, "@endSend@") Then' 如果接收到结束连接数据MsgBox "对方已断开连接"  ' 弹出提示对话框friendImg.Picture = LoadPicture(App.Path & "\img\img5.jpg")  ' 加载默认对方头像friendNameLable.Caption = "???"  ' 设置对方名称为问号FriChoiceImg.Picture = LoadPicture(App.Path & "\img\img5.jpg")  ' 加载默认选择图片strDataChoPath = ""  ' 清空选择图片路径strDataFriChoe = ""  ' 清空对方选择strGame = ""  ' 清空游戏状态strDataName = ""  ' 清空对方名称End If
End SubPrivate Sub WinOrLose()' 显示对手选择的图片FriChoiceImg.Picture = LoadPicture(App.Path & strDataChoPath)' 判断胜负strGame = strChoosed & strDataFriChoeSelect Case strGameCase "11"MsgBox "平局"DisResults ("0")Case "12"MsgBox "你赢了"DisResults (strMyName)Case "13"MsgBox "对方赢了"DisResults (strDataName)Case "21"MsgBox "对方赢了"DisResults (strDataName)Case "22"MsgBox "平局"DisResults ("0")Case "23"MsgBox "你赢了"DisResults (strMyName)Case "31"MsgBox "你赢了"DisResults (strMyName)Case "32"MsgBox "对方赢了"DisResults (strDataName)Case "33"MsgBox "平局"DisResults ("0")End SelectboolImgFlag = TrueIntGameNumber = 0strChoosed = ""strDataFriChoe = ""strDataChoPath = ""strDataFriChoe = ""strGame = ""boolFriPunches = FalseboolMePunches = FalseboolImgFlag = True
End SubPrivate Sub DisResults(str As String)If str = "0" ThenhistoryEdit.Text = historyEdit.Text & vbCrLf & "--**平局**--" & vbCrLf & vbCrLfElsehistoryEdit.Text = historyEdit.Text & vbCrLf & "结果--" & str & "--胜利" & vbCrLf & vbCrLfEnd IfhistoryEdit.Text = historyEdit.Text & "------------------------" & vbCrLf & vbCrLfhistoryEdit.SelStart = Len(historyEdit.Text)
End Sub
  • 该页总代码
Dim strImgPath As String ' 图片路径
Dim strMyName As String ' 玩家名称
Dim strChoosedImgPath As String ' 选择的图片路径
Dim strIpAddress As String ' IP地址
Dim strDataName As String ' 数据名称
Dim boolConnectFlag As Boolean ' 是否连接状态Dim strChoosed As String ' 选择的手势
Dim IntGameNumber As Integer ' 游戏局数
Dim strDataChoPath As String ' 数据路径
Dim strDataFriChoe As String ' 对手选择
Dim strGame As String ' 我和对手的选择Dim boolFriPunches As Boolean ' 对手的出拳情况Dim boolImgFlag As Boolean ' 是否可以选择图片
Dim boolMePunches As Boolean ' 我的出拳情况
Private Sub Form_Load()Call pageInit' 初始化界面控件状态'历史聊天框historyEdit.Locked = True'连接IP按钮connectBtn.Enabled = False'发送信息按钮sendBtn.Enabled = False'发送信息文本区textEdit.Enabled = False'选择石头剪刀按钮myChoiceBtn.Enabled = FalseDim ipname As StringDim Bind() As String' 获取本地IP地址ipname = Winsock.LocalIP' 将IP地址按点分割成数组Bind = Split(ipname, ".")' 绑定本地IP和端口号,端口号为1000 + IP地址的最后一位Winsock.Bind (1000 + Bind(3))boolMePunches = FalseboolFriPunches = FalseboolImgFlag = TrueboolConnectFlag = True
End SubPrivate Sub myChoiceBtn_Click()' 禁用确认按钮myChoiceBtn.Enabled = FalseboolMePunches = True' 发送游戏出拳消息包括玩家名称和选择的手势Winsock.SendData "#GameSend#" & strMyName & "#" & strChoosed & "#" & strChoosedImgPathhistoryEdit.Text = historyEdit.Text & "等待对手出拳..." & vbCrLf' 如果双方都已出拳,则判断胜负If boolMePunches And boolFriPunches ThenWinOrLoseEnd IfboolImgFlag = False
End Sub' 发起连接按钮点击事件
Private Sub connectBtn_Click()On Error Resume Next' 设置远程主机IP和端口号With Winsock.RemoteHost = strIpAddressDim RemotePort() As StringRemotePort = Split(strIpAddress, ".").RemotePort = (1000 + RemotePort(3))End With' 发送初始化消息包括玩家名称和图片路径Winsock.SendData "#InitSend#" & strMyName & "#" & strImgPathIf Err.Number <> 0 ThenMsgBox (Err.Description)Err.ClearEnd If
End SubPrivate Sub sendBtn_Click()' 检查文本编辑框是否有内容If textEdit.Text <> "" ThenhistoryEdit.Text = historyEdit.Text & "---mine---" & vbCrLf  ' 在历史记录中添加发送消息标识historyEdit.Text = historyEdit.Text & textEdit.Text & vbCrLf  ' 在历史记录中添加发送的文本内容' 发送消息包括玩家名称和文本内容Winsock.SendData "#MsgSend#" & strMyName & "#" & textEdit.Text  ' 发送消息数据textEdit.Text = ""  ' 清空文本编辑框内容ElseMsgBox "请输入要发送的消息内容"  ' 如果文本编辑框内容为空,弹出提示框End If
End Sub'接受数据处理
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)Dim strData As String  ' 定义字符串变量用于存储接收的数据Dim strDatas() As String  ' 定义字符串数组用于存储分割后的数据Dim strDataTxt As String  ' 定义字符串变量用于存储文本数据Dim strDataImgPath As String  ' 定义字符串变量用于存储图片路径' 接收数据Winsock.GetData strDataIf InStr(strData, "#InitSend#") Then' 如果接收到初始化数据strDatas = Split(strData, "#")  ' 使用#符号分割数据strDataName = strDatas(2)  ' 获取对方名称strDataImgPath = strDatas(3)  ' 获取对方头像路径friendNameLable.Caption = strDataName  ' 设置对方名称标签显示内容friendImg.Picture = LoadPicture(App.Path & strDataImgPath)  ' 加载对方头像图片' 如果是刚连接上,则回复初始化消息If boolConnectFlag ThenWinsock.SendData "#InitSend#" & strMyName & "#" & strImgPath  ' 回复初始化消息boolConnectFlag = False  ' 将连接标志设为FalseEnd IfsendBtn.Enabled = True  ' 启用发送按钮textEdit.Enabled = True  ' 启用文本编辑框ElseIf InStr(strData, "#GameSend#") Then' 如果接收到游戏数据strDatas = Split(strData, "#")  ' 使用#符号分割数据strDataName = strDatas(2)  ' 获取对方名称strDataFriChoe = strDatas(3)  ' 获取对方选择strDataChoPath = strDatas(4)  ' 获取对方选择图片路径boolFriPunches = True  ' 对方已出拳标志设为True' 如果双方都已出拳,则判断胜负If boolMePunches And boolFriPunches ThenWinOrLose  ' 调用判断胜负函数End IfElseIf InStr(strData, "#MsgSend#") Then' 如果接收到消息数据strDatas = Split(strData, "#")  ' 使用#符号分割数据strDataName = strDatas(2)  ' 获取对方名称strDataTxt = strDatas(3)  ' 获取消息内容historyEdit.Text = historyEdit.Text & "---" & strDataName & "---" & vbCrLf  ' 在历史记录中添加对方名称historyEdit.Text = historyEdit.Text & strDataTxt & vbCrLf  ' 在历史记录中添加消息内容historyEdit.SelStart = Len(historyEdit.Text)  ' 将光标定位到文本末尾ElseIf InStr(strData, "#endSend#") Then' 如果接收到结束连接数据MsgBox "对方已断开连接"  ' 弹出提示对话框friendImg.Picture = LoadPicture(App.Path & "\img\img5.jpg")  ' 加载默认对方头像friendNameLable.Caption = "???"  ' 设置对方名称为问号FriChoiceImg.Picture = LoadPicture(App.Path & "\img\img5.jpg")  ' 加载默认选择图片strDataChoPath = ""  ' 清空选择图片路径strDataFriChoe = ""  ' 清空对方选择strGame = ""  ' 清空游戏状态strDataName = ""  ' 清空对方名称End If
End Sub
Private Sub WinOrLose()' 显示对手选择的图片FriChoiceImg.Picture = LoadPicture(App.Path & strDataChoPath)' 判断胜负strGame = strChoosed & strDataFriChoeSelect Case strGameCase "11"MsgBox "平局"DisResults ("0")Case "12"MsgBox "你赢了"DisResults (strMyName)Case "13"MsgBox "对方赢了"DisResults (strDataName)Case "21"MsgBox "对方赢了"DisResults (strDataName)Case "22"MsgBox "平局"DisResults ("0")Case "23"MsgBox "你赢了"DisResults (strMyName)Case "31"MsgBox "你赢了"DisResults (strMyName)Case "32"MsgBox "对方赢了"DisResults (strDataName)Case "33"MsgBox "平局"DisResults ("0")End SelectboolImgFlag = TrueIntGameNumber = 0strChoosed = ""strDataFriChoe = ""strDataChoPath = ""strDataFriChoe = ""strGame = ""boolFriPunches = FalseboolMePunches = FalseboolImgFlag = True
End SubPrivate Sub DisResults(str As String)If str = "0" ThenhistoryEdit.Text = historyEdit.Text & vbCrLf & "--**平局**--" & vbCrLf & vbCrLfElsehistoryEdit.Text = historyEdit.Text & vbCrLf & "结果--" & str & "--胜利" & vbCrLf & vbCrLfEnd IfhistoryEdit.Text = historyEdit.Text & "------------------------" & vbCrLf & vbCrLfhistoryEdit.SelStart = Len(historyEdit.Text)
End Sub'单机imgGame组件事件
Private Sub imgGame_Click(Index As Integer)If boolImgFlag Or boolMePunches = False Then' 显示对手选择的默认图片FriChoiceImg.Picture = LoadPicture(App.Path & "\img\img5.jpg")If Index = 0 ThenstrChoosed = 1 ' 石头strChoosedImgPath = "\img\shi.jpg"ElseIf Index = 1 ThenstrChoosed = 2 ' 剪刀strChoosedImgPath = "\img\jian.jpg"ElseIf Index = 2 ThenstrChoosed = 3 ' 布strChoosedImgPath = "\img\bu.jpg"End If' 启用确认按钮myChoiceBtn.Enabled = TrueMyChoiceImg.Picture = LoadPicture(App.Path & strChoosedImgPath)ElseMsgBox "当前不能选择手势或已经出拳,请等待对手出拳完成后再操作"End If
End Sub'校验IP地址
Private Sub friendIpEdit_Change()connectBtn.Enabled = False  ' 禁用连接按钮' 获取用户输入的IP地址strIpAddress = friendIpEdit.Text' 检查IP地址是否合法If IsValidstrIpAddress(strIpAddress) ThenconnectBtn.Enabled = True  ' 若IP地址合法,则启用连接按钮End If
End Sub' 校验IP地址是否合法的函数
Public Function IsValidstrIpAddress(ByVal strIpAddress As String) As Boolean' 声明变量Dim parts() As String  ' 用于存储IP地址各部分的数组Dim i As Integer  ' 循环计数器Dim temp As Integer  ' 临时存储转换后的IP地址部分值' 使用"."分割IP地址字符串并存入数组partsparts = Split(strIpAddress, ".")' 判断IP地址部分数量是否为4If UBound(parts) <> 3 ThenIsValidstrIpAddress = False  ' 返回FalseExit Function  ' 退出函数End If' 遍历IP地址的各个部分For i = LBound(parts) To UBound(parts)' 判断是否为数字If Not IsNumeric(parts(i)) ThenIsValidstrIpAddress = False  ' 返回FalseExit Function  ' 退出函数End If' 将IP地址部分转换为整数并判断是否在0~255范围内temp = CInt(parts(i))If temp < 0 Or temp > 255 ThenIsValidstrIpAddress = False  ' 返回FalseExit Function  ' 退出函数End IfNext i' 若通过上述检查,则IP地址合法,返回TrueIsValidstrIpAddress = True
End Function' 页面初始化函数
Private Sub pageInit()If ReadyFrom.intIndex = 0 ThenstrImgPath = "\img\img0.jpg"ElseIf ReadyFrom.intIndex = 1 ThenstrImgPath = "\img\img1.jpg"ElseIf ReadyFrom.intIndex = 2 ThenstrImgPath = "\img\img2.jpeg"ElseIf ReadyFrom.intIndex = 3 ThenstrImgPath = "\img\img3.jpg"ElseIf ReadyFrom.intIndex = 4 ThenstrImgPath = "\img\img4.jpg"End If' 加载图片到界面myImg.Picture = LoadPicture(App.Path & strImgPath)' 设置玩家名称myNameLable.Caption = ReadyFrom.strUserNamestrMyName = ReadyFrom.strUserName
End SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)' 若仍处于连接状态则发送断开消息If strDataName <> "" ThenWinsock.SendData "@endSend@"End IffrmBye.ShowUnload MeEnd Sub
  • 页面4,结束页面

在这里插入图片描述
在这里插入图片描述

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)' 若仍处于连接状态则发送断开消息If strDataName <> "" ThenWinsock.SendData "@endSend@"End IfUnload MefrmBye.Show
End Sub
  • frmBye
Private Sub Form_Load()Timer1.Interval = 1500Timer1.Enabled = True
End SubPrivate Sub Timer1_Timer()Unload MeEnd
End Sub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/774986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

验证码/数组元素的复制.java

1&#xff0c;验证码 题目&#xff1a;定义方法实现随机产生一个5位的验证码&#xff0c;前面四位是大写或小写的英文字母&#xff0c;最后一位是数字 分析&#xff1a;定义一个包含所有大小写字母的数组&#xff0c;然后对数组随机抽取4个索引&#xff0c;将索引对应的字符拼…

内网exp对抗

内网工具对抗 首先&#xff0c;你需要分析&#xff1a; 1、安全工具是否有源代码 2、安全工具源代码逻辑复杂程度 3、当前源代码你是否有能力修改 其次&#xff0c;你需要考虑&#xff1a; 1、无源码或无能力修改 2、各种异常bug打包问题 3、修改打包后效果也不太好 故…

【Linux】详解进程终止进程等待

一、页表&&写时拷贝的进一步理解 页表中不仅仅只有虚拟地址到物理地址的映射&#xff0c;还包括了很多选项&#xff0c;其中就包括了映射条目的权限。当我们进程的代码和数据加载到内存并和进程地址空间建立映射关系时&#xff0c;如果数据的内容不允许被修改&#xff…

【Java.mysql】——数据删改(DU) 附加数据库约束

目录 &#x1f6a9;更新(Update) &#x1f6a9;删除&#xff08;Delete&#xff09; &#x1f6a9;数据库约束 &#x1f388;约束类型 ✅NULL约束 ✅NNIQUE 唯一约束 ✅DEFAULT&#xff1a;默认值约束 ✅PRIMARY KEY&#xff1a;主键约束 ✅FOREIGN KEY&#xff1a;外键…

【前端】Layui的表格常用功能,表单提交事件,表格下拉按钮点击事件,表格外的按钮点击事件

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《前端》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握…

高阶SQL语句(二)

一 子查询 也被称作内查询或者嵌套查询&#xff0c;是指在一个查询语句里面还嵌套着另一个查询语 句。子查询语句 是先于主查询语句被执行的&#xff0c;其结果作为外层的条件返回给主查询进行下一 步的查询过滤。 ①子语句可以与主语句所查询的表相同&#xff0c;也可以是不…

STM32收发HEX数据包

在实际应用中&#xff0c;STM32的串口通信都是以数据包格式进行收发&#xff0c;这个数据包一般都包含包头和包尾&#xff0c;表示一个数据包。源代码在文末给出 数据包格式&#xff1a; 固定长度&#xff0c;含包头包尾 可变包长&#xff0c;含包头包尾 问题1&#xff1a;当…

YoloV5改进策略:BackBone改进|ECA-Net:用于深度卷积神经网络的高效通道注意力

摘要 本文使用ECA-Net注意力机制加入到YoloV5中。我尝试了多种改进方法&#xff0c;并附上改进结果&#xff0c;方便大家了解改进后的效果&#xff0c;为论文改进提供思路。&#xff08;更新中。。。。&#xff09; 论文&#xff1a;《ECA-Net&#xff1a;用于深度卷积神经网…

86.分隔链表

给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1&#xff1a; ​ 输入&#xff1a;head [1,4,3,2,5,2], x 3 输出&…

前端学习之JavaScript有关字符串的一些方法

&#xff08;注释是对各个方法的一些解释&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>字符串</title> </head> <body><script>let str1 test1let str2 n…

前端性能优化:掌握解决方案

课程介绍 我们常说性能永远是第一需求&#xff0c;作为一个前端工程师&#xff0c;不管使用什么框架&#xff0c;不管从事什么类型的网站或应用开发&#xff0c;只要是项目被用户使用&#xff0c;性能优化就永远是你需要关注的问题。通常情况下&#xff0c;工程师们在深入了解…

白板手推公式性质 AR模型 时间序列分析

白板手推公式性质 AR模型 时间序列分析 视频讲解&#xff1a;https://www.bilibili.com/video/BV1D1421S76v/?spm_id_from.dynamic.content.click&vd_source6e452cd7908a2d9b382932f345476fd1 B站对应视频讲解(白板手推公式性质 AR模型 时间序列分析)

hdlbits系列verilog解答(Hadd)-65

文章目录 一、问题描述二、verilog源码三、仿真结果一、问题描述 本节我们创建一个半加法器。半加法器将两个位相加(无进位)并产生求和和进出。 模块声明 module top_module( input a, b, output cout, sum ); 思路: 可用真值表写出逻辑表达式,或者直接用数据流方式。 二…

Qt 压缩/解压文件

前面讲了很多Qt的文件操作&#xff0c;文件操作自然就包括压缩与解压缩文件了&#xff0c;正好最近项目里要用到压缩以及解压缩文件&#xff0c;所以就研究了一下Qt如何压缩与解压缩文件。 QZipReader/QZipWriter QZipReader 和 QZipWriter 类提供了用于读取和写入 ZIP 格式文…

linux 多个文件(csv)合并成一个文件(csv)

文章目录 前言实例:实战:另外&#xff0c;补充一个相关知识 总结 前言 Linux之cat合并多个文件 实例: # 将当前目录下所有csv结尾的文件合并到merge.csv cat *.csv > merge.csv # 当然也可以指定合并哪几个文件 cat db1.sql db2.sql db3.sql > db_all.sql 实战: 将每个…

好物视频素材哪里找?推荐以下几个自用很好的视频素材库

好物视频素材哪里找&#xff1f;这可是个让很多创作者头疼的问题。想制作一个吸引人的视频&#xff0c;好的素材可是关键。下面就给大家介绍几个热门的视频素材网站&#xff0c;希望能帮到你&#xff01; 蛙学网&#xff08;https://www.waxuewang.com/&#xff09;&#xff1…

netty构建udp服务器以及发送报文到客户端客户端详细案例

目录 一、基于netty创建udp服务端以及对应通道设置关键 二、发送数据 三、netty中的ChannelOption常用参数说明 1、ChannelOption.SO_BACKLOG 2、ChannelOption.SO_REUSEADDR 3、ChannelOption.SO_KEEPALIVE 4、ChannelOption.SO_SNDBUF和ChannelOption.SO_RCVBUF 5、Ch…

vs code

vs code 下载安装 https://code.visualstudio.com/https://code.visualstudio.com/ 下载完后&#xff0c;下一步下一步就安装完了&#xff0c;安装好后可以下载各种好用的插件

已注册的商标别忘了续展,新注可能难下证!

近期普推知产老杨遇到好几个网友和看过多个案例&#xff0c;以前商标名称可以申请注册下来&#xff0c;但是换字体注册不下来了&#xff0c;有的是不想续展想直接换字体申请注册&#xff0c;但是也没有下来。 这些商标名称主要是存在禁止注册或缺显&#xff0c;比如“柳林”以前…

ensp静态路由综合实验(一)

实验拓扑&#xff1a; 实验目的&#xff1a; 1、R6为ISP&#xff0c;接口IP地址均为公有地址&#xff0c;该设备只能配置IP地址&#xff0c;之后不能再对其进行任何配置&#xff1b; 2、R1-R5为局域网&#xff0c;私有IP地址192.168.1.0/24&#xff0c;请合理分配&#xff1b;…