一、总体框架
新建C#Windows窗体应用,添加控件布局如下:
特别说明:
很多控件属性需要根据子的实际情况
1.添加axWindowsMediaPlaye控件方法:
随意在工具箱右键一个控件,点击 “选择项“,选择com组件,勾选WIndows Media player,点击确定
2.timer
设置这个值为2000,即2s一次,还有Enabled设置为Ture
拖动这个控件时注意将这个控件拖在没有控件的地方,即设置这个控件基于整个窗口
二、具体功能
1.连接服务器
在设计界面双击进入游戏按钮,进入函数界面,在click函数中输入如下代码:
try
{
//实例化
tcpClient = new TcpClient();
//向指定的IP地址的服务器发出连接请求
tcpClient.Connect("10.160.52.106", 3900);
//获取网络传输流
stream = tcpClient.GetStream();
//接受数据并转化为字符串
byte[] data = new byte[1024];
int receive = stream.Read(data, 0, 1024);
string msg = Encoding.Default.GetString(data, 0, receive);
//去除字符串中的终端转义字符
msg = strDelete(msg);
//显示出来
textBox1.AppendText(msg);
}
catch
{
textBox1.AppendText("服务器未启动" + Environment.NewLine);
}
效果图:
并在Form1.cs文件 public partial class Form1 : Form中添加:
TcpClient tcpClient;
NetworkStream stream;
并在Form1.cs文件 public partial class Form1 : Form中新建函数:
//去除转义字符
private string strDelete(string str)
{
int flag = -1, de = 0;
for (int i = 0; i < str.Length; i++)
{
if (str[i] == '\\')
{
flag = i;
}
if (flag != -1)
{
de++;
}
if (str[i] == 'm' && flag != -1)
{
str = str.Remove(flag, de);
i = flag - 1;
flag = -1;
de = 0;
}
}
return str;
}
2.两端交互
功能:客户端要发给服务器的数据,通过 textbox 输入,然后点击 button 发送出去,并将服务器端返回结果显示在 textbox 中。
双击发送按钮,click函数中加入如下代码:
//获取textBox1内的文本内容
string msg = textBox2.Text + "\n";
//将文本内容转化成比特流并发送给服务器
byte[] data = new byte[1024];
data = Encoding.Default.GetBytes(msg);
stream.Write(data, 0, data.Length);
//接收服务器端传来的数据流并转化为字符串
byte[] data1 = new byte[1024];
int receive = stream.Read(data1, 0, 1024);
msg = Encoding.Default.GetString(data1, 0, receive);
//去除字符串中的终端转义字符
msg = strDelete(msg);
//清除显示框之前的内容
textBox1.Clear();
//显示数据
textBox1.AppendText(msg);
//刷新输入框
textBox2.Clear();
//将光标集中到输入框中
textBox2.Focus();
效果:
3.播放音乐
功能:点击进入游戏后,循环播放音乐
在进入游戏按钮的click函数中添加:
//字符串存储音乐路径
string s = @"D:\Demo.mp3";
//设置为循环播放
axWindowsMediaPlayer1.settings.setMode("loop", true);
//设置初始音乐的音量大小(范围:0——100)
axWindowsMediaPlayer1.settings.volume = 50;
//设置播放歌曲的路径
axWindowsMediaPlayer1.URL = s;
效果:这个只能听到,看不出。。。
4.背景图片
功能:循环变换图片
在imagelist控件中添加图片
双击timer控件,进入tick函数中添加:
pictureBox1.Image = imageList1.Images[i];
i++;
if (i == 5)
{
i = 0;
}
效果:
注:如果出现图片失真情况,请参考:ImageList的图片失真问题
总结与完整代码
Form1.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;
namespace 网游客户端
{
public partial class Form1 : Form
{
TcpClient tcpClient;
NetworkStream stream;
//去除转义字符
private string strDelete(string str)
{
int flag = -1, de = 0;
for (int i = 0; i < str.Length; i++)
{
if (str[i] == '\\')
{
flag = i;
}
if (flag != -1)
{
de++;
}
if (str[i] == 'm' && flag != -1)
{
str = str.Remove(flag, de);
i = flag - 1;
flag = -1;
de = 0;
}
}
return str;
}
public Form1()
{
InitializeComponent();
}
//点击进入游戏连接服务器并显示内容,播放音乐
private void button3_Click(object sender, EventArgs e)
{
try
{
//实例化
tcpClient = new TcpClient();
//向指定的IP地址的服务器发出连接请求
tcpClient.Connect("10.160.52.106", 3900);
//获取网络传输流
stream = tcpClient.GetStream();
//接受数据并转化为字符串
byte[] data = new byte[1024];
int receive = stream.Read(data, 0, 1024);
string msg = Encoding.Default.GetString(data, 0, receive);
//去除字符串中的终端转义字符
msg = strDelete(msg);
//显示出来
textBox1.AppendText(msg);
}
catch
{
textBox1.AppendText("服务器未启动" + Environment.NewLine);
}
//字符串存储音乐路径
string s = @"D:\Demo.mp3";
//设置为循环播放
axWindowsMediaPlayer1.settings.setMode("loop", true);
//设置初始音乐的音量大小(范围:0——100)
axWindowsMediaPlayer1.settings.volume = 50;
//设置播放歌曲的路径
axWindowsMediaPlayer1.URL = s;
}
//点击发送,获取输入框内容发送给服务器
private void button2_Click(object sender, EventArgs e)
{
//获取textBox1内的文本内容
string msg = textBox2.Text + "\n";
//将文本内容转化成比特流并发送给服务器
byte[] data = new byte[1024];
data = Encoding.Default.GetBytes(msg);
stream.Write(data, 0, data.Length);
//接收服务器端传来的数据流并转化为字符串
byte[] data1 = new byte[1024];
int receive = stream.Read(data1, 0, 1024);
msg = Encoding.Default.GetString(data1, 0, receive);
//去除字符串中的终端转义字符
msg = strDelete(msg);
//清除显示框之前的内容
textBox1.Clear();
//显示数据
textBox1.AppendText(msg);
//刷新输入框
textBox2.Clear();
//将光标集中到输入框中
textBox2.Focus();
}
int i = 0;
private void timer1_Tick(object sender, EventArgs e)
{
pictureBox1.Image = imageList1.Images[i];
i++;
if (i == 5)
{
i = 0;
}
}
//
}
}
总结
编程过程中参考了许多代码,也出现很多问题,如音乐播放方法采用与音乐格式相关问题,显示图片失真和最开始直接不显示的问题,找不到音乐播放控件问题等等,经过坚持不懈的百度和查看博客,最终都解决了。