服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#编写游戏客户端的实现代码

C#编写游戏客户端的实现代码

2022-12-09 12:59伊始不觉 C#

这篇文章主要介绍了C#编写游戏客户端的实现代码,连接客户端原理流程图,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、连接客户端原理流程图

C#编写游戏客户端的实现代码

 

二、功能要求

1)连接成功后,可以将服务器发来的消息不停地显示在 listbox 中;
2) 客户端要发给服务器的数据,通过 textbox输入 或者点击button;
3) 能够播放背景音乐;
4) 每隔30秒,变换一次游戏背景图片。

 

三、代码实现

新建一个Windows窗体应用

C#编写游戏客户端的实现代码

下面是界面的布置,记得还有一个Timer,并且timer要使能,interval也要设置,这里3000为3秒

C#编写游戏客户端的实现代码

定义的变量

private NetworkStream stream;
      private TcpClient tcpClient;

      SoundPlayer player = new SoundPlayer("D:/新建文件夹 (2)/p3r68-cdx67/59tp0-mg2nx.wav");
      //定义发送数据的套接字
      Socket socket_send;

receiver_stream函数,功能是接收网络流并显示在listbox里显示,其中关于GBK的编码请参考这里

C# 中使用GB2312或GBK编码报错

/*
       * 将字节流用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]);
              }
          }
      }

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);
      }

连接客户端

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("服务器未启动");
          }

      }

退出游戏

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

获取textbox里的值并发送

private void send_msg_Click(object sender, EventArgs e)
      {
          if (tcpClient.Connected) {
              string action = textBox1.Text.ToString();
              listBox1.Items.Add("输入的信息为:" + action);
              send_stream(action);
              receive_stream();
              
          }
          else
          {
              listBox1.Items.Add("连接已断开");
          }
      }

播放音乐,这里的play好像就是在子线程播放,所以不用写新线程

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

停止播放

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

定时切换图片

private void timer1_Tick(object sender, EventArgs e)
      {
          Thread th = new Thread(play_pic);
          th.IsBackground=true;
          th.Start();

      }
      void play_pic()
      {
          flag++;
          string picturePath = @"D:\testpic\" + flag + ".jpg";
          pictureBox1.Image = Image.FromFile(picturePath);
          if (flag == 5)
          {
              flag = 0;
          }
      }

效果

C#编写游戏客户端的实现代码

 

四、总结

C#做可视化界面很方便,比QT还简单,代码格式有点像Java,基本上可以直接上手了,搭建网络连接也很方便,不过有时候界面的设置不小心就看过了。这次还是遇到麻烦的,本来想用Windows media player来播放音乐,但因为电脑一直更新走的,版本不适配用不了,最后用的是自带的播放器,只能播放wav文件,直接改后缀还不行,需要转化一下。

 

五、参考

编写一个网游客户端

C# 中使用GB2312或GBK编码报错

到此这篇关于C#编写游戏客户端的文章就介绍到这了,更多相关C#编写游戏内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/junseven164/article/details/121481789

延伸 · 阅读

精彩推荐
  • C#C#使用xsd文件验证XML格式是否正确的实现方法

    C#使用xsd文件验证XML格式是否正确的实现方法

    这篇文章主要介绍了C#使用xsd文件验证XML格式是否正确的实现方法,结合实例形式分析了C#针对xml文件的创建、验证相关操作技巧,需要的朋友可以参考下...

    PointNet4882021-12-20
  • C#c# 类型的字段和方法设计建议

    c# 类型的字段和方法设计建议

    这篇文章主要介绍了c# 字段和方法设计建议,帮助大家更好的理解和使用c#编程语言,感兴趣的朋友可以了解下...

    一只独行的猿8932022-10-17
  • C#使用C#编写自己的区块链挖矿算法

    使用C#编写自己的区块链挖矿算法

    这篇文章主要介绍了使用C#编写自己的区块链挖矿算法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    MyZony8662022-08-01
  • C#C# datagrid非常规方法实现添加合并列

    C# datagrid非常规方法实现添加合并列

    这篇文章主要介绍了C# datagrid非常规方法实现添加合并列,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    森大科技5882022-03-05
  • C#C#以流方式读socket超时设置的实例

    C#以流方式读socket超时设置的实例

    这篇文章主要为大家详细介绍了C#以流方式读socket超时设置的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    If I talk to god3372022-02-21
  • C#C# 启动 SQL Server 服务的实例

    C# 启动 SQL Server 服务的实例

    下面小编就为大家分享一篇C# 启动 SQL Server 服务的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    yuchen_love6142022-02-13
  • C#c#基于winform制作音乐播放器

    c#基于winform制作音乐播放器

    这篇文章主要介绍了c#基于winform制作音乐播放器的方法,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下...

    程序员ken9922022-11-08
  • C#C#9.0:Init相关总结

    C#9.0:Init相关总结

    这篇文章主要介绍了C#9.0:Init的相关资料,帮助大家更好的理解和学习新版的c#,感兴趣的朋友可以了解下...

    翁智华4502022-11-01