01 - 象棋游戏规则
实现上两章节的棋子走棋规则后,开始思考象棋游戏规则,比如轮到谁走,怎么判断谁赢等等。
实现轮到谁走的思路是使用Qt的信号与槽,通过发送信号和接收信号的方式通知轮到哪方下棋,具体实现如下:
//chessarea.h里面添加判断信号
signals:
void redTrueGo(bool b); // 轮到哪一方走信号
//在widget构造函数上实现信号与槽(),可以看到到谁下棋
connect(chessarea, SIGNAL(redTrueGo(bool)), red, SLOT(showRun(bool)));
connect(chessarea, SIGNAL(redTrueGo(bool)), black, SLOT(showRun(bool)));
判断游戏是否结束,可以判断双方的将是否被吃,谁放将被吃,则对方胜出,具体的实现在moveChess函数中。
/**
*
* @brief : 移动一个棋子
*
* @param : moveID : 移动棋子ID
* killID : 目标棋子ID (如果无棋子,默认-1)
* x : x轴坐标
* y : y轴坐标
*
* @return: 无
*
**/
void ChessArea::moveChess(int moveID, int killID, int x, int y)
{
// 判断是否结束游戏
int selectBox = 0;
if(killID != -1)
{
myChess[killID].isDead = true;
myChess[killID].row = -1;
myChess[killID].col = -1;
showDeadChess(myChess[killID]