C++实战--QT实现五子棋

C++实战–QT实现五子棋

在基类Board中实现单机的五子棋,在继承其的子类Tcp_Board中添加网络通信的部分。Board或者Tcp_Board作为MainWindow的一个子窗口。

  • board.h
#ifndef BOARD_H
#define BOARD_H

#include <QWidget>
#include <vector>


class Board : public QWidget
{
    Q_OBJECT
public:
    explicit Board(QWidget *parent = nullptr);
    //棋盘尺寸
    int row;
    int col;
    int d;
    //轮到谁
    bool black_turn;
    //有人胜出
    bool b_win;
    virtual void newgame();//开启新游戏
    std::vector<std::vector<int>> _board;//0代表空格,1代表黑棋,2代表白棋
    virtual void click(int row_stone,int col_stone);//点击事件需要的处理函数
    bool hasWon(bool is_black,int row_stone,int col_stone);

private:
    void paintEvent(QPaintEvent *) override;
    void drawGrid(QPainter* painter);//画网格
    virtual void mousePressEvent(QMouseEvent *event) override;
    void drawStones(QPainter* painter);//刷新棋子布局
    void drawStone(QPainter* painter,int row,int col,bool isblack);//画一个棋子,由drawStones()调用

signals:
    void win(bool isblack);//有人胜出

public slots:
    virtual void won(bool isblack);//有人胜出处理函数

};

#endif // BOARD_H

  • tcp_board.h
#ifndef TCP_BOARD_H
#define TCP_BOARD_H

#include "board.h"
#include <QTcpServer>
#include <QTcpSocket>


class Tcp_Board : public Board//继承自Board
{
    Q_OBJECT
public:
    Tcp_Board();
    void click(int row_stone,int col_stone) override;
    void newgame() override;
    bool is_server;//server 是黑方
    bool is_winner;//是否胜方

private:
    QTcpServer* server;
    QTcpSocket* socket;

private slots:
    void slot_NewConnection();
    void slot_ReadyRead();
    void won(bool isblack) override;

signals:
    void turn_changed(bool black_turn);

};

#endif // TCP_BOARD_H

  • mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "board.h"
#include "tcp_board.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();
    void change_turn(bool black_turn);//改变提示信息等
    void won(bool is_black);//连接Board的win(bool)信号

private:
    Ui::MainWindow *ui;
    Board* board;
    Tcp_Board* tcp_board;

};
#endif // MAINWINDOW_H

  • 5
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值