编写网游客户端
- 一、目的
- 二、项目完成
- 1. 新建项目
- 2.界面
- 3.客户端发送数据
- 4.播放背景音乐
- 5.实现游戏背景图片变换
- 三、总结
- 四、参考
一、目的
编写一个网游客户端,游戏服务器的校园内网IP地址为 10.1.230.41,端口为3900,采用TCP连接。
1.连接成功后,可以将服务器发来的消息不停地显示在 listbox 中;
2.客户端要发给服务器的数据,通过 textbox输入 或者点击button;
3.能够播放背景音乐;
4.每隔30秒,变换一次游戏背景图片;
二、项目完成
1. 新建项目
项目初步设置,建立窗体应用:
保存地址:
2.界面
本次实验使用的网游客户端框架来自老师的资料
链接:https://pan.baidu.com/s/1WSkrRTFPuN1N34BsySkeaQ
提取码:5n7o
先通过vs2019将程序程序编译运行,运行结果如下:
打开窗口设计页面,双击窗体可以跳转至代码编辑页面,将Form1()替换成以下代码:
private NetworkStream stream;
private TcpClient tcpClient = new TcpClient();
public Form1()
{InitializeComponent();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);//Encoding ToEncoding = Encoding.GetEncoding("UTF-8");//Encoding FromEncoding = Encoding.GetEncoding("GB2312");//data=Encoding.Convert(FromEncoding, ToEncoding, data);//string msg = Encoding.UTF8.GetString(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("服务器未启动!");}
}
在头文件中添加
using System.Net.Sockets;
运行效果如下:
可以看到从服务器接收到这些的数据,是正常的,其中一些怪字符是 telnet终端的转义字符,控制字符的移动、字符颜色、响铃等,可以忽略。
3.客户端发送数据
检查发现,客户端上少了个确认的控件,自己添加上去。
以下是“确认”控件控件的代码:
private void button12_Click(object sender, EventArgs e)
{//判断连接是否断开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("连接已断开");}
}
4.播放背景音乐
添加WindowsMediaPlayer控件:
代码:
private void button13_Click(object sender, EventArgs e)
{string s = @"E:\CloudMusic\123456.mp3";axWindowsMediaPlayer1.URL = s;
}
private void button14_Click(object sender, EventArgs e)
{//用于暂停正在播放的背景音乐axWindowsMediaPlayer1.Ctlcontrols.pause();
}
分析:
播放和停止播放是通过两个按钮的点击来实现的。当点击播放按钮后,就会播放背景音乐,需要暂停播放,就点击停止按钮就可以实现停止。
这里音乐播放无法看出效果,就不做演示。
5.实现游戏背景图片变换
拖入一个timer,设置其Enable为True:
双击timer,编写代码:
int flag = 0;private void timer1_Tick(object sender, EventArgs e){flag++;string picturePath = @"D:\NTEbiancheng\Game\game\bin\Debug\img\" + flag + ".jpg";pictureBox1.Image = Image.FromFile(picturePath);if (flag == 3){flag = 0;}}
演示效果:
三、总结
对于这一章的作业还是学到了非常多的东西,对窗体应用更加熟悉,同时C#连接服务器十分方便。
四、参考
https://blog.csdn.net/qq_43279579/article/details/109693257
https://jingyan.baidu.com/article/5553fa82cbe8ad65a239340e.html