网游客户端界面编程

一、总体框架

新建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;
            }
        }

        //
    }
    
}

总结
编程过程中参考了许多代码,也出现很多问题,如音乐播放方法采用与音乐格式相关问题,显示图片失真和最开始直接不显示的问题,找不到音乐播放控件问题等等,经过坚持不懈的百度和查看博客,最终都解决了。

参考:C#编写网游客户端连接游戏服务器
怎样使用C#的ImageList图像控件
ImageList的图片失真问题

猜你喜欢

转载自blog.csdn.net/xianyudewo/article/details/109824447