棋盘,棋子画好了,现在应该开始走棋了,走棋,用鼠标点击一个棋子,再点击一个位置,就可以走了。
首先就是鼠标事件函数,这里有两个,一个是鼠标释放和鼠标点下去的函数,选择释放的函数。因为在下棋的时候,习惯点击后松开,在要走的位置点击。
//void mousePressEvent(QMouseEvent*); //鼠标点下去的
void mouseReleaseEvent(QMouseEvent*); //鼠标释放的
获取释放后的坐标值,这个坐标值时窗口左边,我们需要的是棋盘坐标,所以在这还要进行坐标转换,上次时窗口的坐标值转化为棋盘坐标值,这次是要把其棋盘的坐标值转化为窗口的坐标值。
bool getRowCol(QPoint pt,int &row,int &col);
枚举每个棋子,看他们距离点击的距离是否小于半径,是的话点击的位于其坐标下。这个是一个效率低下的方式,但是最好理解。
bool Board::getRowCol(QPoint pt, int &row, int &col)
{
for(row=0; row<=9; row++)
{
for(col=0; col<=8; col++)
{
QPoint c = center(row, col);