最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#編寫(xiě)游戲客戶(hù)端的實(shí)現(xiàn)代碼

 更新時(shí)間:2021年11月25日 15:36:04   作者:伊始不覺(jué)  
這篇文章主要介紹了C#編寫(xiě)游戲客戶(hù)端的實(shí)現(xiàn)代碼,連接客戶(hù)端原理流程圖,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、連接客戶(hù)端原理流程圖

在這里插入圖片描述

二、功能要求

1)連接成功后,可以將服務(wù)器發(fā)來(lái)的消息不停地顯示在 listbox 中;
2) 客戶(hù)端要發(fā)給服務(wù)器的數(shù)據(jù),通過(guò) textbox輸入 或者點(diǎn)擊button;
3) 能夠播放背景音樂(lè);
4) 每隔30秒,變換一次游戲背景圖片。

三、代碼實(shí)現(xiàn)

新建一個(gè)Windows窗體應(yīng)用

在這里插入圖片描述

下面是界面的布置,記得還有一個(gè)Timer,并且timer要使能,interval也要設(shè)置,這里3000為3秒

在這里插入圖片描述

定義的變量

 private NetworkStream stream;
        private TcpClient tcpClient;

        SoundPlayer player = new SoundPlayer("D:/新建文件夾 (2)/p3r68-cdx67/59tp0-mg2nx.wav");
        //定義發(fā)送數(shù)據(jù)的套接字
        Socket socket_send;

receiver_stream函數(shù),功能是接收網(wǎng)絡(luò)流并顯示在listbox里顯示,其中關(guān)于GBK的編碼請(qǐng)參考這里

C# 中使用GB2312或GBK編碼報(bào)錯(cuò)

/*
         * 將字節(jié)流用GBK格式編碼在listbox里顯示
         */
        void receive_stream()
        {
            byte[] receive_data = new byte[1024];
            //定義編碼格式
            System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);//為使用GB2312做準(zhǔn)備
            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++)//逐行顯示
                {
                    //過(guò)濾亂碼
                    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函數(shù),發(fā)送網(wǎng)絡(luò)流的函數(shù)

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

連接客戶(hù)端

 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地址的服務(wù)器發(fā)送連接請(qǐng)求
                tcpClient.Connect("10.1.230.74", 3900);
                listBox1.Items.Add("連接成功");
                stream = tcpClient.GetStream();
                receive_stream();//接收字節(jié)流并顯示在屏幕上
                
            }
            catch
            {
                listBox1.Items.Add("服務(wù)器未啟動(dòng)");
            }

        }

退出游戲

private void end_game_Click(object sender, EventArgs e)
        {
            if (stream != null)//關(guān)閉連接,關(guān)閉流
            {
                stream.Close();
                tcpClient.Close();
                socket_send.Close();
            }
            listBox1.Items.Add("已經(jīng)退出游戲");
        }

獲取textbox里的值并發(fā)送

 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("連接已斷開(kāi)");
            }
        }

播放音樂(lè),這里的play好像就是在子線程播放,所以不用寫(xiě)新線程

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

停止播放

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

定時(shí)切換圖片

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

效果

在這里插入圖片描述

四、總結(jié)

C#做可視化界面很方便,比QT還簡(jiǎn)單,代碼格式有點(diǎn)像Java,基本上可以直接上手了,搭建網(wǎng)絡(luò)連接也很方便,不過(guò)有時(shí)候界面的設(shè)置不小心就看過(guò)了。這次還是遇到麻煩的,本來(lái)想用Windows media player來(lái)播放音樂(lè),但因?yàn)殡娔X一直更新走的,版本不適配用不了,最后用的是自帶的播放器,只能播放wav文件,直接改后綴還不行,需要轉(zhuǎn)化一下。

五、參考

編寫(xiě)一個(gè)網(wǎng)游客戶(hù)端

C# 中使用GB2312或GBK編碼報(bào)錯(cuò)

到此這篇關(guān)于C#編寫(xiě)游戲客戶(hù)端的文章就介紹到這了,更多相關(guān)C#編寫(xiě)游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c# RPC框架的使用簡(jiǎn)介

    c# RPC框架的使用簡(jiǎn)介

    這篇文章主要介紹了c# RPC框架的使用簡(jiǎn)介,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-02-02
  • C#解析Lrc歌詞文件過(guò)程詳解

    C#解析Lrc歌詞文件過(guò)程詳解

    這篇文章主要為大家詳細(xì)介紹了C#解析Lrc歌詞文件過(guò)程,很有趣的解析過(guò)程,感興趣的小伙伴們可以參考一下
    2016-06-06
  • C#使用FileSystemWatcher控件實(shí)現(xiàn)的文件監(jiān)控功能示例

    C#使用FileSystemWatcher控件實(shí)現(xiàn)的文件監(jiān)控功能示例

    這篇文章主要介紹了C#使用FileSystemWatcher控件實(shí)現(xiàn)的文件監(jiān)控功能,結(jié)合實(shí)例形式分析了C# FileSystemWatcher組件的功能及監(jiān)控文件更改情況的具體使用技巧,需要的朋友可以參考下
    2017-08-08
  • C#基礎(chǔ)知識(shí)之this關(guān)鍵字介紹

    C#基礎(chǔ)知識(shí)之this關(guān)鍵字介紹

    本文主要介紹this關(guān)鍵字的幾種使用方法,this可以代表當(dāng)前實(shí)例,可以調(diào)用其他構(gòu)造函數(shù),還可以用來(lái)構(gòu)建索引器,這里都有一一舉例說(shuō)明。
    2016-04-04
  • C# 設(shè)計(jì)模式系列教程-模板方法模式

    C# 設(shè)計(jì)模式系列教程-模板方法模式

    模板方法模式通過(guò)把不變的行為搬移到超類(lèi),去除了子類(lèi)中的重復(fù)代碼,子類(lèi)實(shí)現(xiàn)算法的某些細(xì)節(jié),有助于算法的擴(kuò)展。
    2016-06-06
  • C#委托初級(jí)使用的實(shí)例代碼

    C#委托初級(jí)使用的實(shí)例代碼

    這篇代碼介紹了C#中委托的初級(jí)使用實(shí)例,有需要的朋友可以參考一下
    2013-06-06
  • C#中?、?.、??、??=運(yùn)算符的用法

    C#中?、?.、??、??=運(yùn)算符的用法

    本文主要介紹了C#中?、?.、??、??=運(yùn)算符的用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • C#中SetStyle的具體使用

    C#中SetStyle的具體使用

    本文主要介紹了C#中SetStyle的具體使用,該方法用于啟用或禁用特定的控件樣式,以控制控件的行為和外觀,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • C#實(shí)現(xiàn)動(dòng)態(tài)圖標(biāo)閃爍顯示的示例代碼

    C#實(shí)現(xiàn)動(dòng)態(tài)圖標(biāo)閃爍顯示的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)動(dòng)態(tài)圖標(biāo)閃爍顯示的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以了解一下
    2022-12-12
  • 原生實(shí)現(xiàn)C#與Lua相互調(diào)用方法(Unity3D可用)

    原生實(shí)現(xiàn)C#與Lua相互調(diào)用方法(Unity3D可用)

    Lua是一種很好的擴(kuò)展性語(yǔ)言,Lua解釋器被設(shè)計(jì)成一個(gè)很容易嵌入到宿主程序的庫(kù),下面這篇文章主要給大家介紹了關(guān)于原生實(shí)現(xiàn)C#與Lua相互調(diào)用方法,Unity3D可用的相關(guān)資料,需要的朋友可以參考下
    2022-04-04

最新評(píng)論

长乐市| 石柱| 南投市| 方城县| 本溪| 游戏| 安平县| 乐亭县| 聂拉木县| 南和县| 阿勒泰市| 巴塘县| 泰和县| 肥西县| 海城市| 北宁市| 阳高县| 会宁县| 垣曲县| 益阳市| 固阳县| 西林县| 蒙阴县| 邵武市| 博乐市| 孙吴县| 佛山市| 长沙市| 巴林右旗| 绿春县| 定襄县| 新龙县| 广德县| 汕尾市| 台中县| 庐江县| 紫金县| 呼图壁县| 商水县| 江阴市| 东阳市|