游戲策劃咨訊
          做一個游戲并不難,難的是做一個好游戲;完美在于積累!
          消息打包處理部分

          續(xù)上在上面我簡單的說了一下服務(wù)器完成端口處理部分,接下來我想大家介紹一下關(guān)于如何建立服務(wù)器和客戶端的聯(lián)系規(guī)則,也就是服務(wù)器和客戶端的游戲協(xié)議部分。有不足之處希望大家和我進(jìn)行交流。

          首先解釋一下這里協(xié)議的概念,協(xié)議大家都了解是一種通信規(guī)則,例如:TCP/IP,UDP等等,這些是我們在網(wǎng)絡(luò)通信過程中所處理使用的協(xié)議。而我們這里的協(xié)議是我們的游戲服務(wù)器和客戶端的通信規(guī)則。簡而言之,也就是客戶端發(fā)送到服務(wù)器的數(shù)據(jù)包和服務(wù)器發(fā)送的數(shù)據(jù)包雙方解釋規(guī)則。下面就通過幾個部分來具體介紹這種協(xié)議的建立和處理。

          消息頭定義

          如果我們能夠解釋雙方的數(shù)據(jù)包的意義,我們就必須為雙方數(shù)據(jù)包定義一個統(tǒng)一規(guī)則的消息頭,我是這么定義消息頭的。服務(wù)器數(shù)據(jù)包和客戶端數(shù)據(jù)包分別定義不同的消息頭。以下就是雙方消息頭的簡單定義。

          struct    ServerMsg_Head             //服務(wù)器消息頭
          {
             WORD  s_version;                //版本信息
             BYTE   s_flages;                 //消息標(biāo)志
             BYTE   s_who;                  //消息驅(qū)動者
             BYTE   s_sort;                   //消息類別
             BYTE   s_value;                 //消息值
             WORD  s_len;                   //消息長度
          } ;

          struct    ClientMsg_Head             //客戶端消息頭
          {
             WORD  c_version;                //版本信息
             WORD  c_flages                  //消息標(biāo)志
             WORD  c_sort;                   //消息類別
             WORD  c_value;                  //消息值
             WORD  c_scene;                  //場景信息
             WORD  c_len;                    //消息長度
          };

          以上是我個人簡單定義的消息頭,具體的各個參數(shù)意義,就是需要規(guī)劃設(shè)計的人來定了。這些我就不多說了。

          在我們處理完我們的消息頭后,我們就可以將我們的具體游戲數(shù)據(jù)進(jìn)行打包。關(guān)于數(shù)據(jù)打包,我們必須要處理兩件事情:數(shù)據(jù)打包,數(shù)據(jù)加密。為此我就建立相應(yīng)的class來處理這樣的一些操作。DataCtrl.h處理如下:

          class  Ppackage類可以拆解為兩個單獨處理類,打包類和解包類。而此處我就用下面一個類來進(jìn)行處理。只是給大家開個頭,要設(shè)計的更好還是靠大家共同來進(jìn)行斟酌呀!!


          class   PPackage                                   //游戲數(shù)據(jù)包處理類
          {
          public:
          PPackage(BYTE msg_type);                      //設(shè)置所打包消息類型
          virtual ~PPackage();
          //消息數(shù)據(jù)打包部分
          void  SetMsgHead(void  *);                    //設(shè)置消息頭
          void  AddByte(BYTE  data);                   //加入一字節(jié)
          void  AddWord(WORD  data);                 //加入二字節(jié)
          void  AddDword(DWORD  data);               //加入四字節(jié)
          void  AddPoint(POINT  data);                  //加入八字節(jié)
          void  AddBuf(char * data ,int  data_len);          //加入多個字節(jié)
          //消息內(nèi)容獲取
          void  FinishPack();                            //完成打包
          char  *GetPackage();                           //獲取數(shù)據(jù)包
          int   GetPacketLen();                          //獲取數(shù)據(jù)包長度


          //消息數(shù)據(jù)解包部分
          void     SetMsgPackage(char *buf,int _Len);       //將獲取消息進(jìn)行錄入
          void    *GetMsgHead();                        //獲取消息頭數(shù)據(jù)
          BYTE   GetByte();                            //獲取一字節(jié)
          WORD  GetWord();                            //獲取二字節(jié)
          DWORD GetDword();                           //獲取三字節(jié)
          POINT * GetPoint();                            //獲取四字節(jié)
          char  *  GetBuf(int buf_len);                    //獲取多字節(jié)
          bool     IfFinishGet();                         //是否完成解包

          private: 

          void     Init();
          void     Release();
          void     StartBindPakage();       //開始打包
          void     StartUndoPackage();     //開始解包
              bool     MessageEncrypt();       //消息加密
              bool     MessageUndo();         //消息解密

          private:

          private:
              BYTE   msg_type;               / /{1-SERVER_PACKAGE=1,2-CLIENT_PACKAGE=2}
          char  *  msg_buffer;
          char  *  buffer;                 //后備緩沖區(qū)
          int      msg_len;
          //消息內(nèi)容長度
          Server_Msg_Head  msg_Head;     //消息頭
          int      buf_Len;
          int      current_pos;             //指針的當(dāng)前位置
          protected:
          };

          以上就是關(guān)于服務(wù)器和消息打包類的一些建立和解釋,這些方面知識其實也沒有什么,主要是“仁者見仁,智者見智”了。而對于網(wǎng)絡(luò)游戲的制作最重要的還是在于Game World的規(guī)劃和設(shè)計,同時這個方面也是最難和最不好處理的。隨后將和大家進(jìn)行探討。。

          posted on 2005-02-13 11:51 藍(lán)色雪焰 閱讀(309) 評論(0)  編輯  收藏 所屬分類: 網(wǎng)絡(luò)游戲
           
          主站蜘蛛池模板: 潮安县| 斗六市| 芦溪县| 浦江县| 柳河县| 林口县| 吴忠市| 崇礼县| 冷水江市| 星座| 沅陵县| 定结县| 澜沧| 江城| 五峰| 肇源县| 广饶县| 洛南县| 马关县| 股票| 伊春市| 扬中市| 达拉特旗| 将乐县| 杨浦区| 彩票| 扎兰屯市| 康马县| 虞城县| 阿拉尔市| 宜黄县| 外汇| 昭平县| 大洼县| 南投县| 德清县| 武宁县| 龙里县| 清水县| 南郑县| 乐东|