#ifndef BOARDWIDGET_H #define BOARDWIDGET_H #include #include #include class BoardWidget : public QWidget { Q_OBJECT public: explicit BoardWidget(QWidget *parent = nullptr); protected: void paintEvent(QPaintEvent *event); void mouseReleaseEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); private: void downPiece(int x, int y); void checkWinner(); bool isFivePieceFrom(int x, int y); //判断从(x, y)处开始,是否有五个同色棋子在一条线上 bool isVFivePieceFrom(int x, int y); //判断从(x, y)处开始,向下是否有五个同色棋子 bool isHFivePieceFrom(int x, int y); //判断从(x, y)处开始,向下是否有五个同色棋子 bool isFSFivePieceFrom(int x, int y); //判断从(x, y)处开始,右上方向是否有五个同色棋子 bool isBSFivePieceFrom(int x, int y); //判断(x, y)处开始, 右下方向是否有五个同色棋子 void setTrackPos(const QPoint &value); signals: void gameOver(int winner); public slots: void initBoard(); public: static const QSize WIDGET_SIZE; //棋盘控件大小 static const QSize CELL_SIZE; //棋盘单元格大小 static const QPoint START_POS; //棋盘单元格绘制开始位置 static const QPoint ROW_NUM_START; //棋盘行号开始位置 static const QPoint CLU_NUM_START; //棋盘列号开始位置 static const int BOARD_WIDTH = 15; //棋盘列数 static const int BOARD_HEIGHT = 15; //棋盘行数 static const int NO_PIECE = 0; //棋子标志, 无子 static const int WHITE_PIECE = 1; //棋子标志, 白子 static const int BLACK_PIECE = 2; //棋子标志, 黑子 static const bool WHITE_PLAYER = true; //棋手标志, 白方 static const bool BLACK_PLAYER = false; //棋手标志, 黑方 private: bool endGame; //游戏结束标志 int board[BOARD_WIDTH][BOARD_HEIGHT]; //棋盘数据 int nextPlayer; //下一手棋手 QPoint lastPos; //上一步位置 QPoint trackPos; //鼠标在棋盘上的位置 QVector winPoses; //五个相连的棋子位置 }; #endif // BOARDWIDGET_H