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

📄 form1.frm

📁 Vb网络游戏开发示范
💻 FRM
📖 第 1 页 / 共 2 页
字号:
    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 + -