📄 form1.frm
字号:
UserName As String ''用户名
PassWord As String ''密码
Name As String ''角色名称
zl As Byte ''等级
Hj As Long ''金钱
Lc As Long ''粮草
Sb As Long ''士兵
Mj As Byte ''米价
End Type
Dim UserId As userIdStruct
Dim Sel As String ''选择了哪个君主
Private Sub Command1_Click()
Dim UserName As String
Dim PassWord As String
UserName = InputBox("请输入用户名:", "提示:")
PassWord = InputBox("请输入密码:", "提示:")
Winsock1.SendData "Login," + UserName + ",Password," + PassWord + "#": DoEvents
End Sub
Private Sub Command2_Click()
Dim UserName As String
Dim PassWord As String
UserName = InputBox("请输入用户名:", "提示:")
PassWord = "a"
While IsNumeric(PassWord) = False
PassWord = InputBox("请输入密码(只能用数字):", "提示:")
If IsNumeric(PassWord) = False Then Call MsgBox("密码只能用数字!", vbOKOnly + 32, "提示:")
Wend
Winsock1.SendData "Create," + UserName + ",Password," + PassWord + "#": DoEvents
End Sub
Rem 买米
Private Sub Command3_Click()
Dim Max As Long ''最高可买多少米
Dim a As Long
Max = UserId.Hj * UserId.Mj ''最高可买米为黄金*米价
If (Max + UserId.Lc) > 30000000 Then Max = 30000000 - UserId.Lc ''如果买后的粮草超过3000万则限制买量
a = -1
While (a >= 0 And a <= Max) = False
a = InputBox("请输入买米量(0-" + Str(Max) + "):", "提示:")
Wend
Winsock1.SendData "买米," + Str(a) + "#" ''向服务器申请买米
DoEvents
End Sub
Rem 卖米
Private Sub Command4_Click()
Dim Max As Long ''最高可卖多少米
Dim a As Long
Max = UserId.Lc ''最高可买米为粮草
''判断是否超出限制
While Int(Max / UserId.Mj) + UserId.Hj > 300000
Max = Max - UserId.Mj ''减少卖粮
Wend
a = -1
While (a >= 0 And a <= Max) = False
a = InputBox("请输入卖米量(0-" + Str(Max) + "):", "提示:")
Wend
Winsock1.SendData "卖米," + Str(a) + "#" ''向服务器申请买米
'DoEvents
End Sub
Rem 征兵
Private Sub Command5_Click()
Randomize Timer
Max = Int(Rnd * 10000)
If UserId.Hj < Max / 10 Or UserId.Lc < Max Then Call MsgBox("黄金或粮草不足!", vbOKOnly + 32, "提示:"): Exit Sub
Winsock1.SendData "征兵," + Str(Max) + "#"
End Sub
Rem 战争
Private Sub Command6_Click()
Dim Max As Long
If Trim(Sel) = "" Then Call MsgBox("请选择君主!", vbOKOnly + 32, "提示:"): Exit Sub
If Trim(Sel) = Trim(UserId.Name) Then Call MsgBox("不能进攻自己!", vbOKOnly + 32, "提示:"): Exit Sub
Winsock1.SendData "战争," + Sel + "#"
End Sub
Rem 发送
Private Sub Command8_Click()
Winsock1.SendData "发送," + UserId.Name + "说:" + Text2.Text + "#"
End Sub
Private Sub Form_Load()
LoginOk = False
Winsock1.Connect Trim(InputBox("请输入服务器IP:", "提示:"))
End Sub
Private Sub List1_Click()
Sel = List1.Text
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then Call Command8_Click
End Sub
Rem 执行gWinsock接受到的数据
Rem S表示收到的字符串
Private Sub ExecData(S As String)
Dim i As Integer
Dim j As Integer
''去掉“#”号
For i = 1 To Len(S)
If Mid(S, i, 1) = "#" Then Mid(S, i, 1) = " "
Next i
S = Trim(S)
If S = "用户已满" Then Call MsgBox("服务器人数已满!", vbOKOnly + 32, "提示:"): Exit Sub
' List2.AddItem S + Chr(13) + Chr(10)
If List2.ListCount > 30 Then List2.RemoveItem (0)
If Trim(S) = "UserError" Then Call MsgBox("用户或密码错误!", vbOKOnly + 32, "提示:")
''登录成功
If Trim(S) = "LoginOK" Then
Call ReadBasicData
LoginOk = True
DoEvents
Winsock1.SendData "Get用户列表#": DoEvents
DoEvents
Exit Sub
End If
S = Trim(S)
If S = "交易成功" Or S = "征兵成功" Then Call ReadBasicData
Call CutNv(S)
nv(0) = Trim(nv(0))
If nv(0) = "用户" Then List2.AddItem nv(1)
If nv(0) = "名字" Then Text1(0).Text = nv(1): UserId.Name = nv(1): DoEvents: Exit Sub
If nv(0) = "战力" Then Text1(1).Text = nv(1): UserId.zl = Val(nv(1)): DoEvents: Exit Sub
If nv(0) = "金钱" Then Text1(2).Text = nv(1): UserId.Hj = Val(nv(1)): DoEvents: Exit Sub
If nv(0) = "粮草" Then Text1(3).Text = nv(1): UserId.Lc = Val(nv(1)): DoEvents: Exit Sub
If nv(0) = "士兵" Then Text1(4).Text = nv(1): UserId.Sb = Val(nv(1)): DoEvents: Exit Sub
If nv(0) = "米价" Then Text1(5).Text = nv(1): Mj = Val(nv(0)): UserId.Mj = Val(nv(1)): DoEvents: Exit Sub
If nv(0) = "列表" Then AddList1 (nv(1)) ''添加新玩家
End Sub
Rem 将S添加入List1,但不重复添加
Private Sub AddList1(S As String)
Dim i As Integer
On Error GoTo e
S = Trim(S)
For i = 0 To List1.ListCount - 1
If Trim(List1.List(i)) = S Then Exit Sub
Next i
List1.AddItem nv(1)
Exit Sub
e:
Err.Clear
End Sub
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim S As String
Dim i As Integer, j As Integer
Winsock1.GetData S
List2.AddItem S
S = Trim(S)
j = CountCode(S)
If j < 2 Then
''去掉“#”号
For i = 1 To Len(S)
If Mid(S, i, 1) = "#" Then Mid(S, i, 1) = " "
Next i
''服务器只收到一条数据,直接执行
Call ExecData(S)
Else
''服务器收到多条数据
Call CutNv2(S)
''将数据分开到nv2中,并依次执行
For i = 1 To j
Call ExecData(nv2(i - 1))
Next i
End If
End Sub
Rem 显示基本信息
Private Sub ReadBasicData()
On Error GoTo e
Winsock1.SendData "Get名字#": DoEvents
Winsock1.SendData "Get战力#": DoEvents
Winsock1.SendData "Get金钱#": DoEvents
Winsock1.SendData "Get粮草#": DoEvents
Winsock1.SendData "Get士兵#": DoEvents
Winsock1.SendData "Get米价#": DoEvents
Exit Sub
e:
Err.Clear
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -