初步使用C#实现网游客户端

一、测试

1.打开 cmd输入 ping 10.160.52.106测试能否与游戏服务器建立连接。

游戏服务器的 IP 10.160.52.106 是 校园网的内网IP

2.ping 通后,在输入命令 telnet,进入 telnet 终端界面。

安装telnet服务: 链接.

3.输入set localecho,打开本地回显。
在这里插入图片描述

4.输入命令 open 10.160.52.106 3900连接游戏服务器,然后就进入了一个文字版的网游。如图:
在这里插入图片描述

二、客户端UI设计

1.用 VS2017 新建一个 Windows 窗体应用(.NET Framework) 的项目。
2.点击进入 From.cs[设计],设计如图:

在这里插入图片描述

三、代码实现

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Media;

namespace WindowsFormsApp4
{
    
    
    public partial class Form1 : Form
    {
    
    

        //初始化一个TCPClient实例
        Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        int num = 0;//记录当前图片
        public Form1()
        {
    
    
            InitializeComponent();
            IPAddress ipaddress = IPAddress.Parse("10.160.52.106");
            EndPoint point = new IPEndPoint(ipaddress, 3900);
            tcpClient.Connect(point);
            update_TextBox();
            pictureBox1.Image = Image.FromFile("./" + num.ToString() + ".jpg");
            num++;
            //实列化
            System.Windows.Forms.Timer mytimer = new System.Windows.Forms.Timer();
            //给timer绑定一个事件
            mytimer.Tick += new EventHandler(change_Pic);
            mytimer.Enabled = true;
            //设置3毫秒的时间间隔
            mytimer.Interval = 3000;
            /*编码格式gdk转utf-8
            string Mystring;
            Encoding FromEcoding = Encoding.GetEncoding("gbk");
            Encoding ToEcoding = Encoding.GetEncoding("UTF-8");
            byte[] ToBytes = Encoding.Convert(FromEcoding, ToEcoding, data);
            Mystring = ToEcoding.GetString(ToBytes);*/
        }

        //更改游戏背景图
        private void change_Pic(object sender, EventArgs e)
        {
    
    
            int i = num % 4;
            pictureBox1.Image = Image.FromFile("./" + i.ToString() + ".jpg");
            num++;
        }

        //播放wav格式的背景音乐
        private void music_play()
        {
    
    
            SoundPlayer sp = new SoundPlayer();
            sp.SoundLocation = @"music.wav";
            sp.PlayLooping();
        }

        //更新 richTextBox1 数据
        private void update_TextBox()
        {
    
    
            richTextBox1.Clear();
            byte[] data = new byte[2048];
            //传递一个byte数组,用于接收数据。length表示接收了多少字节的数据
            int length = tcpClient.Receive(data);
            string message = Encoding.Default.GetString(data, 0, length);
            richTextBox1.Text = message;
        }

        //添加richTextBox1数据
        private void add_TextBox(string str)
        {
    
    
            try
            {
    
    
                byte[] sendBytes = Encoding.Default.GetBytes(str + "\n");
                tcpClient.Send(sendBytes);
            }
            catch
            {
    
    
            }
            try
            {
    
    
                byte[] data = new byte[2048];
                //传递一个byte数组,用于接收数据。length表示接收了多少字节的数据
                int length = tcpClient.Receive(data);
                string message = Encoding.Default.GetString(data, 0, length);
                richTextBox1.Text = richTextBox1.Text + message;
            }
            catch
            {
    
    
            }
        }

        private void label2_Click(object sender, EventArgs e)
        {
    
    

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
    
    

        }

        //进入游戏
        private void button1_Click(object sender, EventArgs e)
        {
    
    
            if (textBox1.Text != "")
            {
    
    
                try
                {
    
    
                    byte[] sendBytes = Encoding.Default.GetBytes(textBox1.Text + "\n");
                    tcpClient.Send(sendBytes);
                    update_TextBox();
                    //播放背景音乐
                    music_play();
                }
                catch
                {
    
    
                }
            }
            else
            {
    
    
                MessageBox.Show("用户名不能为空!", "Error", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
            }
        }

        //退出游戏
        private void button2_Click(object sender, EventArgs e)
        {
    
    
            this.Close();
        }

        //西北
        private void button3_Click(object sender, EventArgs e)
        {
    
    
            add_TextBox("northwest");
        }

        //北
        private void button4_Click(object sender, EventArgs e)
        {
    
    
            add_TextBox("north");
        }

        //东北
        private void button5_Click(object sender, EventArgs e)
        {
    
    
            add_TextBox("northeast");
        }

        //西
        private void button8_Click(object sender, EventArgs e)
        {
    
    
            add_TextBox("west");
        }

        //enter
        private void button7_Click(object sender, EventArgs e)
        {
    
    
            add_TextBox("");
        }

        //东
        private void button6_Click(object sender, EventArgs e)
        {
    
    
            add_TextBox("east");
        }

        //西南
        private void button11_Click(object sender, EventArgs e)
        {
    
    
            add_TextBox("southwest");
        }

        //南
        private void button10_Click(object sender, EventArgs e)
        {
    
    
            add_TextBox("south");
        }

        //东南
        private void button9_Click(object sender, EventArgs e)
        {
    
    
            add_TextBox("southeast");
        }

        //发送消息
        private void button12_Click(object sender, EventArgs e)
        {
    
    
            add_TextBox(textBox2.Text);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
    
    

        }
    }
}

四、效果展示

在这里插入图片描述

扫描二维码关注公众号,回复: 12682668 查看本文章

emmm之前是成功的,好像学校服务器又出问题了,因为用 telnet client一直卡着
在这里插入图片描述

五、参考

链接: 用C#实现网游客户端(采用TCP方式连接校园网服务器).

六、总结

初步学习了使用C#编写一个网游客户端,实现了采用TCP连接,将服务器发来的消息不停地显示在listbox中;通过textbox或者点击button输入要发送给服务器的数据;能够播放背景音乐;每隔3秒换一次游戏背景图。

猜你喜欢

转载自blog.csdn.net/qq_48008050/article/details/109819919
今日推荐