QT五子棋项目详解之二:人人对战

QT五子棋项目详解之二:人人对战_第1张图片

QT五子棋项目详解之二:人人对战_第2张图片


前面完成了界面的绘制,完成人人对战需要解决以下问题

一、时间

使用LCD_NUMBER控件来处理时间

QT五子棋项目详解之二:人人对战_第3张图片

时间处理的逻辑:

1、当时间结束,判负

一开始,建立两个定时器

QT五子棋项目详解之二:人人对战_第4张图片

1、黑白玩家交替执行,当黑棋玩家下完,黑棋的定时器停止,白棋的定时器开始。

void GameWindow::mouseReleaseEvent(QMouseEvent* event)

鼠标释放后

QT五子棋项目详解之二:人人对战_第5张图片

2、调用超时函数,时间处理完成

QT五子棋项目详解之二:人人对战_第6张图片



二、人人对战逻辑:

黑棋下棋后,触发mouseReleaseEvent

得到坐标x,y,判断在棋盘内下棋。并且将player++,player就用来标识是哪个玩家。

最后update()更新界面。

void GameWindow::mouseReleaseEvent(QMouseEvent* event)
{
   
    int x,y;
    if(mouseflag) //可以下
    {
   
        x=(event->y()-40)/40; //坐标
        y=(event->x()-20)/40;//坐标
        if(event->x()>=20&&event->x()<=620&&event->y()>=40&&event->y()<=640) //在棋盘内
        {
   
            if(game.judge(x,y)) //判断是否可以下
            {
   
                game.peoplePutDown2(x,y);//下子,即改变chess[x][y]值

                if((game.player-1)%2) //该黑棋走
                {
   
                    wtimerId->stop(); //白棋的定时器停止
                    btimerId->start(1000);//黑棋开始
                }
                else
                {
   
                    btimerId->stop();
                    wtimerId->start(1000);
                }
                currentX=x;
                currentY=y;
                update();
                if(game.ifWin(x,y))
                {
   
                    if((game.player-1)%2)
                        QMessageBox::about(this,QStringLiteral("a"),QStringLiteral("a"));
                    else
                        QMessageBox::about(this,QStringLiteral("a"),QStringLiteral("a"));
                    btimerId->stop();
                    wtimerId->stop();
                    mouseflag=false;
                }
            }
            else
                QMessageBox::information(this,QStringLiteral("注意"),QStringLiteral("已存在棋子,请重下"),QMessageBox::Ok);
        }
        else
            QMessageBox::information(this,QStringLiteral("注意"),QStringLiteral("不在棋盘内,请重下"),QMessageBox::Ok);
        update();//重画
    }
}



你可能感兴趣的:(五子棋,AI,人机对战,QT)