资源简介
c++小游戏五子棋,带AI,基于qt写的,代码浅显易懂,分为人人对战和人机对战两种模式
代码片段和文件信息
#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] = 1;
else
gameMapVec[row][col] = -1;
// 换手
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 &&
gameMapVec[row][col] ==
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7 2016-12-25 17:38 QtWuziqi\.git\COMMIT_EDITMSG
文件 331 2016-12-25 17:38 QtWuziqi\.git\config
文件 73 2016-12-24 09:44 QtWuziqi\.git\desc
文件 99 2016-12-25 17:38 QtWuziqi\.git\FETCH_HEAD
文件 23 2016-12-24 09:44 QtWuziqi\.git\HEAD
文件 452 2016-12-24 09:44 QtWuziqi\.git\hooks\applypatch-msg.sample
文件 896 2016-12-24 09:44 QtWuziqi\.git\hooks\commit-msg.sample
文件 189 2016-12-24 09:44 QtWuziqi\.git\hooks\post-update.sample
文件 398 2016-12-24 09:44 QtWuziqi\.git\hooks\pre-applypatch.sample
文件 1642 2016-12-24 09:44 QtWuziqi\.git\hooks\pre-commit.sample
文件 1352 2016-12-24 09:44 QtWuziqi\.git\hooks\pre-push.sample
文件 4951 2016-12-24 09:44 QtWuziqi\.git\hooks\pre-reba
文件 1239 2016-12-24 09:44 QtWuziqi\.git\hooks\prepare-commit-msg.sample
文件 3611 2016-12-24 09:44 QtWuziqi\.git\hooks\update.sample
文件 1088 2016-12-25 17:38 QtWuziqi\.git\index
文件 240 2016-12-24 09:44 QtWuziqi\.git\info\exclude
文件 1047 2016-12-25 17:38 QtWuziqi\.git\logs\HEAD
文件 1047 2016-12-25 17:38 QtWuziqi\.git\logs\refs\heads\master
文件 185 2016-12-24 09:44 QtWuziqi\.git\logs\refs\remotes\origin\HEAD
文件 876 2016-12-25 17:38 QtWuziqi\.git\logs\refs\remotes\origin\master
文件 3048 2016-12-24 09:44 QtWuziqi\.git\ob
文件 267 2016-12-24 09:58 QtWuziqi\.git\ob
文件 154 2016-12-24 09:58 QtWuziqi\.git\ob
文件 2133 2016-12-24 20:41 QtWuziqi\.git\ob
文件 2962 2016-12-24 09:58 QtWuziqi\.git\ob
文件 2767 2016-12-25 17:31 QtWuziqi\.git\ob
文件 2962 2016-12-24 21:57 QtWuziqi\.git\ob
文件 360 2016-12-25 17:38 QtWuziqi\.git\ob
文件 1124 2016-12-25 11:41 QtWuziqi\.git\ob
文件 229 2016-12-24 09:44 QtWuziqi\.git\ob
............此处省略136个文件信息
- 上一篇:C语言试题库共650题,含答案
- 下一篇:C#加载C++\\C的DLL动态链接库
相关资源
- Raize Components 6.1.12 for C++builder XE10的安
- ege实现小游戏maincpp
- MFC规则DLL(MFC Regular DLL)添加DLLMain(
- Aitken加速法算法用c++描述
- ais数据解码
- 斗地主AI源代码
- C++ Primer Plus 第6版 中文版 PDF 完整
- 麻将游戏AI源代码
- C++ 标准库第2版 作者: Nicolai M. Josu
- PICT工具C++源码
- 基于S32K148 TBOX(s32k148_sai_sgtl5000)
- C++ 使用RAISERROR语句返回错误信息
- C++ 使用WAITFOR语句延期执行语句
- nRF52 BLE配置(main.c)
- Brainfuck语言解释器
- windows 线程池(ThreadPoolMain.cpp)
- c++黑白棋ai游戏源码(带背景音乐)
- VS2015C++利用SMTP发送邮件的支持附件发
- ThoughtWorks 笔试题 Trains C++版实现
- C++斗地主(附带简单AI)
- 中国象棋AI算法 C/C++
评论
共有 条评论