资源简介
成三棋、九连棋、莫里斯九子棋的源码。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个文件信息
相关资源
-
基于QMediaPla
yer的简易视频播放器 - QTreeview实现搜索功能查找功能
- 图像修复图像分解
- 基于QT开发的员工管理系统
- code for Large Scale Metric Learning from Equi
- GOAP AI Demo
- qt5实现的一个拼图游戏
- solitaire纸牌游戏
- QT_A+_记事本
- Linux环境下的网络抓包工具pcap,界面
- Qt 控件 实现 QComboBox输入自动提示功能
- Qt界面响应键盘事件
- 一款简易的Qt登录界面
- Thaiphoon破解版
- compat-libcwait-2.1-1.i386.rpm
- QGraphicsPixmapItem与QGraphicsScene的编程 图
- mqtt协议解析
- QT 串口源码 串口 QT 串口助手代码
- 基于QT creator 的计算器 有UI界面
- QT opengl 绘制立体图形
- QT 实现TTS朗读
- QT编写RTF格式文件
- QT5 打开一个浏览器和对应的网页
- Qt 超级日记本
- 基于qt3的作业:点菜系统
- Qt自定义/自绘复选框/单选框类
- 黑莓上的嵌入式邮件SmartMail
- Qt加载3D模型
- AURIX_Training_FunctionSafety
- eng.traineddata.gz下载42718
评论
共有 条评论