资源简介
亲测通过,这是一个单机人机、人人版本的五子棋源码程序。我的文章参考: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波传播
相关资源
- QT5.7.0实现面积计算小demo
- Qt5.10检测系统休眠
- qt5.3 实现直尺
- qt 5+vs2013 插件 qt-vs-addin-1.2.5
- Qt5 写的一个crc校验
- qt5插件demo源码qt5插件demo源码
- PyQt5:QtCharts 绘制折线图
- pyqt5:Qpainter绘制基础图形,鼠标拖动
- YUV420在qt5下显示
- 基于 QT5 百度语音API 图灵机器人API 的
- flash as3 五子棋游戏源码
- Qt5.4编写的图书管理系统
- QT5.5 动态刷新tabview
- 引入了UCT算法的围棋AI程序代码
- QT5.5.1串口实现在线热拔插检测
- Qt编写的网络五子棋
- αβ剪枝算法五子棋
- PyQt5高阶界面控件
- Qt5.X的linuxfb平台源码补丁包
- Qt5 qml TreeView 迄今为止功能最全的树控
- qt网络五子棋
- 五子棋棋盘的QT实现
- qtwinmigrate for qt5
- Qt5.6.1安装qwt-6.1.2
- Qt5实现拼图+自动寻路
- Qt5写的猜数字小游戏,注释详细,入
- 毕业设计-网络五子棋的外文翻译
- QT5.12.2/QT5.12.5 QWebEngineView Ubuntu下编译
- 简单的Shell编辑器Qt5
- QT5 QSerialPort 串口收发
评论
共有 条评论