资源简介
成三棋、九连棋、莫里斯九子棋的源码。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个文件信息
相关资源
- cc2541 BLE DEMO
- Apolipoprotein E4 Impairs in vivo Hippocampal
- railroad铁路CAD生成
- 黑白棋(带简单AI)
- vtk QT做的三维地质可视化系统2of2
- Qt局域网聊天软件
- Qt Creator opengl实现四元数鼠标控制轨迹
- HDD repair.rar
- QT局域网聊天系统(基于QT5.修改过)
- qt-电子点菜系统
- 利用foxmail模板批量生成邮件
- C 餐厅叫号系统(QT平)
- 简易绘图的制作 (一)WPF
- QT 实现文件下载
- qt图像处理
- tsai经典两步法 很不错的
- QT,JPEG解码源代码(已完成)
- LSI RAID配置手册(图文)
- Qt 播放音频文件
- jmail组件 v4.3
- Qt 读取16进制的data文件
-
解决安装vs2012后vs2010 li
nk : fatal er - MQTT+串口(usart)透传
- 易语言QQTEA算法源码
- VC工程转Qt工程文件的工具
- Anti-biofilm Activity of Resveratrol and Ursol
- In vitro screening of lactobacilli with antago
- libaio-0.3.107-10.el6.x86_64.rpm
- spaceclaim教程
- MQTT推送Demo
评论
共有 条评论