游戏客户端编码

来源:互联网 发布:理财软件哪个最好 编辑:程序博客网 时间:2024/04/30 00:48

 

游戏前台客户端包含游戏大厅,游戏两部分。 

游戏大厅部分包含以下功能:

1、与游戏大厅服务器的网络通信

2、根据服务器的版本更新本地文件

3、界面的显示,换肤功能

 =================================================================================

网络通信部分封装成了一个类

class CHallSocket 
{
public:
    
void requestLogon();          //请求登录
    void requestGameList();     //请求游戏列表
    void requestRoomList();     //请求某个游戏的房间列表
    void requestLoginGame();  //请求登录某个游戏的房间
   
    
void onrepLogon();            //大厅服务器  回复 请求登录
    void onrepGameList();       //大厅服务器  回复  游戏列表
    void onrepRoomList();       //大厅服务器  回复  某个游戏的房间列表
    void onLoginGame();         //大厅服务器  回复 登录某个游戏的房间

protected:
    
void onRecv();                  //socket 网络低层回调函数, 当接收数据时触发, 再调用 onrepXXX 函数
}
;

 游戏大厅的界面显示窗口类

class CHallDialog
{
   
// ....
}
;

  为了使 CHallDialog 与 CHallSocket 之间能够通信,在 CHallSocket 中加了一个方法。

class CHallSocket 
{
public:
    
void requestLogon();          //请求登录
    void requestGameList();     //请求游戏列表
    void requestRoomList();     //请求某个游戏的房间列表
    void requestLoginGame();  //请求登录某个游戏的房间
   
    
void onrepLogon();            //大厅服务器  回复 请求登录
    void onrepGameList();       //大厅服务器  回复  游戏列表
    void onrepRoomList();       //大厅服务器  回复  某个游戏的房间列表
    void onLoginGame();         //大厅服务器  回复 登录某个游戏的房间

   
void setHallDialog(CHallDialog* pDlg);   // 通过调用 pDlg 的方法,与 CHallDialog 通信

protected:
    
void onRecv();                  //socket 网络低层回调函数, 当接收数据时触发, 再调用 onrepXXX 函数
}
;

 

在 CHallDialog 中是这样调用的

CHallSocket m_Hallsock;
......
m_Hallsock.setHallDialog(
this);
m_Hallsock.requestLogin();
......

 这样做终于解决了网络与界面通信的问题.

但客户要求“用户登录”为一个窗口,“游戏列表”在另外一个窗口显示······

于是又是代码做了修改。

class CHallSocket 
{
public:
    
void requestLogon();          //请求登录
    void requestGameList();     //请求游戏列表
    void requestRoomList();     //请求某个游戏的房间列表
    void requestLoginGame();  //请求登录某个游戏的房间
   
    
void onrepLogon();            //大厅服务器  回复 请求登录
    void onrepGameList();       //大厅服务器  回复  游戏列表
    void onrepRoomList();       //大厅服务器  回复  某个游戏的房间列表
    void onLoginGame();         //大厅服务器  回复 登录某个游戏的房间

    
void setLogonDialog(CLogonDialog* pDlg); // 新增这个方法,与CLogonDialog通信
    void setHallDialog(CHallDialog* pDlg);        // 通过调用 pDlg 的方法,与 CHallDialog 通信

protected:
    
void onRecv();                  //socket 网络低层回调函数, 当接收数据时触发, 再调用 onrepXXX 函数
}
;

  接着客户又要求要变成三个窗口来显示。照上面的改变,又要增加接口。无辜的是 CHallSocket 类,即使变成三个窗口来显示是不关它的事,但它也需要修改来适合界面。

于是,能不能想个办法,在网络通信流程不改变的情况下,界面显示的方法改变(如果改成一个窗口显示,三个窗口显示等等),都不改变 CHallSocket 类?

(未完,待续)

 

原创粉丝点击