• 大小: 708KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-10
  • 语言: 其他
  • 标签: Qt  成三棋  AI  

资源简介

成三棋、九连棋、莫里斯九子棋的源码。GUI框架Qt5,在Windows 10和Deepin Linux平台下编译通过。详细介绍请看本人博客及开源项目首页。

资源截图

代码片段和文件信息

#include 
#include “aithread.h“

AiThread::AiThread(int id Qobject *parent) : QThread(parent)
    waiting_(false)
    aiDepth(8)
    aiTime(10)
{
    this->id = id;
    // 连接定时器启动,减去118毫秒的返回时间
    connect(this &AiThread::calcStarted this [=]() {timer.start(aiTime * 1000 - 118); } Qt::QueuedConnection);
    // 连接定时器停止
    connect(this &AiThread::calcFinished this [=]() {timer.stop(); } Qt::QueuedConnection);
    // 连接定时器处理函数
    connect(&timer &QTimer::timeout this &AiThread::act Qt::QueuedConnection);
}

AiThread::~AiThread()
{
    stop();
    quit();
    wait();
}

void AiThread::setAi(const NineChess &chess)
{
    mutex.lock();
    this->chess = &chess;
    ai_ab.setChess(*(this->chess));
    mutex.unlock();
}

void AiThread::setAi(const NineChess &chess int depth int time)
{
    mutex.lock();
    this->chess = &chess;
    ai_ab.setChess(chess);
    aiDepth = depth;
    aiTime = time;
    mutex.unlock();
}

void AiThread::run()
{
    // 测试用数据
//    int iTemp = 0;
    // 设一个标识,1号线程只管玩家1,2号线程只管玩家2
    int i = 0;

    qDebug() << “Thread“ << id << “start“;

    while (!isInterruptionRequested()) {
        mutex.lock();
        if (chess->whosTurn() == NineChess::Player1)
            i = 1;
        else if (chess->whosTurn() == NineChess::Player2)
            i = 2;
        else
            i = 0;

        if (i != id || waiting_) {
            pauseCondition.wait(&mutex);
            mutex.unlock();
            continue;
        }

        ai_ab.setChess(*chess);
        emit calcStarted();
        mutex.unlock();

        ai_ab.alphaBetaPruning(aiDepth);
        const char * str = ai_ab.bestMove();
        qDebug() << str;
        if (strcmp(str “error!“))
            emit command(str);
//        qDebug() << “Thread“ << id << “run“ << ++iTemp << “times“;
        emit calcFinished();

        // 执行完毕后继续判断
        mutex.lock();
        if (!isInterruptionRequested()) {
            pauseCondition.wait(&mutex);
        }
        mutex.unlock();
    }
    qDebug() << “Thread“ << id << “quit“;
}

void AiThread::act()
{
    if (isFinished() || !isRunning())
        return;

    mutex.lock();
    waiting_ = false;
    ai_ab.quit();
    mutex.unlock();
}

void AiThread::pause()
{
    mutex.lock();
    waiting_ = true;
    mutex.unlock();
}

void AiThread::resume()
{
    mutex.lock();
    waiting_ = false;
    pauseCondition.wakeAll();
    mutex.unlock();
}

void AiThread::stop()
{
    if (isFinished() || !isRunning())
        return;

    if (!isInterruptionRequested()) {
        requestInterruption();
        mutex.lock();
        waiting_ = false;
        ai_ab.quit();
        pauseCondition.wakeAll();
        mutex.unlock();
    }
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-12-23 13:21  NineChess\
     文件        4967  2018-12-23 13:21  NineChess\.gitignore
     文件         677  2018-12-23 13:21  NineChess\History.txt
     文件         597  2018-12-23 13:21  NineChess\Licence.txt
     目录           0  2018-12-23 13:21  NineChess\NineChess\
     文件        1430  2018-12-23 13:21  NineChess\NineChess\.qmake.stash
     文件        2340  2018-12-23 13:21  NineChess\NineChess\NineChess.rc
     文件       92306  2018-12-23 13:21  NineChess\NineChess\ninechess.ico
     文件        1102  2018-12-23 13:21  NineChess\NineChess\ninechess.pro
     文件       23624  2018-12-23 13:21  NineChess\NineChess\ninechess.pro.user
     文件        1400  2018-12-23 13:21  NineChess\NineChess\ninechess.sln
     文件       51149  2018-12-23 13:21  NineChess\NineChess\ninechess.vcxproj
     文件        9305  2018-12-23 13:21  NineChess\NineChess\ninechess.vcxproj.filters
     文件        1074  2018-12-23 13:21  NineChess\NineChess\ninechess.vcxproj.user
     文件        2459  2018-12-23 13:21  NineChess\NineChess\ninechesswindow.qrc
     文件       28536  2018-12-23 13:21  NineChess\NineChess\ninechesswindow.ui
     文件        1274  2018-12-23 13:21  NineChess\NineChess\resource.h
     目录           0  2018-12-23 13:21  NineChess\NineChess\resources\
     目录           0  2018-12-23 13:21  NineChess\NineChess\resources\icon\
     文件         228  2018-12-23 13:21  NineChess\NineChess\resources\icon\1.png
     文件         528  2018-12-23 13:21  NineChess\NineChess\resources\icon\2.png
     文件         757  2018-12-23 13:21  NineChess\NineChess\resources\icon\ActualSizeHS.png
     文件         380  2018-12-23 13:21  NineChess\NineChess\resources\icon\Black.png
     文件         736  2018-12-23 13:21  NineChess\NineChess\resources\icon\BreakpointHS.png
     文件         390  2018-12-23 13:21  NineChess\NineChess\resources\icon\DocumentHS.png
     文件         621  2018-12-23 13:21  NineChess\NineChess\resources\icon\EditInformationHS.png
     文件         665  2018-12-23 13:21  NineChess\NineChess\resources\icon\EditTableHS.png
     文件         865  2018-12-23 13:21  NineChess\NineChess\resources\icon\Error.png
     文件         527  2018-12-23 13:21  NineChess\NineChess\resources\icon\First.png
     文件         560  2018-12-23 13:21  NineChess\NineChess\resources\icon\FlipHorizontalHS.png
     文件         597  2018-12-23 13:21  NineChess\NineChess\resources\icon\FlipVerticalHS.png
............此处省略71个文件信息

评论

共有 条评论