C#游戏客户端编程

Posted WOOZI9600L²

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#游戏客户端编程相关的知识,希望对你有一定的参考价值。

一、测试连接服务器

windows+R打开cmd,先ping一下服务器的网址,看是否能连通(这是学校的内网,没连学校内网是ping不同的):

首先打开Telnet服务:

使用telnet命令进入 telnet 终端界面。

输入 set localecho,打开本地回显。

连接游戏服务器,输入命令 open 10.1.230.74 3900,进入初始界面:

自己按要求创建人物,然后就可以玩了,但没有客户端界面不够美观,所以我们要自己写一个。

二、编写客户端

1.新建项目和界面设计

使用VS2019创建一个窗体应用:

添加音乐播放组件:

拖动控件设计窗口,最终界面如下:

2.连接服务器

代码(注意相关引用using System.Net.Sockets;):

private NetworkStream stream;
private TcpClient tcpClient = new TcpClient();
 private void button10_Click(object sender, EventArgs e)
        
            try
            
                //向指定的IP地址的服务器发出连接请求
                tcpClient.Connect("10.1.230.74", 3900);
                listBox1.Items.Add("连接成功!");
                stream = tcpClient.GetStream();
                byte[] data = new byte[1024];
                //判断网络流是否可读            
                if (stream.CanRead)
                
                    int len = stream.Read(data, 0, data.Length);
                    string msg = Encoding.Default.GetString(data, 0, data.Length);
                    string str = "\\r\\n";
                    char[] str1 = str.ToCharArray();
                    string[] msg1 = msg.Split(str1);
                    for (int j = 0; j < msg1.Length; j++)
                    
                        listBox1.Items.Add(msg1[j]);
                    
                
            
            catch
            
                listBox1.Items.Add("连接失败!");
            
        

运行:

3.发送数据

双击确定按钮,设计它的点击事件:

private void button12_Click(object sender, EventArgs e)
        
            //music_play();
            if (tcpClient.Connected)
            
                //向服务器发送数据
                string msg = textBox1.Text;
                Byte[] outbytes = System.Text.Encoding.Default.GetBytes(msg + "\\n");
                stream.Write(outbytes, 0, outbytes.Length);
                byte[] data = new byte[1024];
                //接收服务器回复数据
                if (stream.CanRead)
                
                    int len = stream.Read(data, 0, data.Length);
                    string msg1 = Encoding.Default.GetString(data, 0, data.Length);
                    string str = "\\r\\n";
                    char[] str1 = str.ToCharArray();
                    string[] msg2 = msg1.Split(str1);
                    for (int j = 0; j < msg2.Length; j++)
                    
                        listBox1.Items.Add(msg2[j]);
                    
                
            
            else
            
                listBox1.Items.Add("连接已断开");
            
            textBox1.Clear();
        

嘿嘿,忘了截图了,宿舍连不上校园网就看不到反馈。反正就是按照它左边的框里的要求输入名称呀密码呀啥的,服务器接收到后继续执行下一指令,然后再输入,如此反复而已。

4.播放背景音乐

播放button的点击事件:

  private void button13_Click(object sender, EventArgs e)
        
            string s = @"C:\\Users\\86150\\VSproject\\game\\怎么办-SEVENTEEN.mp3";
            axWindowsMediaPlayer1.URL = s;
        

 private void button14_Click(object sender, EventArgs e)
        
            axWindowsMediaPlayer1.Ctlcontrols.pause();//停止播放
        

由于是播放音乐,图片无法展示其效果。

5.变换背景

双击timer1控件编写函数:

 private void timer1_Tick(object sender, EventArgs e)
        
            picture++;
            string picturePath = @"C:\\Users\\86150\\VSproject\\game\\pic\\" + picture + ".jpg";
            //设置图片填充
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;//StretchImage为拉伸填满整个box
            pictureBox1.Image = Image.FromFile(picturePath);
            if (picture == 5)
                picture = 0;
        

在图片路径里加入几张图片,以1、2、3…命名:

效果:

三、总结

在老师的布局基础上添加按键功能时,其它都没什么问题,但音乐播放怎么也实现不了,一直都会报一个异常System.BadImageFormatException:“未能加载文件或程序集“AxInterop.WMPLib, Version=1.0.0.0, Culture=neutral, Publi,我的media player不能再这个代码中使用,所以重新建了一个项目,仿照了老师的布局,再次使用media player时就没有问题了。

参考资料

https://blog.csdn.net/weixin_45873781/article/details/109827713
https://blog.csdn.net/qq_43279579/article/details/109693257

以上是关于C#游戏客户端编程的主要内容,如果未能解决你的问题,请参考以下文章

游戏编程 学习目录

热更新

漫谈C#编程语言在游戏领域的应用

C# 最有用的(自定义)代码片段是啥? [关闭]

c#代码片段快速构建代码

此 Canon SDK C++ 代码片段的等效 C# 代码是啥?