C#编程窗口运行游戏客户端

一、创建项目前试试控制台窗口进入游戏

1.创建前准备,打开cmd输入ping 10.1.230.74,ping通如下
在这里插入图片描述
2.输入telnet
在这里插入图片描述
如果输入telnet没有成功,可查看链接:win7 telnet不是内部命令或外部命令,也不是可运行的程序
3.再输入open 10.1.230.74 3900,可进入控制台窗口的游戏界面
在这里插入图片描述

4…打开vs,创建一个windows窗口项目
在这里插入图片描述

二、设计窗口

1.先上效果图,比较直观
在这里插入图片描述

2.用到的控件,从左上工具箱打开拖动到form窗口中,工具箱可以用ctrl+alt+x快捷方式打开
在这里插入图片描述
3.需要设置的控件,双击控件可获得控件函数,可直接在函数操作
①textbox1,enabled属性改成ture
在这里插入图片描述
②timer1,enabled属性改成ture,interval属性改为1000(1000ms就是1s,也可自行修改时间,这时间是图片轮播时间)
在这里插入图片描述

三、代码实现

1.定义变量,放在public Form1()前面

private NetworkStream stream;
private TcpClient tcpClient = new TcpClient();
private int flag = 0;
SoundPlayer player = new SoundPlayer("C:/Users/ASUS-JH/Music/许嵩-玫瑰花的葬礼.wav");
//定义发送数据的套接字
Socket socket_send;

2.receiver_stream函数,功能是接收网络流并显示在listbox里显示

 /*
         * 将字节流用GBK格式编码在listbox里显示
*/
void receive_stream()
{
            byte[] receive_data = new byte[1024];
           //定义编码格式
            System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);//为使用GB2312做准备
            System.Text.Encoding GBK = System.Text.Encoding.GetEncoding("GBK");
            if (stream.CanRead)
            {
                 
                int len = stream.Read(receive_data, 0, receive_data.Length);
                string msg = GBK.GetString(receive_data, 0, receive_data.Length);

                string str = "\r\n";
                char[] str1 = str.ToCharArray();
                //乱码集合
                string[] messy_code = { "??[2J ", "[5m", "[44m", "[37;0m", "[1;33m", "[1;32m", "[1;31m" };
                string[] msg1 = msg.Split(str1);//以换行符为分隔符
                for (int j = 0; j < msg1.Length; j++)//逐行显示
                {
                    //过滤乱码
                    msg1[j] = msg1[j].Replace(messy_code[0], " ");
                    msg1[j] = msg1[j].Replace(messy_code[1], " ");
                    msg1[j] = msg1[j].Replace(messy_code[2], " ");
                    msg1[j] = msg1[j].Replace(messy_code[3], " ");
                    msg1[j] = msg1[j].Replace(messy_code[4], " ");
                    msg1[j] = msg1[j].Replace(messy_code[5], " ");
                    msg1[j] = msg1[j].Replace(messy_code[6], " ");
                    listBox1.Items.Add(msg1[j]);
                }
            }
        }

3.send_stream函数,发送网络流的函数

void send_stream(string str)
        {
            System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);//为使用GB2312做准备
            System.Text.Encoding GBK = System.Text.Encoding.GetEncoding("GBK");
            byte[] buffer = GBK.GetBytes(str+"\n");
            stream.Write(buffer, 0, buffer.Length);
        }

4.连接客户端(开始游戏button的代码)

 private void start_game_Click(object sender, EventArgs e)
        {
            tcpClient = new TcpClient();
            //套接字建立连接
            

            socket_send = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint point = new IPEndPoint(IPAddress.Parse("10.1.230.74"), 3900);
            socket_send.Connect(point);
            try
            {
                //向指定的IP地址的服务器发送连接请求
                tcpClient.Connect("10.1.230.74", 3900);
                listBox1.Items.Add("连接成功");
                stream = tcpClient.GetStream();
                receive_stream();//接收字节流并显示在屏幕上
                
            }
            catch
            {
                listBox1.Items.Add("服务器未启动");
            }

        }

5.退出游戏控件button的代码

private void end_game_Click(object sender, EventArgs e)
        {
            if (stream != null)//关闭连接,关闭流
            {
                stream.Close();
                tcpClient.Close();
                socket_send.Close();
            }
            listBox1.Items.Add("已经退出游戏");
        }

6.音乐播放和暂停button的代码

private void button4_Click(object sender, EventArgs e)
        {
            player.Load();
            player.Play();
        }

private void button5_Click(object sender, EventArgs e)
        {
            player.Stop();
        }

7.图片轮播代码

 private void timer1_Tick(object sender, EventArgs e)
        {
            flag++;
            string picturePath = @"C:\\Users\ASUS-JH\Pictures\Saved Pictures\123456\" + flag + ".jpeg";
            pictureBox1.Image = Image.FromFile(picturePath);
            if (flag == 4)
            {
                flag = 0;
            }
        }

图片文件,图片需要改名为1,2,3,4
在这里插入图片描述

四、结果

在这里插入图片描述

五、总结

这一次完成了windows界面的一个简单设计和连接游戏,更加熟悉了C#语言和窗口设计

六、参考链接

编写一个网游客户端

用C#编写一个简单的网游客户端

七、完整代码和结果视屏(播放的音乐也有)

项目和结果视屏:https://github.com/Xuhongyu20/game

音乐链接:https://pan.baidu.com/s/1c5M7pOLka2OLhs5ihGnVqw
提取码:dfop

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值