这个项目有启发意义,棋盘不是绘制的,而是图片贴上去的。
考察:坐标,pixmap,黑白棋的逻辑
想了解传统的绘制方式和棋类AI的传统高级方法,请看我关于五子棋的系列文章
开源项目:
https://github.com/zhuimengshaonian66/BlackWriteChess
第一步:
绘制UI
棋盘是一张图,这个项目的难点是找坐标。但是我们有不传的法宝,通过鼠标的移动时间轻松搞定。
将起点坐标和方格的大小都记录下来。
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
//去除边框
this->setWindowFlags(Qt::FramelessWindowHint);
startPoint = QPoint(147,68); //起点坐标
endPoint = QPoint(1003,670); //终点坐标
gridWidth = (endPoint.x() - startPoint.x())/8;
gridHigh = (endPoint.y() - startPoint.y())/8;
initChess();
connect(&timer, &QTimer::timeout, this, &Widget::machinePlay);
}
初始化棋盘,用
chessStatus数组的状态代表棋盘的状态。
void Widget::initChess()
{
whiteFlag = blackFlag = true;//一开始双方都能落子
overFlag = false; //一开始游戏不结束
bNumber = wNumber = 0;
memset(chessStatus,0,sizeof(chessStatus));
//中间四子:两白两黑
chessStatus[3][3] = Black;
chessStatus[4][3] = White;
chessStatus[3][4] = White;
chessStatus[4][4] = Black;
role =