资源简介
亲测通过,这是一个单机人机、人人版本的五子棋源码程序。我的文章参考:https://blog.csdn.net/u013457167/article/details/83859312,

代码片段和文件信息
#include
#include
#include
#include “GameModel.h“
GameModel::GameModel()
{
}
void GameModel::startGame(GameType type)
{
gameType = type;
// 初始棋盘
gameMapVec.clear();
for (int i = 0; i < kBoardSizeNum; i++)
{
std::vector lineBoard;
for (int j = 0; j < kBoardSizeNum; j++)
lineBoard.push_back(0);
gameMapVec.push_back(lineBoard);
}
// 如果是AI模式,需要初始化评分数组
if (gameType == BOT)
{
scoreMapVec.clear();
for (int i = 0; i < kBoardSizeNum; i++)
{
std::vector lineScores;
for (int j = 0; j < kBoardSizeNum; j++)
lineScores.push_back(0);
scoreMapVec.push_back(lineScores);
}
}
// 己方下为true对方下位false
playerFlag = true;
}
void GameModel::updateGameMap(int row int col)
{
if (playerFlag)
gameMapVec[row][col] = WHITECHESS;
else
gameMapVec[row][col] = BLACKCHESS;
// 换手
playerFlag = !playerFlag;
}
void GameModel::actionByPerson(int row int col)
{
updateGameMap(row col);
}
void GameModel::actionByAI(int &clickRow int &clickCol)
{
// 计算评分
calculateScore();
// 从评分中找出最大分数的位置
int maxScore = 0;
std::vector> maxPoints;
for (int row = 1; row < kBoardSizeNum; row++)
for (int col = 1; col < kBoardSizeNum; col++)
{
// 前提是这个坐标是空的
if (gameMapVec[row][col] == 0)
{
if (scoreMapVec[row][col] > maxScore) // 找最大的数和坐标
{
maxPoints.clear();
maxScore = scoreMapVec[row][col];
maxPoints.push_back(std::make_pair(row col));
}
else if (scoreMapVec[row][col] == maxScore) // 如果有多个最大的数,都存起来
maxPoints.push_back(std::make_pair(row col));
}
}
// 随机落子,如果有多个点的话
srand((unsigned)time(0));
int index = rand() % maxPoints.size();
std::pair pointPair = maxPoints.at(index);
clickRow = pointPair.first; // 记录落子点
clickCol = pointPair.second;
updateGameMap(clickRow clickCol);
}
// 最关键的计算评分函数
void GameModel::calculateScore()
{
// 统计玩家或者电脑连成的子
int personNum = 0; // 玩家连成子的个数
int botNum = 0; // AI连成子的个数
int emptyNum = 0; // 各方向空白位的个数
// 清空评分数组
scoreMapVec.clear();
for (int i = 0; i < kBoardSizeNum; i++)
{
std::vector lineScores;
for (int j = 0; j < kBoardSizeNum; j++)
lineScores.push_back(0);
scoreMapVec.push_back(lineScores);
}
// 计分(此处是完全遍历,其实可以用bfs或者dfs加减枝降低复杂度,通过调整权重值,调整AI智能程度以及攻守风格)
for (int row = 0; row < kBoardSizeNum; row++)
for (int col = 0; col < kBoardSizeNum; col++)
{
// 空白点就算
if (row > 0 && col > 0 &&
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-11-07 16:03 .git\
目录 0 2016-12-24 09:44 .git\branches\
文件 7 2016-12-25 17:38 .git\COMMIT_EDITMSG
文件 331 2016-12-25 17:38 .git\config
文件 73 2016-12-24 09:44 .git\desc
文件 99 2016-12-25 17:38 .git\FETCH_HEAD
文件 23 2016-12-24 09:44 .git\HEAD
目录 0 2018-11-07 16:03 .git\hooks\
文件 452 2016-12-24 09:44 .git\hooks\applypatch-msg.sample
文件 896 2016-12-24 09:44 .git\hooks\commit-msg.sample
文件 189 2016-12-24 09:44 .git\hooks\post-update.sample
文件 398 2016-12-24 09:44 .git\hooks\pre-applypatch.sample
文件 1642 2016-12-24 09:44 .git\hooks\pre-commit.sample
文件 1352 2016-12-24 09:44 .git\hooks\pre-push.sample
文件 4951 2016-12-24 09:44 .git\hooks\pre-reba
文件 1239 2016-12-24 09:44 .git\hooks\prepare-commit-msg.sample
文件 3611 2016-12-24 09:44 .git\hooks\update.sample
文件 1088 2016-12-25 17:38 .git\index
目录 0 2018-11-07 16:03 .git\info\
文件 240 2016-12-24 09:44 .git\info\exclude
目录 0 2018-11-07 16:03 .git\logs\
文件 1047 2016-12-25 17:38 .git\logs\HEAD
目录 0 2018-11-07 16:03 .git\logs\refs\
目录 0 2018-11-07 16:03 .git\logs\refs\heads\
文件 1047 2016-12-25 17:38 .git\logs\refs\heads\master
目录 0 2018-11-07 16:03 .git\logs\refs\remotes\
目录 0 2018-11-07 16:03 .git\logs\refs\remotes\origin\
文件 185 2016-12-24 09:44 .git\logs\refs\remotes\origin\HEAD
文件 876 2016-12-25 17:38 .git\logs\refs\remotes\origin\master
目录 0 2018-11-07 16:03 .git\ob
目录 0 2018-11-07 16:03 .git\ob
............此处省略131个文件信息
- 上一篇:基于Zemax的手机摄像镜头光学设计.doc
- 下一篇:FDTD算法一维TE波传播
相关资源
- Trojan-Qt5-Windows-0.0.4.rar
- QT局域网聊天系统(基于QT5.修改过)
- 五子棋C 源代码
- 五子棋游戏实现悔棋功能
- labview设计的五子棋游戏(源码+文档)
- 超强五子棋软件 奕心2015
- QT5.5入门与项目实战
- AI五子棋训练棋谱
- 最强五子棋
- 基于FFmpeg4.0.2的AAC编码器
- 基于S3C2410的触摸屏五子棋游戏毕业设
- mp4_play.zip
- 使用Qt编写的视频监控系统支持Qt4-Q
- Qt 多线程连接数据库——数据库
- 五子棋可单机双人,单机与电脑和局
- stm32实现的五子棋AI人机对战+人人对战
- 微信小程序--五子棋单机版
- 基于Qt5.8+OpenCV3.2的Basler多相机触发开
- 串口调试助手 Qt5版源码
- Qt5的多线程小程序,实现按钮开关线
- Ubuntu16.04中配置Qt5.9.1和OpenCV3.4.0过程
- VC五子棋毕业论文
- Qt pdf poppler
- 基于Qt5的串口调试助手
- Qt类关系图
- unity3D网络五子棋
- PyQt5编写的大数据应用-高速公路违章
- QT5.9.0实现的QWidget版富文本编辑器
- 弈心五子棋人工智能引擎
- Qt5版NeHe OpenGL教程6-10
评论
共有 条评论