• 大小: 251KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: C/C++
  • 标签: 五子棋,  AI  

资源简介

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\description

     文件         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-rebase.sample

     文件       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\objects\09\80cba43ccc0d01ad5809834bdd712c88939e89

     文件        267  2016-12-24 09:58  QtWuziqi\.git\objects\15\b631d691d1e5af07accfcfe0384b6c90396176

     文件        154  2016-12-24 09:58  QtWuziqi\.git\objects\15\d8a4bfcd3b3f785196169e018c0a988132f528

     文件       2133  2016-12-24 20:41  QtWuziqi\.git\objects\16\69499ceb4048b28ff8218c2b7e3cd1ae11e850

     文件       2962  2016-12-24 09:58  QtWuziqi\.git\objects\18\151dd08d8682aef10d421cf3d60dcc05f7b121

     文件       2767  2016-12-25 17:31  QtWuziqi\.git\objects\19\5dd4d86843c8494f9c35a591ac104500697260

     文件       2962  2016-12-24 21:57  QtWuziqi\.git\objects\19\6a4911e824da9d93088def66e6dbca8dfb140c

     文件        360  2016-12-25 17:38  QtWuziqi\.git\objects\1c\d4a41d13bad10f64612a0dc001c0690c8f7184

     文件       1124  2016-12-25 11:41  QtWuziqi\.git\objects\28\10e5a21fd44044388274e705670daa275978c3

     文件        229  2016-12-24 09:44  QtWuziqi\.git\objects\28\e7f817411001ade9ce6491ff1bce402909a48f

............此处省略136个文件信息

评论

共有 条评论