现在的位置: 首页 > 综合 > 正文

《华清远见学习手记》之 网络五子棋游戏QT类的设计与实现 (5)

2012年10月13日 ⁄ 综合 ⁄ 共 2261字 ⁄ 字号 评论关闭

网络五子棋游戏QT类的设计与实现 (5)

 

   第四版的五子棋游戏界面虽然漂亮多了,但是只能自个跟自个下或者两个人轮着下,本文一直都是标榜 "网络“ ,可到现在还是没有看到它的影子。

   请稍等,容我画一下桃符:

   1. 原程序一分为二,添加QTcpSever 和QTcpSocket类实现网络功能,即采用TCP协议来为服务器端的棋盘数据与客户端的棋盘数据达到同步更新。

   2. 服务器端为黑棋方,首先打开某个端口并在其上监听,代表白棋的客户端发出连接请求,建立连接后黑棋先下。

   3. 任何一方点击鼠标下完棋后,应及时将棋盘数据及当前状态报告给对方。

   4. 任何一方的网络发生中断,另一方应能给出提示,可选择重连或退出。

   5. 下面是主要修改过的类实现的头文件:

        -------黑棋  (服务器端)-------

       chessBase.h:

 

class ChessBase:public QDialog
{
Q_OBJECT
public:
    ChessBase(int,char**);
public slots:
    void slotTurn(bool);
    void slotVictory(bool);
    void slotRestart();
    void slotStart();
    void slotTransforData(int,int,int); //发送数据的槽


    void slotUpdateServerData();   // 更新服务器数据

    void slotAcceptConnection();    //  接收连接

    void slotReportTcpError(QAbstractSocket::SocketError); // 报告TCP错误


signals:
    void signalStart();
    void signalRestart();
    void signalClear();
    void signalSetChess(int,int,int); // 下棋信号


private:
    ChessBoard *board;
    MyChess *white;
    MyChess *black;
    ChessView *view;   
    QLabel*statusLabel;
    QPushButton *startButton;
    QPushButton *restartButton;
    QPushButton *quitButton;
    QTcpServer tcpServer; // 服务器端TcpSocket 用于监听

    QTcpSocket *tcpServerConnection; // 用于与客户端建立连接


    qint16 cx;     // 下棋的X坐标

    qint16 cy;


     // 下棋的Y坐标



    qint16 status; // 当前状态

    qint32 msgSize;// 消息大小


,目前未用到

    QString msg;     // 消息,目前未用到

    QByteArray inBlock; // 接收数据处理

    QByteArray outBlock; // 发送数据处理

 

};

   -------白棋  (客户器端)-------

       chessBase.h:

class ChessBase:public QDialog
{
Q_OBJECT
public:
    ChessBase(int,char**);
public slots:
    void slotTurn(bool);
    void slotVictory(bool);
    void slotRestart();
    void slotStart();
    void slotConnected(); // TCP已连接的槽

    void slotTransforData(int,int,int);


//发送数据的槽



    void slotUpdateClientData();

// 更新客户端数据



    void slotReportTcpError(QAbstractSocket::SocketError );

// 报告TCP错误



signals:
    void signalStart();
    void signalRestart();
    void signalClear();
    void signalSetChess(int,int,int);

// 下棋信号



private:
    ChessBoard *board;
    MyChess *white;
    MyChess *black;
    ChessView *view;   
    QLabel*statusLabel;
    QPushButton *startButton;
    QPushButton *restartButton;
    QPushButton *quitButton;
    QTcpSocket tcpClient; // 客户端TcpSocket


   


qint16 cx;     // 下棋的X坐标

    qint16 cy;


     // 下棋的Y坐标



    qint16 status; // 当前状态

    qint32 msgSize;// 消息大小


,目前未用到

    QString msg;     // 消息,目前未用到

    QByteArray inBlock; // 接收数据处理

    QByteArray outBlock; // 发送数据处理



};

6. 犹抱琵琶半遮面,千呼万唤始出来!第五版的网络版的
五子棋游戏:

 

抱歉!评论已关闭.